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 |