
자바(Java)를 단순히 '문법이 엄격한 언어'로만 이해한다면 자바의 진면목을 절반도 보지 못한 것입니다. 자바의 정체성은 바로 객체지향 프로그래밍(Object-Oriented Programming, OOP)에 있습니다. 복잡한 현실 세계를 소프트웨어 안으로 옮겨와 관리하기 쉽고 재사용이 용이한 구조를 만드는 것, 그것이 OOP의 본질입니다. 오늘은 자바를 지탱하는 4대 기둥인 캡슐화, 상속, 다형성, 추상화를 심도 있게 파헤쳐 보겠습니다.
1. 캡슐화 (Encapsulation): 정보 은닉과 보호
캡슐화는 데이터(필드)와 그 데이터를 처리하는 함수(메서드)를 하나로 묶고, 실제 구현 내용의 일부를 외부에 감추는 것을 의미합니다. 이는 약 캡슐이 내부의 약가루를 보호하듯, 객체의 내부 상태가 외부의 잘못된 접근으로 인해 오염되는 것을 방지합니다.
- 접근 제어자 활용:
private으로 데이터를 숨기고,public메서드(Getter/Setter)를 통해 검증된 데이터만 통로를 열어줍니다. - 장점: 객체의 내부 구현이 바뀌어도 이를 사용하는 외부 코드는 수정할 필요가 없어 결합도(Coupling)가 낮아집니다.
2. 상속 (Inheritance): 재사용과 계층 구조
상속은 기존 클래스(부모 클래스)의 특성을 자식 클래스가 그대로 물려받아 기능을 확장하거나 재정의하는 것을 말합니다. 자바에서는 extends 키워드를 통해 이를 구현합니다.
- IS-A 관계: "고양이는 동물이다"와 같이 논리적인 포함 관계가 성립할 때 사용합니다.
- 장점: 공통된 코드를 부모 클래스에서 관리하므로 중복 코드를 획기적으로 줄이고 유지보수 효율을 높입니다.
3. 다형성 (Polymorphism): 하나의 인터페이스, 다양한 모습
OOP의 꽃이라 불리는 다형성은 하나의 객체가 여러 가지 타입을 가질 수 있는 능력을 말합니다. 자바에서는 상속과 인터페이스를 통해 부모 타입의 참조 변수로 자식 타입의 객체를 다루는 방식으로 나타납니다.
- 오버라이딩(Overriding): 부모의 메서드를 자식의 상황에 맞게 재정의하여, 동일한 메서드 호출에도 각 객체가 다르게 반응하게 합니다.
- 장점: 코드의 유연성이 극대화되어, 새로운 기능(자식 클래스)이 추가되어도 기존 시스템의 구조를 바꿀 필요가 없습니다.
4. 추상화 (Abstraction): 핵심만 남기는 모델링
추상화는 복잡한 시스템으로부터 핵심적인 개념이나 기능만을 추출하여 모델링하는 과정입니다. 자바에서는 abstract class와 interface를 통해 구현됩니다.
- 구현보다 설계: "자동차라면 가속하고 멈춰야 한다"라는 기능적 명세(추상)를 정의하고, 구체적인 구동 방식(가솔린, 전기)은 하위 클래스에 맡깁니다.
- 장점: 복잡성을 관리하고 사용자에게 필요한 기능만 노출함으로써 시스템을 이해하기 쉽게 만듭니다.
5. OOP 4대 요소 한눈에 비교하기
각 요소가 추구하는 목적과 핵심 키워드를 표로 정리했습니다.
| 요소 (Element) | 주요 목적 (Purpose) | 핵심 키워드 (Keywords) | 실질적 이점 (Benefit) |
|---|---|---|---|
| 캡슐화 | 정보 은닉 및 무결성 유지 | private, Getter/Setter | 보안성 및 독립성 향상 |
| 상속 | 코드 재사용성 극대화 | extends, super | 개발 시간 단축 및 중복 제거 |
| 다형성 | 유연한 객체 교체 및 확장 | Overriding, Interface | 유지보수 용이 및 코드 간결화 |
| 추상화 | 복잡성 제거 및 표준화 | abstract, interface | 설계와 구현의 분리 |
6. 마무리하며: 왜 우리는 OOP를 지향하는가?
현대 소프트웨어는 규모가 방대하고 요구사항이 끊임없이 변합니다. 캡슐화로 데이터를 지키고, 상속으로 기반을 닦으며, 다형성으로 변화에 대응하고, 추상화로 구조를 잡는 이 4대 요소는 자바 개발자가 가져야 할 가장 강력한 설계 도구입니다. 이 원칙들을 코드에 녹여낼 때 비로소 '살아있는 소프트웨어'를 만들 수 있습니다.
참고 문헌 및 출처
- Oracle Java Documentation: Object-Oriented Programming Concepts
- Robert C. Martin: Clean Architecture: A Craftsman's Guide to Software Structure and Design.
- Kathy Sierra & Bert Bates: Head First Java. O'Reilly Media.
'Language > Java' 카테고리의 다른 글
| [JAVA] Java의 static 키워드 완벽 가이드 : 메모리 구조부터 활용법까지 (0) | 2026.01.14 |
|---|---|
| [JAVA] Java의 클래스와 객체(인스턴스) 차이 : OOP의 핵심 개념 완벽 이해 (0) | 2026.01.14 |
| [JAVA] Java의 명명 규칙(Naming Convention) 완벽 정리 : 협업의 시작 (0) | 2026.01.14 |
| [JAVA] Java의 main 메서드가 public static void인 이유는? JVM의 동작 원리 (0) | 2026.01.14 |
| [JAVA] 오토박싱(Auto-boxing)과 언박싱(Unboxing)의 모든 것 : 효율적인 코드 작성법 (0) | 2026.01.14 |