본문 바로가기
개발/JAVA

캡슐화 (Encapsulation)

by Ulegi 2023. 3. 6.

안녕하세요 :) 회사에서 1인분 해내고 싶은 Ulegi 입니다 😂

Java프로젝트를 진행할때 그냥 생코딩을 한다고 되는게 아니라 생각해야할 규칙이 많이 있네요!

오늘은 그 중 캡슐화에 대해 알아보겠습니다.

 


캡슐화 (Encapsulation)

 

캡슐화 란 무엇일까?

캡슐화는 객체가 내부적으로 기능을 어떻게 구현하지는지를 숨기는 것입니다.

 

좀 더 상세하게 풀어 이야기 하자면,

같은 목적을 가지는 변수와 함수를 하나의 클래스로 묶어서 외부에서 쉽게 접근하지 못하도록 숨기는 것이죠.

결국 객체가 제공하는 필드와 메서드를 통해서만(외부에서 내부의 정보 접근 및 수정 불가하도록) 접근을 가능하게 하는 것입니다.

 


캡슐화를 왜 사용할까?

캡슐화 사용의 이유는 중요한 데이터를 쉽게 바꾸지 못하도록 하는 것입니다.

 

캡슐화를 사용했을 때, 데이터가 변경되어도 다른 객체에 영향을 주지 않게 되어 독립성이 좋고, 유지보수나 확장 시 오류가 줄어듭니다.

 


캡슐화는 어떻게 구현될까?

캡슐화는 접근제어자로 접근 가능 범위가 정해진 클래스에 getter / setter 라는 메서드로 접근을 가능하도록 구현됩니다.

 

그 전에 참고로 접근제어자에 대해 간단히 설명을 적으면,

접근제어자

public : 접근 제한 X (자유로운 접근)

protected: 동일 패키지 혹은 파생 클래스에서만 접근 가능

default : 동일 패키지에서만 접근 가능 (기본 값 - 명시 안될 시 default로 산정)

private: 자신의 클래스에서만 접근 가능

 

 

캡슐화가 구현된 기본 코드를 짜보았습니다.

public class ForCapsul {
​
private String name;
​
//getter 메서드
// => name 값을 가져오기 위해서는 getter 메서드
public String getName() {
	return name;
}
​
//setter 메서드
// => name 값에 입력을 하기 위해서는 setter 메서드
public void setName(String name) {
	this.name = name;
}
}

ForCapsul 클래스 내부에 있는 변수(name)은 접근제어자가 private 이기 때문에 forCapsul 클래스 내부에서만 접근이 가능합니다.

캡슐화가 지켜진 코드인거죠

=> name 값에 입력을 하기 위해서는 setter 메서드, 값을 가져오기 위해서는 getter 메서드를 활용하여 접근하여야 합니다.

=> getter / setter 메서드는 ForCapsul 클래스 내부에 있으니까요!

 

 

실제로 값을 입력하거나 가져오려는 main 코드를 구현하면 아래와 같습니다.

public class Main {
​
  public static void main(String[] args) {
      ForCapsul capsul = new ForCapsul();
​
// ForCapsul 에 있는 name 에 값을 입력할때는 setter를 사용해야합니다.
      capsul.setName("MinSoo");
       
// ForCapsul 에 있는 name을 출력할때는 getter를 사용해야합니다.
      System.out.println(capsul.getName());
  }
}

댓글