728x90
반응형
728x90
객체 지향 프로그래밍(OOP)의 주요 특징 캡슐화, 상속, 다형성, 추상화가 존재
1. 캡슐화 (Encapsulation)
객체의 상태와 행동을 하나로 묶고, 외부에서 객체의 내부 상태를 직접 접근하지 못하도록 제한하는 것을 의미
목적
- 외부에서 객체의 내부 데이터를 수정하지 못하게 하여 데이터 보호 → 무결성 유지
- 캡슐화된 객체는 다른 프로그램에서 재사용 가능 → 재사용성 향상
- 객체의 내부 구현을 숨겨 사용자는 사용 방법만 알고 구현에 대해 신경 쓸 필요 없음 → 복잡성 감소
캡슐화 방법
- 접근 제한자 사용:
- private: 객체 내부에서만 접근 가능
- protected: 객체 내부와 상속받은 자식 클래스에서 접근 가능
- public: 외부에서 접근 가능
- Getter & Setter 사용: 객체의 내부에 직접 접근하지 않고 메서드를 통해 읽고 수정
2. 상속
기존 클래스의 속성과 메서드를 새로운 클래스가 물려받아 사용하는 것을 의미
목적
- 기존 클래스의 코드를 재사용해 새로운 클래스 생성 가능 → 재사용성 향상
- 상속을 통한 클래스 간의 계층 구조 형성 가능 → 프로그램 구조를 명확히 하여 유지보수 용이
- 여러 클래스가 공통된 속성이나 메서드 공유 → 공통 기능 공유
상속 방법
- 클래스 상속: 자식 클래스가 부모 클래스의 모든 속성과 메서드를 상속
- 메서드 오버라이딩: 자식 클래스가 부모 클래스의 메서드를 재정의하여 자신의 동작 구현
- 메서드 오버로딩: 부모 클래스에서 제공하는 메서드와 동일한 이름의 메서드를 자식 클래스에서 다른 매개변수로 정의하여 사용
단점
- 자식 클래스가 부모 클래스에 강하게 의존하게 되어, 부모 클래스의 변경이 자식 클래스에 영향을 미침 → 의존성 증가
- 계층 구조가 복잡해질 경우 코드의 이해와 디버깅이 어려워질 수 있음 → 복잡성 증가
3. 다형성
여러 클래스가 동일한 메서드를 다른 방식으로 구현할 수 있는 능력을 의미
목적
- 동일한 인터페이스를 사용하면서도 객체에 따라 다른 동작을 수행 가능 → 유연성
- 동일한 코드 사용으로 재사용성 증가
- 복잡한 내부 구현을 숨기고 사용자에겐 단순한 인터페이스 제공 → 추상화
종류
- 메서드 오버라이딩(Method Overriding):
- 자식 클래스가 부모 클래스의 메서드를 재정의하여 자신의 특정한 동작을 구현하는 것
- 부모 클래스의 메서드와 동일한 이름과 매개변수를 가짐
- 자식 클래스에서 재정의하여 다른 동작 방식으로 사용
- 메서드 오버로딩(Method Overloading)
- 동일한 이름의 메서드를 여러 개 정의하여 매개변수의 개수나 타입에 따라 다른 동작을 수행하는 것
- 반환 타입과 메서드 이름이 동일할 때 매개변수 시그니처만 변경하여 새로운 기능을 구현
단점
- 다형성을 많이 사용할 수록 코드의 이해와 디버깅이 어려워질 수 있음 → 복잡성 증가
- 잘못된 객체 타입으로 인해 의도치 않은 결과 발생 가능
4. 추상화
복잡한 시스템의 본질적인 특징을 강조하고 불필요한 세부 사항은 숨기는 것을 의미
목적
- 복잡한 시스템의 핵심 기능만 노출하고 세부 구현은 숨겨 이해와 사용이 용이 → 복잡성 감소
- 실제 세계의 시스템을 간단한 모델로 표현하여 주요 특징과 동작을 명확히 정의 가능 → 모델링
- 추상화된 코드는 다양한 상황에서 재사용 가능 → 재사용성 향상
추상화 방법
- 추상 클래스 & 인터페이스 사용: 추상 클래스와 인터페이스를 통해 시스템의 주요 기능을 정의하고 구체적인 구현은 하위 클래스에서 수행
- 객체의 주요 속성과 메서드만 노출: 객체의 내부 구현은 숨기고 외부에 필요한 속성과 메서드만 제공
단점
- 이후 변경이 어려울 수 있어 초기 단계에서 잘 고려되어야 함
- 추상화된 구조가 복잡해질 경우 이해와 디버깅이 어려워질 수 있
728x90
'스터디 > CS' 카테고리의 다른 글
[CS] Java String, StringBuilder, StringBuffer 차이 (0) | 2025.03.28 |
---|---|
[CS] 자바 문자열 할당 방식 (0) | 2025.03.27 |
[CS] Garbage Collection (0) | 2025.03.25 |
[CS] JVM 구조 (0) | 2025.03.14 |
[CS] Java 실행 과정 (0) | 2025.03.12 |