21.04.10 TIL OOP

J·2021년 4월 11일
0

OOP

  • Object Oriented Programming 의 약자로써, 객체 지향 프로그램을 의미한다.
    객체 지향은, 쉽게 말해 현실세계의 특성을 컴퓨터에 녹여내고 싶음을 의미한다.

    OOP는 다음과 같은 특성을 가진다.

Encapsulation(캡슐화)

  • 캡슐화는 하나의 객체 안에 속성과 메소드를 묶어서 정의함을 의미한다.
  • 캡슐화는 은닉느슨한 결합이라는 특징을 가진다.
  • 은닉 : 실제적인 구현방식은 숨기고, 눈에 보이는 동작만을 나타냄을 의미한다.
    user의 입장에서 실제적인 구현방식이 물론 궁금할 순 있지만 해당 서비스를 제공하는 입장에선 보안의 중요한 이슈가 될 수도 있고, 굳이 작동원리를 하나하나 노출시켜 user에게 불필요한 정보를 제공할 이유는 없을 것이다.
  • 느슨한 결합 : 또한 캡슐화는 해당 메소드나 속성을 변경할 수 있어, 필요에 따라 언제든 실제적인 구현을 변경할 수 있다.

Abstraction(추상화)

  • 캡슐화와 좀 헷갈리는데 캡슐화는 기능의 은닉, 추상화는 시각의 간편화 정도로 해석할 수 있겠다.
    캡슐화는 실제적인 복잡한 기능에 포커스를 맞춰 해당 기능이 외부에 알려지지 않도록 최대한 은닉하며 축소하고, 추상화는 그러한 기능들의 묶음을 우리의 눈에 보이는 것만 작동시키면 결과적으로는 잘 작동하게끔, 인터페이스에 포커스를 맞춤을 의미한다.
  • 예를 들어 우리가 키오스크에서 어떤 메뉴를 찍었을 때 해당 메뉴가 장바구니에 담기고, 다 정한 메뉴들을 결제하고, 결제 완료후 우리가 고른 메뉴들이 매장에 어떤 방식으로 전달되는지 그 구현방식을 다 알 필요 없듯, 매장에서도 그 기능들을 보여줄 필요없이 최대한 간단하게만 키오스크의 인터페이스를 짤 것이다.
    우리는 우리가 고른 햄버거만 잘 나오면 되고, 매장은 우리가 어떤 걸 골랐고 매장식사인지 포장인지만 알면 된다.

Inheritance(상속)

  • 간단하게 부모 class의 속성과 메소드를 자식 class도 그대로 상속받음을 의미한다.
  • 그렇기 때문에 기본이 되는 속성과 메소드는 이어받고, 자식만의 속성과 메소드도 따로 가질 수 있다.

Polymorphism(다형성)

  • 본질적인 메소드는 부모가 갖고, 거기서 파생하는 특정한 메소드가 존재할 경우, 해당 기능을 구현할 수 있음을 의미한다.
  • 예를 들어, draw()라는 도형을 그리는 메소드가 부모 class에 존재할 경우, 해당 class를 참조하는 instance(자식)는 draw() 메소드를 가진다.
    이 경우, 단순하게 '그리다'라는 메소드만 부모가 갖고 있을 뿐, '삼각형을 그린다', '사각형을 그린다' 따위의 좀 더 구체적인 메소드는 자식들이 갖고 있을 것이다.
  • 즉 '그린다 + 삼각형', '그린다 + 사각형' 의 형태로 나타낼 수 있음 - 객체의 특성에 맞게 달리 작성할 수 있음 - 이 다형성이고, 이런 다형성의 속성이 없다면 '삼각형을 그린다', '사각형을 그린다' 처럼 메소드를 매번 설정해 주어야 할 것이고, 이는 비효율적인 프로그래밍 방식이라고 볼 수 있다.

0개의 댓글