객체 지향 프로그래밍

김민혁·2022년 1월 13일
0

객체 지향 프로그래밍(Object-Oriented Programming, OOP)

  • 컴퓨터 프로그래밍의 패러다임 중 하나
    • 프로그래밍: 하나 이상의 관련된 추상 알고리즘을 특정한 프로그래밍 언어를 이용해 구체적인 컴퓨터 프로그램으로 구현하는 기술을 말한다.
    • 패러다임: 어떤 한 시대 사람들의 견해나 사고를 근본적으로 규정하고 있는 테두리로서의 인식의 체계, 또는 사물에 대한 이론적인 틀이나 체계를 의미하는 개념이다.
  • 컴퓨터 프로그램을 여러개의 독립된 단우, 즉 '객체'들의 모임으로 파악하고자 하는 것
  • 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.
  • 프로그램을 유연하고 변경이 쉽게 만든다.
    • 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점이 있다.
  • 대규모 소프트웨어 개발에 많이 사용된다.

기본 구성 요소

  • 클래스(class)
    • 사용자 정의 자료형
    • 같은 종류(또는 문제 해결을 위한)의 집단에 속하는 속성(attribute)과 행위(behavior)를 정의한 것
    • OOP의 기본적인 사용자 정의 데이터형(user defined data type)
    • 클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인하여야 한다.
  • 객체(Object)
    • 기능을 가진 데이터
    • 클래스의 인스턴스(실제로 메모리상에 할당된 것)
    • 자신의 고유의 속성(attribute)을 가지며 클래스에서 정의한 행위(behavior)를 수행할 수 있다.
    • 객체의 행위는 클래스에 정의된 행위에 대한 정의를 공유함으로써 메모리를 경제적으로 사용한다.
  • 메서드(Method)
    • 한 객체의 서브루틴(subroutine) 형태로 객체의 속성을 조작하는 데 사용된다.
  • 메시지(Message)
    • 객체간의 통신은 메시지를 통해 이루어진다.

특징

OOP는 자료 추상화를 기초로 하여 상속, 다형 개념, 동적 바인딩이 시스템의 복잡성을 제어하기 위해 서로 맞물려 기능하는 것이다.

  • 자료 추상화(abstraction)
    • 불필요한 정보는 숨기고 중요한 정보만을 포현함으로써 프로그램을 간단히 만드는 것이다.
    • 자료 추상화를 통해 정의된 자료형을 추상 자료형이라고 한다.
    • 추상 자료형: 자료형의 자료 표현과 자료형의 연산을 캡슐화한 것으로 접근 제어를 통해서 자료형의 정보를 은닉할 수 있다.
    • 캡슐화(encapsulation)
      • 객체의 속성(data fields)과 행위(메서드, methods)를 하나로 묶고, 실제 구현 내용 일부를 외부에 감추어 은닉한다.
    • OOP에서 일반적으로 추상 자료형을 클래스, 추상 자료형의 인스턴스를 객체, 추상 자료형에서 정의된 연산을 메서드(함수), 메서드의 호출을 생성자라고 한다.
  • 상속(Inheritance)
    • 새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 기능이다.
    • 상속을 받는 새로운 클래스를 '부클래스'|| '파생 클래스' || '하위 클래스' || '자식 클래스' 라고 한다.
    • 새로운 클래스가 상속하는 기존의 클래스를 '기반 클래스' || '상위 클래스' || '부모 클래스'라고 한다.
    • 기존의 클래스를 상속받은 하위 클래스를 이용해 프로그램의 요구에 맞추어 클래스를 수정할 수 있다.
    • 클래스 간의 종속 관계를 형성함으로써 객체를 조직화할 수 있다.
  • is-a 상속(상속, inheritance)
    • 추상화들 사이의 포함 관계를 의미하며, 한 클래스 A가 다른 클래스 B의 서브 클래스(파생 클래스)임을 이야기한다.
    • 상위 클래스의 기능을 하위 클래스가 물려받아 사용할 수 있다.
    • 밀접한 결합
  • has-a 상속(구성, composition)
    • 구성 관계를 의미하며 한 오브젝트가 다른 오브젝트에 속하는 것을 말한다.
    • 더 많은 유연성을 제공한다.(명세에 변경이 발생하더라도 구성요소를 쉽게 변경할 수 있다.)
    • 느슨한 결합
  • 다중 상속(Multiple inheritance)
    • 클래스가 2개 이상의 클래스로부터 상속받을 수 있게 하는 기능이다.
    • 클래스의 상속 관계에 혼란을 줄 수 있다.(ex. 다이아몬드 상속)
    • Java는 지원하지 않는다.
  • 다형성 개념(polyomrphism)
    • 어떤 한 요소에 여러 개념을 넣어 놓는 것이다.
    • 일반적으로 오버라이딩이나 오버로딩을 의미한다.
      • 오버라이딩: 같은 이름의 메서드가 여러 클래스에서 다른 기능을 하는 것
      • 오버로딩: 같은 이름의 메서드가 인자의 개수나 자료형에 따라서 다른 기능을 하는 것
    • 다형성 개념을 통해서 프로그램 안의 객체 간의 관계를 조직적으로 나타낼 수 있다.
  • 동적 바인딩
    • 실행 시간 중에 일어나거나 실행 과정에서 변경될 수 있는 바인딩으로 컴파일 시간에 완료되어 변화하지 않는 정적 바인딩과 대비되는 개념이다.
      • 바인딩: 프로그램의 어떤 기본 단위가 가질 수 있는 구성요소의 구체적인 값, 성격을 확정하는 것을 말한다.
    • 프로그램의 한 개체나 기호를 실행 과정에 여러 속성이나 연산에 바인딩함으로써 다형 개념을 실현한다.
    • 즉 동적바인딩은 런타임 시점에 해당 메서드를 구현하고 있는 실제 객체 타입을 기준으로 찾아가서 실행될 함수를 호출한다.

장점

  • 강한 응집력(Strong Cohesion)
    • 하나의 문제 해결ㅇ르 위한 데이터를 클래스에 모아 놓은 데이터형을 사용함으로써 응집력을 강화한다.
  • 약한 결합력(Weak Coupling)
    • 클래스간의 독립적인 디자인을 함으로써 결합력윽 약화한다.
profile
학생

0개의 댓글