Java의 private

zihooy·2023년 5월 4일
0

Java Programming

목록 보기
12/21
post-thumbnail

Java의 기본 개념 중 private에 대해 알아보자.

🏹 데이터 은닉

private을 활용하면, class 내부에서는 사용 가능하지만 외부에서는 접근이 불가능하다.
private 변수는 setter, getter를 통해 외부에서 접근이 가능하다.

class Tiger {
	private int num = 10;	//class 내부에서는 사용 가능, 외부에서는 접근 불가 

	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		//확장 코드를 추가할 수 있다.
		if(num<0) {
			System.out.println("음수는 설정할 수 없습니다.");
			return;
		}
		this.num = num;
	}
}
public class hello {
	public static void main(String[] args) {
		Tiger t = new Tiger();
//		System.out.println(t.num);	//외부에 노출 되는 것은 바람직하지 않다.
		t.setNum(20);
		System.out.println(t.getNum());
	}
}

🏹 private을 활용한 싱글톤 패턴 적용

싱글톤 패턴의 특성상, 각 class마다 객체를 1개씩만 생성할 수 있다.
이를 private을 활용하여 구현해보자.

만약 다음과 같은 코드가 있다면,

		Tiger t1 = new Tiger();	
		Tiger t2 = new Tiger();	

객체가 2개이므로 싱글톤 패턴이 적용되었다고 할 수 없다.

그러면 어떻게 딱 1개의 객체만 만들 수 있을까?
.
.
앞서 언급했던 static을 활용하면 가능하다 !

class 안에 static으로 객체를 null 상태로 하나 생성해두고, 이 객체가 null이라면 더이상 객체를 만들지 않는 것이다. 다음의 코드를 살펴보자.

class Tiger {
	static Tiger t = null;	//멤버 변수 , static안에서 사용하기 위해 static 추가  
	// 객체를 생성시키지 못하게 하는 방법 
	private Tiger() {}
	static Tiger getInstance() {	//static을 활용하면 외부에서 호출 가능 
		if(t == null) 
			t = new Tiger();	//멤버 내에서는 객체 생성 가능
		return t;
	}
}
public class hello {
	public static void main(String[] args) {

		Tiger t1 = Tiger.getInstance();
		Tiger t2 = Tiger.getInstance();
		Tiger t3 = Tiger.getInstance();

		System.out.println(t1.hashCode());
		System.out.println(t2.hashCode());
		System.out.println(t3.hashCode());
		//모두 같은 hashCode -> 같은 객체이다 
	}
}

위의 코드에서 t1, t2, t3의 hashcode를 확인해보면 모두 같은 결과가 나와, 3개의 객체가 모두 같음을 알수 있다.

profile
thisIsZihooLog

0개의 댓글