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

NHJ·2022년 1월 1일
0

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

객체 지향 프로그래밍은 컴퓨터 프로그래밍 패러다임 중 하나로 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

컴퓨터 프로그램을 명령어의 목록으로 보지 않고 여러 개의 독립된 단위, 즉 객체들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메세지를 주고 받고 데이터를 처리할 수 있다. 이는 현실세계의 사고방식과 가깝다.

객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 복잡하고 자주 업데이트 되는 대규모 소프트웨어 개발에 많이 사용된다.

모든 객체의 역할과 기능을 이해해야 하기 때문에 프로그래밍에 많은 시간이 소요되며 절차지향언어보다 처리 속도가 느리다. 또한 대체로 난이도가 높다.


객체 지향 프로그래밍의 구조

객체 지향 프로그래밍은 위와 같은 구조를 갖는다.

Class

  • 어떤 문제를 해결하기 위한 데이터를 만들기 위해 만든 사용자 정의 데이터 타입으로 객체의 속성과 동작을 변수와 메소드로 정의한 것이다. 즉, 객체를 만들기 위한 메타정보라고 할 수 있다.

Object

  • Class에서 정의한 것을 토대로 실제 메모리에 할당된 것으로 실제 프로그램에서 사용되는 데이터이다.

Method

  • 객체의 동작을 설명하는 class 내부에 정의된 함수이다.

Attribute

  • 객체의 속성을 나타내며 Class 내부에 정의된다. 객체는 attribue field에 데이터가 저장된다.

객체 지향 프로그래밍의 특징

Encapsulation(캡슐화)

  • 객체 내부의 모든 중요한 정보를 포함시키고 선택된 정보만 외부에 노출시키는 것을 의미한다.
  • 속성과 동작은 클래스 내부에 정의되며 객체가 인스턴스화되면 데이터와 메소드가 해당 객체에 캡슐화된다.
  • 클래스 내부의 구현 내용과 객체 내부의 데이터를 숨긴다.

캡슐화를 수행하려면 일부 필드는 private로 정의하고 일부는 public으로 정의해야 한다.

  • Private/ Internal interface: 동일한 클래스에서만 접근 가능하다.
  • Public / External Interface: 다른 클래스에서도 접근 가능하다.
자동차로 예를 들어보자. 차량이 외부에 노출하는 정보는 깜박이를 이용해 어느 방향으로 가는지이고 이는 public에 해당한다. 반면에 엔진은 외부에 노출하지 말아야 할 정보이며 private에 해당한다. 만약에 엔진의 온도같은 정보를 노출하면 운전자들에게 혼동을 줄 것이다.

캡슐화의 장점

  • 외부에서 public 메소드랑 속성만 접근할 수 있어 보안을 강화한다.
  • 개발자가 public한 정보만 접근할 수 있어 수정하면 안되는 정보를 수정하는 실수를 피할 수 있다.
  • 관련된 기능과 특성이 한 곳에 모여 있어 객체 재활용이 원활해진다.

Abstraction(추상화)

  • 추상화는 사용자가 객체의 선택된 속성 및 메소드와만 상호 작용하는것을 의미한다. 불필요한 세부 내용을 감춤으로써 복잡한 객체에 단순하게 접근할 수 있다.
예를 들어, 자동차에서 운전자는 엑셀, 브레이크, 핸들등을 사용하여 자동차 내부의 구체적인 동작과정을 몰라도 사용할 수 있다.

추상화의 장점

  • 단순한 유저 인터페이스를 통해 내부 동작 과정을 몰라도 된다.
  • 일부 정보만 보여주어 보안을 강화한다.
  • 코드가 수정되어도 추상화는 거의 변하지 않아 유지보수가 쉽다.

Inheritance(상속)

  • 자식 클래스가 부모 클래스의 속성과 동작들을 이어 받을수 있도록 한다.
  • 기본 속성과 동작이 부모 클래스에 정의되어 있으면 자식 클래스를 만들어 부모 클래스의 속성과 동작을 확장하고 추가할 수 있다.

상속의 장점

  • 공통되는 코드의 중복을 없앨 수 있다.
  • 보다 철저한 데이터 분석을 강제한다.

Polymorphism(다형성)

  • 동작을 공유하여 둘 이상의 형태를 취할 수 있도록 객체를 설계하는것을 말한다.
  • Method Overriding과 Mehtod Overloading을 통해 같은 메소드가 다른 동작을 실행할 수 있게 한다.
  • Method Overriding: 부모클래스의 메소드를 재정의 하는것이다. 메소드의 이름과 매개변수는 같아야 한다.
  • Mehtod Overloading: 같은 이름의 함수를 여러개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는 것.

다형성의 장점

  • 타입이 다른 객체를 동일한 인터페이스를 통해 전달할 수 있다.
  • 코드 복제 필요성을 줄여준다.

[참고]

profile
화이팅!

0개의 댓글

관련 채용 정보