본문 바로가기

개발/Java

[Java] 캡슐화 (접근 제어자, getter & setter)

캡슐화

캡슐화란 필드와 메서드를 하나로 묶어 객체로 만든 후 실제 내부 구현 내용은 외부에서 알 수 없게 감추는 것을 의미한다.

 

좀 더 자세한 설명은 아래 링크로

2024.04.24 - [개발/Java] - [Java] 객체지향 프로그래밍

 

[Java] 객체지향 프로그래밍

객체란? 객체란 세상에 존재하는 물체를 뜻하며 식별이 가능한 것을 의미한다. 예를 들면, 자동차는 객체라고 할 수 있다. 또한 배달 주문, 운동과 같은 개념적인 것 또한 식별이 가능하기 때문

ggumijju.tistory.com

 

 

이러한 캡슐화접근 제어자를 통해 구현할 수 있다.

 

 

 

 

접근제어자

폴더상에서 어디까지 노출될지 정하는 제어자

 

  • 접근 제어자 : public, protected, default, private
  • 그 외 제어자 : static, final, abstract

 

 접근제어자는 클래스, 멤버 변수, 메서드, 생성자에 사용되고, 지정되어 있지 않다면 default이다.

  • public : 접근 제한이 전혀 없다.
  • protected : 같은 패키지 내에서, 다른 패키지의 자손 클래스에서 접근이 가능하다
  • default : 같은 패키지 내에서만 접근이 가능하다.
  • private : 같은 클래스 내에서만 접근이 가능하다. 

 

 

 

접근제어자가 필요한 이유

 

접근제어자는 클래스 내부에 선언된 데이터를 보호하기 위해서 사용한다. 유효한 값을 유지하도록, 함부로 변경하지 못하도록 접근을 제한하는 것이 필요한데 이때, 접근 제어자로 제한한다.

 

 

참고, 생성자의 접근 제어자 = 클래스의 접근 제어자와 같음

 

 

 

 

 

사용 가능한 제어자
  • 클래스 : public, default, final, abstract
  • 메서드 : public, protected, default, private, final, abstract, static
  • 멤버 변수 : public, protected, default, private, final, static
  • 지역변수 : final

 

 

 

 

제어자 사용 시 주의 사항
  • 메서드에 static과 abstract를 함께 사용할 수 없다.

  abstract 제어자를 가지는 메소드는 선언부만 있는 메소드인데, static 제어자를 가지는 메소드는 인스턴스를 생성하지 않고도 바로 사용할 수 있어야 하므로, 이 두 제어자는 메소드에 함께 사용할 수 없다.

 

  • 클래스에 abstract와 final을 동시에 사용할 수 없다.

  final 제어자를 가지는 클래스는 다른 클래스가 상속받을 수 없게 되며, abstract 제어자를 가지는 클래스는 다른 클래스가 상속해서 오버라이딩해야만 사용할 수 있으므로, 이 두 제어자는 클래스에 함께 사용할 수 없다.

 

  • abstract메서드의 접근 제어자가 private일 수 없다.

  abstract 제어자를 가지는 메소드는 다른 클래스가 상속하여 오버라이딩해야만 사용할 수 있는데, private 제어자를 가지는 메소드는 자식 클래스에서 접근할 수 없게 되기때문이다.

 

  • 메서드에 private와 final을 같이 사용할 필요는 없다.

  메소드에 사용된 final 제어자와 private 제어자는 모두 해당 메소드가 오버라이딩을 통한 재정의를 할 수 없다는 의미를 가지므로, 둘 중에 하나만 사용해도 된다.

 

 

 

 

final에 대해 좀 더 알고싶다면 아래링크로

2024.04.22 - [개발/Java] - [Java] 변수

 

[Java] 변수

상수 표현 final 붙이면 값이 수정이 안 되기때문에 상수를 표현할 때 쓰인다.final int NUM = 10;  추가적으로, 상수는 처음에 생성되고 값이 안 변하기때문에 인스턴스(객체)마다 상수를 저장할 필

ggumijju.tistory.com

 

 

 

 

 

 

 

Getter & Setter

Getter와 Setter는 private으로 접근을 제한한 값을 다른 클래스에서 조회, 세팅할 때 쓰인다. 직접적인 값의 조회, 세팅을 방지하기 위해 사용한다.

 

 

Getter

 외부에서 객체의 private 한 필드를 읽을 필요가 있을 때 Getter 메서드를 사용한다.

 

예시

private String model;

public String getModel(){
	return model;
}
//클래스 내에 메소드로 선언하고
//다른 클래스에서 호출하면 됨.

 

 

Setter

 외부에서 객체의 private 한 필드를 저장/수정할 필요가 있을 때 Setter 메서드를 사용한다.

 

예시

private String model;

public void setModel(String model) {
	this.model = model;
}