[Java] 객체지향프로그래밍 - 캡슐화, 상속, 접근제한자
by 우와한개발자객체지향프로그래밍의 주요 특징으로는 추상화, 캡슐화, 상속, 다형성이 있다.
[ 캡슐화 Encapsulation ]

1. 캡슐화 / 은닉 이란?
- 데이터와 해당 데이터를 다루는 메서드(함수)들을 하나의 단위로 묶는것
- 내부 데이터를 외부로부터 숨기고, 외부에서는 정의된 특정 메서드를 통해서만 접근할 수 있도록 함. (데이터 보호 및 외부에서의 접근 제어)
- 안정성과 유지보수성을 높이는데 도움이 됨
- 일반적으로 클래스의 멤버변수를 private으로 선언하여 외부에서의 직접적인 접근을 제한하고 public으로 선언된 메서드를 통해 데이터를 조작하는 방식으로 구현
2. getter와 setter
- 접근자 (accessor) : 멤버 변수의 값을 참조하는 메서드
- setter : 변수의 값을 변경시키는 메서드 setXxx() 형태, 주로 public void
- getter : 변수의 값을 가져오는 메서드 getXxx() 형태
- setter, getter는 lombok 라이브러리 사용해서 코드
[ 상속 Inheritance ]
1. 상속이란
- 기존 클래스를 확장하여 새로운 클래스를 이끌어내는것
- 상속관계 : “is a 관계”를 만족하는 관계 (Sub Class is a Super Class)
- 자바에서의 상속은 단일 상속만 지원
- Object(.toString(), hashCode(), equals())는 최상위 클래스
- extends 키워드를 이용하여 상속을 표현
- 부모의 멤버(변수, 메서드)를 자식 클래스에서 사용
- 생성자는 상속이 안됨
- final클래스는 상속불가
- abstract 클래스는 반드시 상속해서 사용
- 실선의 닫힌 화살표로 표현. (자식 ⇾ 부모)
- 일반화된 클래스는 부모클래스, 구체화된 클래스는 자식 클래스
2. 메서드 재정의 Overriding
- 부모클래스로부터 상속받은 기능을 자식클래스에서 다시 정의해서 사용하는 것
- 오버로딩 규칙
- 상속관계
- 선언부가 같아야 함 : 리턴타입, 메서드 이름, 파라미터
- 접근제한자는 같거나 more public 해야함.
- 부모에서 throws 하지 않은 새로운 예외는 throws 할 수 없음.
- @Override 어노테이션 : 메서드를 재정의 할때 사용되며, 컴파일러에게 이 메서드가 부모 클래스의 메서드를 재정의하는 것임을 알려줌.
⚠️ 부모클래스와 자식클래스 크기?
- 부모 클래스가 자식의 클래스가 더 크다. (ex 동물 ⊃ 호랑이)
- 자식 클래스가 부모클래스보다 필드가 더 많아서 크게 느껴질 수 있으나 크다기 보다는 구체적이라고 생각해야한다.
3. this와 super
1) this : 현재 객체(자기 자신)
- this. : 동일 클래스 내의 변수 또는 메서드 참조 가능
- this() : 자신의 생성자 호출
2) super : 현재 객체의 부모 객체
- super. : 자식클래스에서 부모클래스의 변수 또는 메서드 참조 가능
- super() : 부모클래스의 생성자 호출 (super()를 사용하지 않는 생성자는 자동으로 Object의 생성자인 super()를 호출함)
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name=name; // super() 생략됨 → Object의 생성자 호출
this.age = age;
};
}
public class Student extends Person {
private String major;
public Student(String name,int age, String major) {
super(name,age);
this.major = major;
}
}
⚠️this()와 super()는 같이 사용할 수 있을까?
- 같이 사용할 수 없음
- this()와 super()는 모두 생성자 코드블록의 첫 번째 줄에 위치해야하기 때문.
[ 접근제한자 ]
1. Access Level 제한자 (접근제한자)
- public: 같은 패키지(package)가 아니어도 어느 클래스에서나 참조가능
- protected: 같은 패키지 내의 모든 클래스, 상속 관계가 있는 하위 클래스에서 참조가능
- package friendly: 같은 패키지 내의 클래스에서만 참조가능
- private: 같은 클래스 내에서만 참조가능
2. 클래스다이어그램(UML)에서 접근제한자 기호
| 접근제한자 | 표시 기호 | 같은 클래스 | 같은 패키지 | 다른 패키지 (상속 관계) |
다른 패키지 (비상속) |
| public | + | O | O | O | O |
| protected | # | O | O | O | X |
| (default)(package-private) | ~ 또는 공백 | O | O | X | X |
| private | - | O | X | X | X |
접근이 제한될때 나타나는 에러 : not visible
선언된 변수가 없는 경우 나타나는 에러 : undefined
'언어 > Java' 카테고리의 다른 글
| [Java] 객체지향 프로그래밍 - static 구문, 초기화블록, 싱글톤 디자인 패턴 (0) | 2026.02.27 |
|---|---|
| [Java] 객체지향프로그래밍 - 다형성 (0) | 2026.02.27 |
| [Java] 패키지(package) - import 구문 (0) | 2026.02.26 |
| [Java] 제네릭(Generic) 문법과 타입 추론(var 변수) 개념 정리 (0) | 2026.02.26 |
| [Java] 오버로딩(Overroading)과 가변인자(... 문법) (0) | 2026.02.26 |
블로그의 정보
우와한개발자 님의 블로그
우와한개발자