객체지향 프로그래밍(Object-Oriented Programming)은 현실 세계의 사물과 행동을 **객체(Object)**라는 단위로 모델링하여 프로그램을 만드는 소프트웨어 패러다임입니다.
1. 객체지향 기초 용어 사전 (Glossary)
- Class (클래스): 객체를 만들어내기 위한 설계도(Blueprint) 또는 붕어빵 틀입니다.
- Object / Instance (객체/인스턴스): 클래스 설계도를 바탕으로 메모리의 Heap 영역에
new키워드로 생성된 실체입니다. - Encapsulation (캡슐화): 데이터(필드)와 기능(메소드)을 하나로 묶고, 외부에서 함부로 접근하지 못하도록 보호하는 정보 은닉(Data Hiding) 기술입니다.
- Constructor (생성자): 객체가 생성되는 순간 단 한 번 호출되어 필드 변수들을 초기화하는 특별한 메소드입니다.
- Access Modifier (접근 제어자): 클래스, 필드, 메소드의 접근 허용 범위를 통제하는 키워드입니다. (
private,default,protected,public)
2. 접근 제어자(Access Modifier) 허용 범위 비교
| 접근 제어자 | 같은 클래스 | 같은 패키지 | 자식 클래스 (다른 패키지) | 전체 공개 |
|---|---|---|---|---|
private |
⭕ | ❌ | ❌ | ❌ |
(default) |
⭕ | ⭕ | ❌ | ❌ |
protected |
⭕ | ⭕ | ⭕ | ❌ |
public |
⭕ | ⭕ | ⭕ | ⭕ |
3. 캡슐화가 적용된 자바 클래스 설계 예제
public class Student {
// 1. private 필드 정보 은닉
private String name;
private int studentId;
private int score;
// 2. 생성자 (Constructor)
public Student(String name, int studentId, int score) {
this.name = name;
this.studentId = studentId;
setScore(score); // 검증 로직이 포함된 Setter 호출
}
// 3. Getter / Setter 메소드
public String getName() { return name; }
public int getScore() { return score; }
public void setScore(int score) {
if (score < 0 || score > 100) {
System.out.println("잘못된 점수 범위입니다. 0점으로 설정합니다.");
this.score = 0;
} else {
this.score = score;
}
}
public void printInfo() {
System.out.println("학번: " + studentId + " | 이름: " + name + " | 성적: " + score + "점");
}
}
4. 자주 묻는 질문 (Q&A)
Q. this 키워드는 언제 사용하나요?
A. 메소드나 생성자의 매개변수 이름과 클래스의 필드(멤버 변수) 이름이 동일할 때, 자기 자신 객체의 인스턴스 필드임을 명확히 구별 지어 지정하기 위해 사용합니다. (this.name = name;)