안녕하세요 :) 회사에서 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());
}
}
'개발 > JAVA' 카테고리의 다른 글
오버로딩과 오버라이드 (Overload 와 Override) (0) | 2023.02.14 |
---|---|
클래스, 인스턴스, 생성자 비교 & 정리 (0) | 2023.02.10 |
.java 파일 .class 파일 차이 (2) | 2023.02.09 |
댓글