본문 바로가기
언어/java

[Java] 6. 클래스 (5) - 13~15

by 젼젼39 2025. 5. 14.

6.13 접근 제한자

    - 중요한 필드와 메소드가 외부로 노출되지 않도록 해 객체의 무결성을 유지하기 위해 사용

    - public / protected / (default) / private

 

(1) 클래스의 접근 제한

    - 클래스는 public / default 접근 제한을 가질 수 있음

    - public을 생략했다면 클래스는 default 접근 제한을 가짐 == 다른 패키지에서는 사용할 수 없음

 

(2) 생성자의 접근 제한

    - 생성자는 public / default / private 접근 제한을 가짐

    - private : 클래스 내부에서만 생성자를 호출할 수 있음 == 클래스 내부에서만 객체를 생성할 수 있음

 

(3) 필드와 메소드의 접근 제한

    - 필드와 메소드는 public / default / private 접근 제한을 가질 수 있음

    - private : 클래스 내부에서만 필드를 읽고 변경할 수 있음, 클래스 내부에서만 메소드를 호출할 수 있음

 

6.14 Getter과 Setter

    객체의 필드(데이터)를 외부에서 변경할 경우 객체의 무결성이 깨질 수 있음
        --> 직접적인 외부에서의 필드 접근을 막고, 메소드를 통해 필드에 접근하는 것을 선호

    - Setter: 데이터를 검증해 유효한 값만 필드에 저장. 검증 코드

    - Getter : 필드값이 객체 외부에서 사용하기에 부적잘한 경우, 메소드로 적절한 값으로 변환해 리턴. 변환 코드

 

 

6.15 싱글톤 패턴

    애플리케이션 전체에서 단 한 개의 객체만 생성해 사용하고 싶을 때 사용

    - 핵심 : 생성자를 private 접근 제한해, 외부에서 new 연산자로 생성자를 호출할 수 없게 막는 것!

private 클래스() {}

    --> 생성자가 private이므로 호출할 수 없어, 외부에서 마음대로 객체를 생성할 수 없음

    - 대신 싱글톤 패턴의 정적 메소드를 통해 간접적으로 객체를 얻음!

public class 클래스{
	//private 접근 권한을 갖는 정적 필드 선언과 초기화
    private static 클래스 singleton = new 클래스();
    //여기에서, 자신 타입으로 정적 필드 선언하고 미리 객체를 생성하고 초기화
    //  private를 붙였으니 외부에서 정적필드값 변경 못함!!
    
    //private 접근 권한을 갖는 생성자 선언
    private 클래스() {}
    
    //public 접근 권한을 갖는 정적 메소드 선언
    public static 클래스 getInstance() {
    	return singleton;
        //이 부분에서, public을 써서 정적 필드값을 리턴함
    }
}

    -> 외부에서 객체를 얻는 방법 = getInstance() 메소드 호출하는 것!

    - getInstance() 메소드가 리턴하는 객체 == 정적 필드가 참조하는 싱글톤 객체

    == 클래스.getInstance()를 통해 호출한 객체들은 모두 동일한 객체!!

'언어 > java' 카테고리의 다른 글

[Java] 7. 상속 (1) - 1~4  (0) 2025.05.20
[Java] 6. 클래스 (6) - singleton  (0) 2025.05.17
[Java] 6. 클래스 (4) - 11~12  (0) 2025.05.13
[Java] 6. 클래스 (3) - 8~10  (0) 2025.05.13
[Java] 6. 클래스 (2) - 5~7  (0) 2025.03.22