문홍의 공부장

객체지향 프로그래밍 (Object Oriented Programming, OOP) 이란 ? 본문

개발/기타 개념

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

moonong 2020. 1. 29. 18:46
반응형

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

컴퓨터 프로그램을 객체(Object) 들의 모임으로 파악하고자 하는 프로그래밍 패러다임 중 하나. 프로그래밍에서 필요한 데이터를 추상화시켜 객체를 만들고, 그 객체들 간의 유기적인 상호작용(메세지를 주고 받으며, 데이터를 처리)을 통해 로직을 구성하는 프로그래밍 방법이다.

객체지향 프로그래밍의 장단점

장점

  • 코드의 재사용성
    남이 만든 클래스를 가져와 사용할 수 있고, 상속을 통해 확장하여 사용할 수 있다
  • 유지보수 용이
    절차지향 프로그래밍에서는 코드 수정을 위해 일일히 찾아 수정해야하는 반면, 객체지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부의 멤버 변수/메서드로 있기 때문에, 해당 부분만 수정하면 된다.
  • 대형 프로젝트에 적합
    클래스 단위로 모듈화시켜 개발할 수 있으므로 업무 분담이 용이하고 대형 프로젝트 개발에 활용이 가능하다

단점

  • 처리 속도가 상대적으로 느림
  • 객체가 많으면 용량이 커질 수 있음
  • 설계 단계에서 많은 시간과 노력이 필요

객체지향 프로그래밍 핵심 개념 5가지

1. 클래스, 인스턴스 (객체)

  • 클래스: 객체들이 공통적으로 갖는 속성(attribute)과 행위(behavior)를 모아 변수(field)와 메소드(method)로 정의(추상화)한 것
  • 인스턴스(객체): 클래스에서 정의한 것을 토대로 실제 메모리 상에 할당된 것. 실제 프로그램에서 사용되는 데이터

예를 들어, 사람은 '사람'이라면 갖는 공통점과 차이점이 있다. 김영희, 이철수, Helen, John,.. 이 사람 한 명 한 명을 객체라고 할 수 있으며, 이들(객체)의 공통적인 속성과 행위를 모아 '사람'이라는 큰 틀(클래스)로 정의할 수 있다.

2. 추상화 (Abstraction)

목적과 관련이 없는, 불필요한 정보는 숨기고 중요한 정보만을 표현하기 위한 개념.
객체는 실제 그 모습(데이터)이지만, 클래스는 객체들이 어떠한 특징이 있어야 한다고 정의하는 추상화된 개념이다. 즉, 추상화는 객체들의 공통된 속성이나 기능을 파악하여 정의해놓은 설계 기법이라 할 수 있다.

객체지향 관점에서 클래스를 정의하는 방식으로써의 추상화를 말하며, 추상 클래스/메소드(abstract)와는 다른 개념이다.

3. 캡슐화 (Encapsulation)

캡슐화의 목적: 1) 정보은닉 2) 코드의 재사용

캡슐화는 기능과 특성의 모음을 클래스라는 캡슐에 분류해서 넣음과 동시에, 객체의 데이터를 외부에서 직접 접근하지 못하게 막고, 메소드를 통해서만 조작이 가능하도록 하는 작업이다. 이를 통해 분산되어 있는 데이터를 한 곳에 모아 재활용을 원활하게 하고, 캡슐화함으로써 불필요하거나 외부에 노출되어서는 안되는 정보를 감추어 클래스 내부에서만 사용하도록 정의할 수 있다. (접근제어자 public, protected, private)

4. 상속 (Inheritance)

상속의 목적: 코드의 재사용(코드의 이원화 문제, 중복 제거)

상위(부모)클래스의 속성과 기능을 그대로 이어받아 사용할 수 있게 하고, 기능의 일부분을 변경해야 할 경우 상속받은 하위(자식)클래스에서 해당 기능만 다시 수정(재정의)하여 사용할 수 있게 하는 것이다.
클래스의 상속 관계에 혼란을 줄 수 있기 때문에, 다중 상속은 불가하며, 필요에 따라 인터페이스를 사용할 수 있다.

5. 다형성 (Polymorphism)

"형태가 같은데 다른 기능을 하는 것". 즉, 하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 재해석될 수 있는 것을 말한다.

  • 오버로딩(Overloading): 같은 이름의 함수를 여러 개 정의하고, 매개변수의 타입/갯수를 달리하여 매개변수에 따라 다르게 호출할 수 있도록 하는 것
  • 오버라이딩(Overriding): 부모 클래스의 메소드와 같은 이름, 매개변수를 재정의하는 것

getter/setter를 사용하는 이유

멤버변수에 직접 접근하지 못하게 private 접근지정자로 설정하고 getter/setter 메소드를 이용해 이를 불러온다. (정보 은닉)
getter/setter라는 메소드를 통해 접근하기 때문에, 메소드 안에서 매개변수 값이 올바르지 않은 입력에 대해 사전에 처리할 수 있도록 제한/조절할 수 있다.

References:

반응형