둘째마당, 자바의 핵심. 객체 지향 프로그래밍
06) 클래스와 객체2
this 예약어
생성된 인스턴스 스스로를 가리키는 예약어, 자신의 메모리를 가리키는 this!
생성자에서 다른 생성자를 호출하는 this!
자신의 주소를 반환하는 this!
Class Person {
String name;
int age;
Person(){
this("이름없음", 1); //this를 사용해 Person(String,int)생성자 호출
}
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class CallAnotherConst{
public static void main(Stirng[] args){
Person noName = new Person();
System.out.println(noName.name);
System.out.println(noName.age);
}
}
static 변수
static변수 = '정적 변수' = '클래스 변수'
변수 유효 범위
- 지역 변수의 유효 범위
지역 변수가 생성되는 메모리를 스택(stack)
함수가 반환되면 할당되었던 메모리 공간이 해제 됨
- 멤버 변수의 유효 범위
멤버 변수(=인스턴스 변수)는 클래스가 생성될 때 힙(heap) 메모리에 생성
클래스의 어느 메서드에서나 사용할 수 있음
인스턴스가 GC에 의해 수거되면 메모리에서 사라짐
- static변수의 유효 범위
프로그램 영역 중 데이터 영역에 상수, 문자열, static 변수가 생성
인스턴스 변수와 static 변수는 사용하는 메모리가 다름
static 응용 - 싱글톤 패턴
단계 1 : 생성자를 private로 만들기
외부 클래스에서 마음대로 Company 인스턴스를 생성할 수 없게 끔
public class Company {
private Company( ) {}
}
단계 2 : 클래스 내부에 static으로 유일한 인스턴스 생성하기
Company 클래스 내부에서 하나의 인스턴스 생성. 이 인스턴스가 프로그램 전체에서 사용할 유일한 인스턴스.
public class Company {
private static Company instance = new Company();
private Company( ) {}
}
단계 3 : 외부에서 참조할 수 있는 public 메서드 만들기
이제 private로 선언한 유일한 인스턴스를 외부에서도 사용할 수 있도록 설정해야 함
이때 인스턴스를 반환하는 메서드는 반드시 static으로 선언해야 합니다. 왜냐면 get Instance()메서드는 인스턴스 생성과 상관없이 호출할 수 잇어야 하기 때문입니다.
public class Company(){
...
public static Company getInstance(){ //인스턴스를 외부에서 참조할 수 잇도록 public get() 메서드구현
if(instance == null) {
instance = new Company();
}
return instance; //유일하게 생성한 인스턴스 반환
}
}
단계 4 : 실제로 사용하는 코드 만들기
public class CompanyTest{
public static void main(String[] args){
Company myCompany1 = Company.getInstance();
Company myCompany2 = Company.getInstance();
System.out.println(myCompany1 == myCompany2); //두 변수가 같은 주소인지 확인
}
}
'개발 > Java' 카테고리의 다른 글
Java] Do it 자바 프로그래밍 입문 요약 (둘째마당 - 08) (0) | 2019.06.16 |
---|---|
Java] Do it 자바 프로그래밍 입문 요약 (둘째마당 - 07) (0) | 2019.06.14 |
Java] Do it 자바 프로그래밍 입문 요약 (둘째마당 - 05) (0) | 2019.06.11 |
Java] Do it 자바 프로그래밍 입문 요약 (첫째마당 - 04) (0) | 2019.06.11 |
Java] Do it 자바 프로그래밍 입문 요약 (첫째마당 - 03) (0) | 2019.06.11 |