java 강의 8일차 - 메소드, static, Design pattern,class 상속
메소드
1. 인자있는 방식, 리턴값이 있는 방식
인자 전달 방식
-값에 의한 전달 ( call by value ) 소량의 데이터
-참조 ( 주소) 에 의한 전달 ( call by reference ) ( 대량의 데이타, 복사한 데이터 )
2. 재귀호출 ( recrusion )
**Static
1.변수, 메소드, 클래스 모두에 사용 가능
2.인스턴스 와는 별도로 만들어지는 메모리
3.모든 객체가 공동으로 사용하는 메모리
4.클래스변수
static 은 class 안에서만 선언 가능, 메소드에서는 선언 불가능, 클래스와 상관이 없다
5.static blook
static{
클래스변수들을 초기화
}
별도로 static 변수들만 모여서 초기화 하는 공간
인스턴스가 만들어지기 전에 초기화가 진행된다.
** 중첩클래스 ( 내부클래스 )
접근과 관리가 편하게 하기 위해서
-일반클래스
-static 클래스
===============================================
***Design Pattern
- Singleton Pattern
private , static , constructor(생성자)
1) 외부에서 인스턴스 생성을 할 수 없도록 막는다.
2) 클래스 내부에서 단 하나의 인스턴스를 생성해준다.
3) 생성된 인스턴스를 외부에서 사용할 수 있도록 해준다.
===============================================
클래스의 마지막 이야기
** 상속 ( Inheritance )
부모클래스 - 슈퍼클래스, 부모클래스 - 상속을 하는 클래스
자식클래스 - 서브클래스. 자식클래스 - 상속을 받는 클래스
1. 생성자, private - 상속불가
2. 부모의 생성자는 호출가능
1) super(),super(...) // super는 부모의주소 this 는 자신의주소
2) super.변수, super.메소드
3) 부모의생성자가 가장 먼저 호출되어야 한다.
3.생성자의 호출 순서
1) 항상 자식은 부모의 기본생성자를 먼저 호출한다.
4.상속은 확장의 개념이다.
5.
1) 다중상속
- 여러 부모클래스 로 부터 상속을 받아서 자식이 하나
- 제일마지막 클래스에서 충돌이나지않으려면, 기능중복없이 철저하게만들어야함
- 자식이 어떤기능을 가졌는지 알아보려면, 모든 상위클래스들을 전부 검사해야함
2) 단일상속
- 부모클래스 하나에 자식이 여러개
- 처음엔 미흡했어도, 점점 추가시켜나가면 됨
- 자식이 어떤기능을 가졌는지 알아보려면, 바로 상위의 클래스들을 검사해나가면 됨
** 상속설계
부모클래스는 반드시 최소한의 기능으로 구성된다. 자식들이 필요한 최소한의 공통된 기능만을 구성한다
과제
주제- 변수명 메서드명 을 아이콘으로 만들어 3단계까지 내려보내본다.
-----------------------------------------------------------------------------
OutClass
package date150916;
public class OuterClass {
private int outer1;
static class InnerClass{
private int inner1;
void innerMethod(){
OuterClass oc = new OuterClass();
oc.outer1 = 100;
System.out.println("innerMethod 호출" + inner1);
System.out.println("outer : " +oc.outer1);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
InnerClass in = new InnerClass();
in.inner1 =10;
in.innerMethod();
}
}
-----------------------------------------------------------------------------
SingletonTest
package date150916;
class SingletonDemo{
int i;
static SingletonDemo single = new SingletonDemo();//단 하나의 인스턴스 //싱글턴데모 의 참조변수인 싱글 을 하나만 생성할수있도록, 스태틱 을 넣어 추가해준다.
private SingletonDemo(){} // private 를 사용하게 해주려면 setter나 getter 가 필요한데, 이미 값이설정되있으므로; getter만 설정해주면 된다.
public static SingletonDemo getInstance(){ //이 메서드 도 스태틱 으로 선언을 해줘야 사용이가능하다
// getInstance 대신에 newInstance 로 만드는게 요즘 추세
return single;
}
}
public class SingletonTest {
public static void main(String[] args) {
// TODO Singleton Pattern
//SingletonDemo demo1 = new SingletonDemo(); // 인스턴스 생성이 잘 되나, 싱글턴은 인스턴스생성을 막아줘야하기때문에 생성자를 private로 막아 생성자체를 막는다
//위의 인스턴스 는 생성이 막혀 사용이 불가능하다.
SingletonDemo demo1 = SingletonDemo.getInstance(); // 하나의 인스턴스 주소를 데모1과 데모2가 공유한다.
SingletonDemo demo2 = SingletonDemo.getInstance();
if(demo1 == demo2)
System.out.println("Same IP");
else
System.out.println("Different IP");
}
}
---------------------------------------------------------------------------------
CMS
package prjInheritance;
public class CMS {
private int no;
private String name; // private 는 상속이 되지만; 사용이 불가 하기떄문에 상속불가 라고도 말함
private char level;
private String tel;
public CMS(){}
public CMS ( int no, String name, char level, String tel) { // 생성자 라서 상속이 불가하다
this.no = no;
this.name = name;
this.level = level;
this.tel = tel;
}
public void display(){
System.out.println("고객번호 : " + no);
System.out.println("고객이름 : " + name);
System.out.println("고객레벨 : " + level);
System.out.println("고객전화 : " + tel);
}
}
----------------------------------------------------------------------------------
inheritanceTest
package prjInheritance;
public class InheritanceTest {
public static void main(String[] args) {
// TODO 고객 관리 메인 프로그램
// CMS kim = new CMS(1, "김유신", 'C', "111-1111" );
// kim.display();
CMSExt hong = new CMSExt(2, "홍길동", 'B', "222-2222", "서울시종로");
hong.print();
}
}
------------------------------------------------------------------------------
package prjInheritance;
public class CMSExt extends CMS{ // CMS는 부모클래스 CMSExt 는 자식클래스
String address;
CMSExt(int no, String name, char level, String tel, String address){
// this.no = no;
// this.name = name;
// this.level = level;
// this.tel = tel;
super(no, name, level, tel);
this.address = address;
}
void print(){
display();
System.out.println("고객 주소 : " + address);
}
}
------------------------------------------------------------------------
Callorder
package prjInheritance;
class A{
A(){
System.out.println("A클래스의 인스턴스 생성");
}
}
class B extends A{ // B 는 A 의자식클래스
/*
* B(){
//super();
System.out.println("B클래스의 인스턴스 생성"); // B의 기본생성자를 지워보았다.
}
*/
B(){} // B의 기본생성자를 다시 만들어줬더니, C에서 오류가 나지않는다.
B(int i){
System.out.println(i); // B의 생성자를 지우고 값을입력하자, 기본생성자가 없으므로 C에서 오류가 난다.
}
}
class C extends B{ //C 는 B의 자식클래스 이며 A 의 손자클래스
C(){
// super();
System.out.println("C클래스의 인스턴스 생성");
}
}
public class Callorder {
public static void main(String[] args) {
// TODO 생성자의 호출 순서
new C();
}
}
-----------------------------------------------------------------------------
|
2015년 10월 21일 수요일
java 강의 8일차 - 메소드, static, Design pattern,class 상속
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기