티스토리 뷰

객체 지향 프로그래밍이란?

구글에 "객체 지향 프로그래밍"을 검색하면 다음과 같이 나온다.

유연하고, 변경이 쉽다?

=> 레고 블럭을 조립하듯이, 키보드, 마우스를 갈아 끼우듯이, 컴퓨터 부품을 갈아 끼우듯이, 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법.

 

객체 지향의 특징

  • 추상화(Abstarction)
    불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 모델화하는 것.
    객체(클래스)를 정의하는 것을 추상화라고 할 수 있다.
  • 캡슐화(Encapsulation)
    추상화를 통해 객체를 정의했다면, 객체에 필요한 데이터나 관련 메소드를 그룹화하는것이다.
    실제로 구현되는 부분을 외부에 드러나지 않도록 하여 정보를 은닉할 수 있다.
    코드가 묶여있어서 오류가 없어 편리하다.
    캡슐화 된 객체들은 재사용이 용이하다.
  • 상속(Inheritance)
    상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것.
    상속 받은 클래스는 부모 클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의하지 않고서도 즉시 자신의 속성으로 사용할 수 있다.
  • 다형성⭐(Polymorphism)
    하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미
    다형성을 활용하면 기능을 확장하거나, 객체를 변경해야할 때 타입 변경 없이 객체 주입만으로 수정이 일어나게 할 수 있다.

    메시지에 의해 개체(클래스)가 연산을 수행하게 될 때, 하나의 메시지에 대해 각 객체(클래스)가 가지고 있는 고유한 방법(특성)으로 응답할 수 있는 능력.
    객체(클래스)들은 동일한 메소드명을 사용하며 같은 의미의 응답을 한다.
    다형성의 대표적인 예 : Overloading, Overriding
    - Overloading : 같은 이름의 함수를 매개변수를 다르게 정의하여 사용하는 것.  '리턴 값만' 다른 것은 오버로딩을 할 수 없다
    - Overriding : 부모클래스의 메소드와 메소드명, 매개변수가 같지만 내부 소스를 재정의하는 것.

 

다형성의 실세계 비유

  • 운전자와 - 자동차
    운전자의 역할과 자동차의 역할을 구분한다.
    자동차의 역할은 여러가지로 구현할 수 있다. ex) K3, 아반떼, 테슬라 등등
    자동차가 바뀌어도 운전자에 영향을 끼치지는 않는다. 운전자는 자동차의 역할에 의존하지 자동차의 모델에 의존하지 않기 때문이다.
    자동차의 역할만 수행한다면 자동차는 얼마든지 바뀌거나 새롭게 추가되도 상관이 없다. 즉 자동차의 세계는 얼마든지 확장할 수 있다는 의미이다.
    => 운전자(클라이언트)에 영향을 주지않고 새로운 기능을 제공할 수 있다!  => 다형성의 본질
  • 키보드, 마우스, 세상의 표준 인터페이스들을 교체하는 것.
  • 정렬 알고리즘 - 정렬 기능만 수행하면 어떤 정렬 알고리즘을 선택해도 상관없는것.
  • 등등

 

핵심은 역할과 구현을 분리한다는 것이다!

  • 자바 언어의 다형성을 활용
    • 역할 = 인터페이스
    • 구현 = 인터페이스를 구현한 클래스, 구현 객체
  • 객체를 설계할 때, 역할구현을 명확히 분리
  • 객체 설계시 역할(인터페이스)을 먼저 부여하고, 그 역할을 수행하는 구현 객체 만들기

 

정리

  • 실세계의 역할과 구현이라는 편리한 컨셉을 다형성을 통해 객체 세상으로 가져올 수 있음
  • 유연하고, 변경이 용이
  • 확장 가능한 설계
  • 클라이언트에 영향을 주지 않는 변경 가능
  • 역할(인터페이스) 자체가 바뀌면, 클라이언트, 서버 모두에 큰 변경이 발생한다.
    즉, 인터페이스를 안정적으로 잘 설계하는 것이 중요하다.

 


 

Spring과 객체지향

  • Spring은 다형성을 극대화해서 이용할 수 있게 도와준다.
  • Spring에서 이야기하는 제어의 역전(IoC), 의존관계 주입(DI)은 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 지원한다.
  • Spring을 사용하면 마치 레고 블럭을 조립하듯이 구현을 편리하게 변경할 수 있다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함