#객체 지향 프로그래밍

OOP : Object Oriented programming

#정의

객체 지향 프로그래밍(이하 OOP)는 컴퓨터 프로그램을 “객체(Object)“들의 모임으로 파악하고자 하는 프로그래밍의 패러다임 중에 하나이다. 각 “객체(Object)” 들은 서로 메시지를 주고 받을 수 있으며 데이터를 처리할 수 있다

#장점

  • 프로그램을 유연하고 변경이 용이하게 만든다.
  • 프로그램의 개발과 보수를 간편하게 만든다.
  • 직관적인 코드 분석을 가능하게 한다.

#특성

객체 지향 프로그래밍의 중요한 특성은 강한 응집력(Strong Cohesion)과 약한 결합력(Weak Coupling)을 지향한다는 점이다.

응집력(cohesion) : 프로그램의 한 요소가 해당 기능을 수행하기 위해 얼마만큼의 연관된 책임과 아이디어가 뭉쳐있는지를 나타내는 정도. 프로그램의 한 요소가 특정 목적을 위해 밀접하게 연관된 기능들이 모여서 구현되어 있고, 지나치게 많은 일을 하지 않으면 그것을 응집력이 높다고 표현한다.

결합력(coupling) : 프로그램 코드의 한 요소가 다른 것과 얼마나 강력하게 연결되어 있는지, 얼마나 의존적인지를 나타내는 정도. 결합력이 낮다는 것은 한 요소가 다른 요소들과 관계를 크게 맺고 있지 않은 상태를 의미한다.

#OOP의 기본 구성 요소

  • 클래스(Class) 같은 종류의 집단에 속하는 속성과 행위를 정의한 것. 다른 클래스와 독립적으로 디자인해야 한다. 위의 예제에서 몬스터(Monster) 의 특성과 행위들을 정의한 객체가 클래스가 될 것이다.
  • 객체(Object) 클래스의 인스턴스(Instance). 상위 클래스의 속성을 가지고 있으면서 개별적인 특성과 행위(메소드 : Method) 또한 가지고 있다. 위의 예제에서는 드래곤, 좀비, 해골 등이 각각의 객체가 된다.
  • 메서드(Method) 클래스로부터 생성된 객체를 사용하는 방법. 객체의 속성을 조작하는 데 사용된다. 위의 예제에서 각각의 몬스터들이 레벨업을 하는 행위가 메서드(method)라고 볼 수 있다.

#OOP의 특성

#캡슐화(Encapsulation)

캡슐화는 객체의 데이터를 외부에서 직접 접근하지 못하게 막고, 함수를 통해서만 조작이 가능하게 하는 작업이다.

외부에 노출할 필요가 없는 정보를 은닉을 할 수 있는 장점(정보은닉)

#추상화(Abstraction)

추상화는 객체들이 가진 공통의 특성들을 파악하고 불필요한 특성들을 제거하는 과정을 말한다. 객체들이 가진 동작들을 기준으로 이용자들이 동작만 쉽게 구동할 수 있도록 한다.

#상속

유지 보수, 개발단계에서의 편의성을 위해 상속을 통해 중복문제를 해결 한다.

부모 클래스의 속성들을 자동으로 물려받기 때문에 자식클래스에서 또 정의 할 필요가 없게 된다.

#다형성

형태가 같은데 다른 기능을 하는 것을 의미한다.

부모 클래스로부터 상속 받은 속성에 대해, 자식 클래스에서 물려받은 속성을 재정의(오버라이딩)하여 같은 형태이지만 다른 기능을 할 수 있게 한다.