OOP (Object Oriented Programming)

‍Juhee Kim·2021년 7월 12일
0

OOP (Object Oriented Programming)이란?

OOP는 객체의 관점에서 프로그래밍 하는 것을 의미한다.

쉽게 생각해서 세상에 있는 실체가 있는 모든 물체를 클래스와 인스턴스, 함수, 변수라는 object로 변화시켜서 프로그램을 구성하는 것이다.

OOP의 기본 전제는 기능(함수, 변수) 재사용이 가능하도록 설계 및 프로그래밍 했는지이다.

C언어를 절차 지향 프로그래밍이라 하는데, 절차 지향 프로그래밍은 프로세스가 함수 단위로 순서대로 진행되는 것이다.

반면 OOP는 객체들의 유기적인 관계를 통해서 프로세스가 진행된다.

즉, 애플리케이션을 구성하는 요소들을 객체로 바라보고, 객체들을 유기적으로 연결하여 프로그래밍 하는 것이다.

  • 코드의 가독성을 높여주고, 함수나 변수를 재사용 가능하도록 설계 및 프로그래밍 하는 것
  • 특정 object를 컴퓨터라는 도구에 인식시키는 것
  • 설계(사람이 이해하는 방식)와 구현할 소스코드(컴퓨터가 이해하는 방식) 간의 상호이해가 중요

OOP 특성

OOP의 특성은 추상화, 캡슐화, 상속성, 다형성이 있다.

캡슐화 (Encapsulation)

하나의 객체에 대해 그 객체가 특정한 목적을 위해 필요한 변수나 메소드를 하나로 묶는 것을 의미한다.

캡슐화형태로 코드를 작성하지 않으면 특정 기능(함수, 변수)에 직접 접근하게 되는 상황이 된다.

캡슐화에서 캡슐은 알약이라고 생각하면 된다. 알약을 깨물어 보면 그 내용물은 굉장히 쓰다. 그래서 내용물을 아무 맛도 안 느껴지게 알약으로 포장해서 사람들이 약을 쉽게 복용할 수 있도록 도와준다. 이처럼 쓴 맛을 사람들에게 알려줄 필요가 없는 장점이 있다. 이것이 캡슐화이다.

캡슐화를 하면 불필요한 정보를 감출 수 있기 때문에, 정보은닉을 할 수 있다는 특징이 있다.
예를 들어, TV의 리모콘을 사용하기 위해 리모콘의 내부 회로(private으로 정의된 속성)를 알 필요는 없다. 사용자 입장에서는 리모콘의 조작 기능, 즉 public으로 정의된 속성만 알면 된다.

추상화 (Abstraction)

목적과 관련이 없는 부분을 제거하여 필요한 부분만을 표현하기 위한 개념이다. 쉽게 말해서, 어떠한 개념이나 사물을 코드로 작성하는 것이다.

객체들의 공통된 특징을 파악해 정의해 놓은 설계 기법이라 할 수 있다.

  • 추상클래스를 사용하는 이유
    대형 프로젝트를 진행하는 경우 또는 프로그램이 복잡해지는 경우 1차적인 설계를 위해 기능을 추상화시켜놓고, 활용여부는 차후 결정하기 위함이다.

예를 들어, 물고기, 사자, 토끼, 뱀이라는 각각의 객체가 존재한다. 이들을 하나로 묶으려 할 때, 동물 또는 생물이라고 어떤 추상적인 객체로 크게 정의하려고 한다. 이 때 동물 또는 생물이라고 공통점을 바탕으로 묶는것을 추상화 라고 한다.

상속성, 재사용(Inheritance)

객체지향의 꽃🌸

기존 상위클래스에 근거하여 새롭게 클래스와 행위를 정의할 수 있게 도와주는 개념이다.

기존 클래스에 기능을 가져와 재사용할 수 있으면서도 동시에 새롭게 만든 클래스에 새로운 기능을 추가할 수 있게 만들어 준다.

예를들어, 고양이 클래스와 강아지 클래스가 있다. 고양이와 강아지는 모두 포유류에 해당한다.
포유류는 여러 속성들이 정의되어 있는데 고양이와 강아지는 포유류의 이런 속성들을 갖고 있다.
하지만 아주 많은 속성이 다르기 때문에 좀 더 디테일하게 고양이, 강아지로 종을 나눈 것이다.

즉. 포유류라는 클래스는 고양이와 강아지 클래스에 속성들을 물려준다. 이것을 상속이라고 하고, 포유류와 고양이 포유류와 강아지 클래스는 상속 관계에 있다고 한다.

  • 상속이 필요한 이유

상속을 통해 코드의 중복 문제를 일부 해결할 수 있다.

포유류 클래스에 여러 속성들을 정의해 놓고 포유류에 해당하는 종(ex.강아지)의 클래스가 필요할 경우 포유류 클래스와 상속 관계를 맺는다.

상속관계를 맺으면 자식 객체를 생성할 때, 부모 클래스의 속성들을 자동으로 물려받기 때문에 자식 클래스에서 또 정의할 필요가 없다.

다형성(Polymorphism)

다형성은 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해준다. 이를 통해 코드의 재사용, 코드 길이가 감소 돼 유지보수가 용이하도록 도와주는 개념이다.

쉽게 같은 동작이지만 다른 결과물을 나올때 이를 다형성이라고 생각하면 된다. (그대로 재사용하지 않는다.)

예를 들어, 고양이 클래스에 울음이라는 속성을 정의한다.

사자는 고양이 과이기 때문에 사자 클래스는 고양이 클래스를 상속 받는다고 하면, 사자 클래스에도 울음이라는 속성이 자동으로 추가된다.(=상속)

하지만 양이와 사자의 울음소리는 다르다. 같은 울음이라는 속성이지만 실제 울음소리는 다르다. 이를 다형성이라고 한다.

오버라이딩(Overriding)

부모 클래스로부터 상속을 받은 속성에 대해, 자식 클래스에서 물려받은 속성을 재정의 할 수 있다.

즉, 사자 클래스는 부모클래스인 고양이 클래스의 울음 속성을 상속 받았지만, 사자는 고양이와 울음소리가 다르므로 울음 속성을 오버라이딩 해서 사자 울음소리에 맞게 재정의 할 수 있다.


Reference

profile
찐문과생의 빅데이터 생존기🐣 열심히 할래용 (ง •_•)ง

0개의 댓글