Java 33. 객체지향 프로그래밍과 객체지향 설계

업데이트:
1 분 소요

객체지향 프로그래밍

1. 객체지향 프로그래밍

1) 추상화

  • 어떤 영역에서 필요로 하는 속성이나 기능을 추출하는 작업
  • 데이터 구조, 표현방법에 대한 추상화
  • 처리 과정에 대한 추상화

2) 캡슐화

  • 데이터를 감사서 외부에서 사용 가능한 부분만을 제공
  • 사용하는 코드가 세부적인 사항을 알 필요가 없음
  • 단순한 접근을 제공하여 오류가 생길 부분을 감소함

3) 상속성

  • 일반적인 개념의 객체에서 보다 구체적인 개념의 객체의 관계를 표현
  • 상속관계의 클레스는 상위 클래스의 타입을 내포함
  • 상위 클래스의 속성과 기능을 하위 클래스에서 사용하거나 재정의 할 수 있음

4) 다형성

  • 같은 메세지, 같은 구현에 대해 각 객체가 다른 표현과 결과를 나타내는 것
  • 클래스의 상속, 인터페이스의 구현 시에 각각의 다른 구현을 가진 클래스들이 상위 타입으로 업캐스팅이 되고
    이 때, 각 클래스에서 오버라이딩한 메서드가 존재하는 경우 같은 상위 타입으로 선언된다 하더라고 각기의 다른 인스턴스의
    메서드가 호출됨
  • C++의 경우 virtual function만이 재정의 된 함수가 호출되지만 자바의 경우는 모든 메서드가 가상함수 기반으로 구현
    되므로 하위 클래스에 재정의 된 메서드가 있는 경우 재정의된 메서드가 호출 됨

2. 객체 지향 설계

  • Design Heuistics
    • Abstract class vs Concrete class
    • Class Inheritance vs Object Compostion
    • Interface Inheritance vs Implementation Inheritance Etc..

3. 응집도와 결합도

  • 잘 만들어진 소프트웨어는 응집도는 높고 결합도는 낮어야 함

1) 응집도

  • 하나의 모듈, 객체 내부의 요소들간의 연관성
  • 하나의 책임을 구현하는 하나의 객체는 높은 응집도를 가짐

2) 결합도

  • 객체 상호관의 연관 관계
  • 결합도가 높으면 하나의 객체를 수정할 때 다른 객체도 수정해야 함

댓글남기기