스터디/CS

[CS] 객체 지향 프로그래밍 특징

kwang2134 2025. 3. 26. 23:02
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