정보처리기사/소프트웨어 설계

객체지향(OOP) 핵심 원칙

glorypang 2025. 10. 6. 10:20
728x90
반응형
SMALL

1) 캡슐화 (Encapsulation)

  • 정의: 데이터(속성)와 그 데이터를 다루는 메서드를 하나의 객체로 묶고, 외부에는 필요한 인터페이스만 노출.
  • 목적: 변경 영향 최소화, 일관성 유지, 객체 스스로 유효성 보장.
  • 핵심: “직접 필드 건드리지 말고 메서드로 다뤄라” (setter/getter도 무조건이 아니라 ‘불변+의미있는 동작’ 우선).

2) 정보 은닉 (Information Hiding)

  • 정의: 외부에 알 필요 없는 내부 구현을 숨기고, 계약(인터페이스)만 공개.
  • 목적: 구현 교체 용이, 결합도 감소, 보안·안정성 향상.
  • 수단: 접근 제어자(예: public/protected/private), 모듈 경계, 인터페이스/추상화.

캡슐화는 “묶기”, 정보 은닉은 “감추기”. 보통 함께 작동합니다.

3) 상속 (Inheritance)

  • 정의: 상위 타입의 속성과 동작을 하위 타입이 재사용/확장.
  • 장점: 재사용, 다형성 기반 마련.
  • 주의: 과도한 상속은 결합도↑, 유연성↓ → 합성(Composition) 우선 검토.
  • private 관련 핵심:
    • private 멤버는 하위 클래스에서 직접 접근 불가 (보이지 않음).
    • “상속을 받아도 못 씀” = 멤버가 상속 구조에 존재하지만 가시성은 없음.
    • 필요한 경우 protected(하위클래스 공개)나 접근 메서드로 노출.

4) 다형성 (Polymorphism)

  • 정의: 같은 메시지(메서드 호출)에 대해 실행 시점 또는 선언 시점다른 행동을 수행.
  • 오버라이딩(Overriding): 런타임 다형성 — 상위의 메서드를 하위가 같은 시그니처로 재정의. (가상/동적 디스패치)
# 부모
a(){
	hello!
}

# 자식
a(){
	hi!  // 자식에서 재정의
}
  • 오버로딩(Overloading): 컴파일타임 다형성 — 이름 같지만 파라미터가 다른 메서드를 여러 개 제공.
a( ) - 인자 없는 함수
a(a) - 인자 1개인 함수
a(a, b) - 인자 2개인 함수
  • 핵심 규칙(대표적으로 Java)
    • 오버라이딩: 시그니처 동일, 반환 타입 공변 허용, 접근 수준은 완화만 가능, @Override로 안전성 확보.
    • 오버로딩: 파라미터 목록이 달라야 하며, 반환 타입만 다르면 다른 메서드로 인정되지 않음.

5) 추상화 (Abstraction)

  • 정의: 복잡한 현실에서 핵심 개념/속성/행동만 모델링하여 단순화.
  • 수단: 추상 클래스/인터페이스, 도메인 모델, 유스케이스 기반 역할 정의.
  • 효과: 구현 변경에 둔감, 테스트 용이, 의존성 역전 구조에 유리.
728x90
반응형
LIST