개발/Java

Java] Do it 자바 프로그래밍 입문 요약 (둘째마당 - 06)

펭귀니 :) 2019. 6. 14. 01:28

둘째마당, 자바의 핵심. 객체 지향 프로그래밍

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); //두 변수가 같은 주소인지 확인
    }
}