해당 글은 '자바의 정석 기초편'을 보고 작성되었습니다.

이전 포스팅에서 접근 제어자와 그 외의 제어자에 대해 알아보았다. 해당 포스팅에서는 접근 제어자를 왜 사용해야하는지 자세히 알아볼 것이고, 객체지향의 관점에서 캡슐화 또한 공부해 볼 것이다

🔥 접근 제어자를 사용하는 이유

우리가 프로그래밍을 하면서 접근 제어자를 사용했던 이유는, 클래스에 선언된 데이터를 외부로 부터 보호하기 위해서이다. 반대로 생각해서, 내부 작업을 위해 사용되는 멤버 변수나 부분작업을 처리하기 위한 메서드 등의 멤버들을 클래스 내부에 감추기 위해서도 사용한다.

get()/set() 메서드

  • private으로 선언된 멤버 변수에 대해 접근 및 수정 할 수 있는 메서드를 public으로 제공하는 것
  • get()메서드만 제공될 경우에는 read-only 필드

추가적으로, getter setter는 인텔리제이에서 빠르게 부르려면 alt+insert 단축기로 가능👌🏼 아 참고로 Mac OS의 단축기는 모르겠습니다😉

캡슐화 Encapsulation

위에서 접근 제어자를 사용하는 이유가 캡슐화에 해당된다.
  • 꼭 필요한 정보와 기능만 외부에 오픈하는 것
  • 대부분의 멤버 변수와 메서드를 감추고 외부에 통합된 인터페이스만은 제공해 일관된 기능을 구현하게 하는 것
  • 각각의 메서드나 멤버 변수를 접근함으로써 발생하는 오류를 최소화 할 수 있는 장점도 있다

캡슐화의 예시

public class Time {

    private int hour;
    private int minute;
    private int second;

    public int getHour() {
        return hour;
    }
    public void setHour(int hour) {
        if(hour < 0 || hour > 23) return;
        this.hour = hour;
    }

    public int getMinute() {
        return minute;
    }
    public void setMinute(int minute) {
        if(minute < 0 || minute > 59) return;
        this.minute = minute;
    }

    public int getSecond() {
        return second;
    }
    public void setSecond(int second) {
        if(second < 0 || second > 59) return;
        this.second = second;
    }
}

해당 클래스에서 보이는대로, get()는 멤버 변수의 값을 반환하는 일을 진행,
set()는 매개변수에 지저된 값을 검사해 조건에 맞는 값만 멤버 변수의 값을 변경하도록 작성되었다.

만약 해당 클래스가 상속을 통해 확장되어야 할 클래스라면, 멤버에 접근 제한을 주지만 자손클래스에서 접근하는 것이 가능하도록 protected를 사용해야 한다.


코드를 따라쓰기 바쁠 때에는, getter setter에 대해서 아 그냥 갖고오고 정하는거구나 하고 넘어갔지만, 자바를 공부하는 개발자라면 한번쯤은 '캡슐화'에 대해 짚고 넘어가야 할 것같아 해당 포스팅을 작성하였습니다.
profile
Welcome to my velog! I love learning something new to build up my ability in development field. I don't think it is shame not to know, but it is shame to pretend to know about something you don't know.

0개의 댓글