뚜껑뚜
Magnolia
뚜껑뚜
전체 방문자
오늘
어제
  • 분류 전체보기 (37)
    • 웹 개발 (7)
      • Java (5)
      • Spring (0)
      • JPA (0)
      • JavaScript (1)
      • jQuery (1)
      • Mustache (0)
      • MyBatis (0)
    • DB (0)
    • CS (1)
      • HTTP (0)
      • etc (1)
    • 오류 로그 (20)
    • ETC (8)
    • 백엔드 로드맵 (0)
    • 개인 프로젝트 (1)
      • XYAB (1)
    • Diary (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기
  • 관리

공지사항

인기 글

태그

  • 자바스크립트
  • MVC
  • jquery
  • 스레드
  • JPA
  • 헤더
  • 어댑터
  • post
  • Servlet
  • 인텔리제이
  • 컨트롤러
  • URI
  • Thymeleaf
  • 타임리프
  • View
  • 로그인
  • HTTP
  • 프로젝트
  • 서블릿
  • get

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
뚜껑뚜

Magnolia

웹 개발/Java

접근제어자와 캡슐화

2025. 12. 5. 16:25

접근 제어자

여태까지 회사에서는 객체의 멤버변수에 접근할 때 무조건 getter, setter를 사용해서 접근했다. 왜 그런지는 생각 안 하고 그냥 다 그렇게 쓰니까 그렇게 썼음. 근데 강의를 보는데 user.name 이런 식으로 닷을 써서 접근하는 거다. 나는 저런 식으로 안 썼던 것 같은데... 하고 생각만 하던 찰나에 접근제어자 강의를 들으니까 이해가 됐다.

회사에서 내가 무조건 getter, setter를 써야만 했던 이유는 멤버변수의 접근제어자를 모두 private으로 설정했기 때문이었다. 

멤버변수를 private으로 지정하면 다른 클래스에서 멤버변수에 직접 접근할 수 없다. 같은 클래스 내부에서만 직접 접근이 가능하며, 다른 클래스에서 직접 접근 시 컴파일 오류가 발생함. 그래서 외부에서 값을 읽거나 수정하려면 public getter/setter를 제공해야 한다.

이렇게 사용하는 이유는 객체의 캡슐화를 위해서이다. 멤버변수를 보호하고, 잘못된 값이 들어가는 것을 방지하기 위해서.(ex. setter에서 유효성 검사 가능)

진짜 암 생각없이 살았구먼~

접근제어자의 핵심은 속성과 기능을 외부로부터 숨기는 것이다.

  • private은 나의 클래스 안으로 속성과 기능을 숨길 때 사용, 외부 클래스에서 해당 기능을 호출할 수 없다.
  • default는 나의 패키지 안으로 속성과 기능을 숨길 때 사용, 외부 패키지에서 해당 기능을 호출할 수 없다.
  • protected는 상속 관계로 속성과 기능을 숨길 때 사용, 상속 관계가 아닌 곳에서 해당 기능을 호출할 수 없다.
  • public은 기능을 숨기지 않고 어디서든 호출할 수 있게 공개한다. 

 

캡슐화

캡슐화(Encapsulation)는 객체지향 프로그래밍의 중요한 개념이다. 캡슐화는 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어서 외부에서의 접근을 제한하는 것을 말한다. 캡슐화를 통해 데이터의 직접적인 변경을 방지하거나 제한할 수 있다. 캡슐화를 안전하게 완성할 수 있게 해주는 장치가 바로 접근 제어자이다.

1. 데이터를 숨겨라
캡슐화에서 가장 필수로 숨겨야 하는 것은 속성(데이터)이다. 객체 내부의 데이터를 외부에서 함부로 접근하게 두면 클래스 안에서 데이터를 다루는 모든 로직을 무시하고 데이터를 변경할 수 있다. 따라서 캡슐화가 깨진다. 객체의 데이터는 객체가 제공하는 기능인 메서드를 통해서 접근해야 한다.

2. 기능을 숨겨라
객체의 기능 중 내부에서만 사용하는 기능들은 감추는 것이 좋다. 객체를 사용하는 외부 입장에서 필요한 기능만 외부에 노출하고, 나머지 기능은 내부로 숨기자.

 

저작자표시 (새창열림)

'웹 개발 > Java' 카테고리의 다른 글

List와 객체지향  (0) 2025.12.09
자바 다이아몬드 연산자(<>): 타입 명시와 타입 추론  (0) 2025.12.09
생성자  (0) 2025.12.04
Call by Value  (0) 2025.11.25
    '웹 개발/Java' 카테고리의 다른 글
    • List와 객체지향
    • 자바 다이아몬드 연산자(<>): 타입 명시와 타입 추론
    • 생성자
    • Call by Value
    뚜껑뚜
    뚜껑뚜

    티스토리툴바