[JAVA] 접근 제어 지시자( private, protected, default, public) / 정보은닉, 캡슐화

2023. 5. 17. 11:09·Java

1. 접근 제어 지시자(access modifier)

클래스 외부에서 클래스의 멤버변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드

public > default > protected > private

  1. public : 클래스의 외부 어디에서나 접근 가능
  2. default : 같은 패키지 내부에서만 접근 가능
  3. protected : 같은 패키지나 상속관계의 클래스에서 접근 가능 / 그 외에서는 접근 불가
  4. private : 같은 클래스 내부에서만 접근가능

2. get() , set() 메서드

private으로 선언된 멤버 변수에는 접근할 수 없다.  >> 접근, 수정할 수 있는 메서드를 public으로 제공

  • get() 메서드만 제공되는 경우 : read-only field
  • 이클립스에서 [shift + alt + s] -> Generate Getters and Setters로 자동 생성 가능
  • 인텔리제이에서 [alt+insert] -> Getters and Setters로 자동 생성 가능

getter은 해당 클래스 객체의 값을 가져오는 메서드이고, setter은 해당 클래스 객체의 값을 세팅(설정)하는 메서드이다.

class Car{	
	private String color;	
	private int speed;	
    
    public Car(){}
    
	public Car(String color, int speed){	
		this.color = color;	
		this.speed = speed;
	}
	
	public String getColor() {
		return color;	
	}
	public void setColor(String color){
		this.color = color;
	}
    
	public int getSpeed(){
		return speed;
	}
	public void setSpeed(int speed){
		this.speed = speed;
	}
   
 }

3. 정보 은닉

  • 정보은닉 : private 키워드를 사용해서 외부에서 클래스 내부의 정보에 접근할 수 없도록 하는 기능
  • 외부에서 꼭 필요한 정보만 제어하고 접근할 수 있도록 함.
class Date{
 	private int year;
	private int month;
	private int day;
	private boolean isValid;
    
	public void setYear(int year) {
		this.year = year;
	}
	public void setMonth(int month) {
		if(month<1||month>12){
			isValid=false;
        }
		else {
			isValid=true;
			this.month = month;
		}
	}
      public void setDay(int day) {
		 this.day = day;
	 }

}

위의 코드처럼 month 변수를 private로 설정하면 외부에서는 date.month와 같이 변수에 직접 접근하지 못하고,

setMonth()를 통해 접근해야 한다.,

Date date = new Date();
date.setYear(2023);
date.setMonth(1);
// date.setMonth(14); //isValid=false
date.setDay(31);

month를 1~12월 사이로 설정한다면 isValid 가 true가 되고 정상적으로 month 변수에 값이 전달되겠지만, 

그렇지 않다면 isValid는 false가 되어 날짜 대신 " 유효하지 않은 날짜입니다. " 가 출력될 것이다.

 

위와 같이 정보은닉을 사용하면,

month 값이 잘못 입력되는 것을 방지할 수 있고,

외부에서 날짜 데이터에 접근할 수 없도록 할 수 있다.


4. 캡슐화 (encapsulation)

정보은닉을 활용한 캡슐화

  • 외부에서 꼭 필요한 정보, 기능만을 외부에 오픈
  • 대부분의 멤버 변수와 메서드를 감추고, 외부에 통합된 인터페이스만을 제공하여 일관된 기능을 구형하게 함
  • 각각의 메서드나 멤버변수에 접근함으로써 발생하는 오류를 최소화한다.

 

'Java' 카테고리의 다른 글

[JAVA] 상속  (0) 2023.05.17
[JAVA] static과 final  (0) 2023.05.17
[JAVA] 생성자 / 오버로딩(overloading)  (0) 2023.05.17
[Java] StringTokenizer  (0) 2023.05.04
[Java] Optional<T> 클래스  (0) 2023.05.03
'Java' 카테고리의 다른 글
  • [JAVA] 상속
  • [JAVA] static과 final
  • [JAVA] 생성자 / 오버로딩(overloading)
  • [Java] StringTokenizer
HSRyuuu
HSRyuuu
Web Server Developer hsryuuu
  • HSRyuuu
    HS_dev_log
    HSRyuuu
  • 전체
    오늘
    어제
    • 전체 글 보기 (241)
      • Java (25)
      • Spring (32)
      • JPA & QueryDSL (13)
      • Database (17)
      • 자료구조 & 알고리즘 (30)
      • Infra & DevOps (13)
      • [ Computer Science ] (47)
        • Web & Network (14)
        • 프로그래밍 이론 (11)
        • 운영체제 (3)
        • 데이터베이스 이론 (5)
        • Linux 리눅스 (7)
      • [ Frontend ] (17)
        • Vue.js & Nuxt.js (9)
        • JSP_Thymeleaf (7)
      • [ 기타 ] (47)
        • 오픈소스 라이브러리 (5)
        • 코딩테스트 (13)
        • Trouble Shooting (7)
        • Tech Interview (6)
        • Book Review (9)
        • 끄적끄적... (5)
        • 개인 프로젝트 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • github
  • 링크

  • 공지사항

    • GitHub
    • 공부한 내용을 정리하고 기록하는 블로그 입니다.
  • 인기 글

  • 태그

    Java
    백준
    TechInterview
    JPA
    백엔드
    백엔드스쿨
    백엔드공부
    SQL
    cleancode
    Nuxt3
    MySQL
    기술면접
    Spring
    클린코드
    mybatis
    자료구조
    리눅스
    Linux
    트랜잭션
    SpringBoot
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
HSRyuuu
[JAVA] 접근 제어 지시자( private, protected, default, public) / 정보은닉, 캡슐화
상단으로

티스토리툴바