객체 지향 프로그래밍

최경락 (K_ROCK_)·2021년 12월 13일
0
post-thumbnail

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

객체 지향 언어

  • 클래스 문법이라는 밑그림을 이용하여 코드를 작성하는 언어.
  • 데이터와 기능을 한곳에 묶어서 처리한다.
    → 클래스를 이용하여 데이터와 메소드(함수, 기능)를 한데 묶어서 관리함.
  • 자바스크립트는 객체지향 언어는 아니지만, 객체 지향 패턴으로 작성이 가능하다.
    → 객체지향 언어에는 java, c++ 등이 있다.(JS는 객체지향 언어가 아니다.)

절차적 언어

  • 객체지향이라는 개념 이전에 사용하던 개념으로, 초기의 프로그래밍 언어들이 이에 속한다.
  • 순차적인 명령의 조합들로 이루어지며, 매번 서로 다른 값을 지정하고 사용하기 위해서는 반복적으로 값을 작성해야했음.

객체 지향 프로그래밍(OOP)

  • OOPObject Oriented Programming 라는 뜻으로, 객체의 관점에서 프로그래밍을 하는 것을 의미한다.
  • 말 그대로 객체 지향 프로그래밍이라는 개념을 뜻 하므로 객체 지향 언어와는 같다고 할 수 없다.
  • 어떠한 기능을 구현하기 위해 밑그림을 만들고, 밑그림을 바탕으로 한 객체를 만드는 프로그래밍 패턴을 이야기한다.
  • 여기서 밑그림을 클래스(class), 클래스를 바탕으로한 객체를 가진 변수인스턴스(instance)라고 한다.
  • OOP 에서 모든 것은 객체로 그룹화된다.
    → 데이터와 기능(property, method)

OOP 4대 원칙

  • 캡슐화(Encapsulation)
    • 클래스 함수를 이용하여 데이터와 기능을 하나의 단위로 묶는다.
    • 은닉 : 외부로 노출되면 안되는 데이터나, 기능들의 구현은 숨기고 객체 외부에서 필요한 동작만 노출 시키는 것을 이야기한다.
      → 클래스 내부의 데이터는 숨기고, 기능만 호출해서 실행하는 것.
    • 위의 특성을 이용하면, 메소드만 수정하여 코드 흐름의 변화없이 수정할 수 있다.
      → 반대로, 절차적 프로그래밍의 경우 수정을 위해 데이터를 바꾸면 코드 흐름이 크게 바뀔 수 있다.
    • 느슨한 결합에 유리하다 → 언제든 구현을 수정 할 수 있다.
    • 느슨한 결합이란, 어떤 기능을 절차적으로 작성하는 것이 아니라, 필요한 행동들을 속성 또는 메소드로 지정하여 인스턴스가 어떤 일을 할지 유추 할 수 있게 하는 것이 이야기한다.
    • 느슨하다는 것은 메소드로 구현하는 기능이 일부 추상화된다는 것을 의미하는 것 같다.
      → 마우스 이동이라고 한다면 x, y 축이 움직이는 걸 일일히 메소드로 만드는게 아니라, move 로 묶어서 추상화.
  • 상속(Inheritance)
    • 부모 클래스의 특징을 자식 클래스가 받는 것
      → 정확히는 기본 클래스(base class)의 특징을 파생 클래스(derive class)가 받는다는 표현이 맞다.
    • 예를 들어 사람이라는 클래스학생이라는 클래스가 있는 경우 전부 새로 정의하는 것이 아니라, 사람의 클래스를 상속받은 뒤 학생에 필요한 내용만 추가하는 것
    • 즉 불필요한 코드를 줄인다.
  • 추상화(Abstraction)
    • 내부의 구현은 복잡하지만, 외부로 노출되는 내용은 간단하고 직관적이게 하는 것.
    • 캡슐화와 유사해보이지만, 캡슐화는 은닉에 포커스가 있다면, 추상화는 사용자가 필요하지 않는 메소드를 노출시키지 않고 단순하게 정의한다 라는 차이가 있음.
    • 일일히 많은 기능을 모두 실행하지 않고, 하나의 기능에 담아서 사용하니 얘기지않은 변화를 방지 할 수 있다.
    • 예를 들어 컴퓨터를 켤 때 모든 전자부품들이 상호작용하지만, 우린 전원버튼 하나로 켤 수 있는데 이걸 추상화라고 한다.
      → 만약 상호작용하는 모든 것을 작성한다면 이는 절차적 프로그래밍이 된다.
  • 다형성(Polymorphism)
    • 여러 형태를 가지고 있다라는 뜻이며, OOP 에서는 같은 메소드이지만 다양한 모양을 가질 수 있다는 것을 뜻한다.
    • 어떤 메소드를 실행 할 때 가지고 있는 데이터에 따라 같은 메소드 임에도 다양한 출력을 가질 수 있다.
    • 예를 들어 먹는다 라는 하나의 메소드가 있다면, 뷔페에 가서 해당 메소드를 실행하는 경우 매번 먹는 음식이 모두 다를 수 있다.

https://88240.tistory.com/228
→ 위의 개념들을 찰진 예시로 설명하신 블로그


+

인터페이스란?(interface)

  • class 문법에서 속성과 메소드만 정의 된 것을 이야기한다.
  • 추상화는 이 인터페이스를 단순화하여 작성하는 것이 주 목적이다.

예시) 컴퓨터가 켜지는 과정

  • 전원인가, 메인보드에 파워전달, cpu, ram, vga, 저장매체, usb 전원 전달 뭐 어쩌고
  • 위의 과정 전부가 개별 메소드로 이루어졌다면, 인터페이스가 상당히 복잡해질 뿐 아니라 예기치 못한 변화가 생길 가능성도 존재한다.
  • 이 기능을 한대 모아 컴퓨터 전원 on 이라는 메소드로 만들면 이걸 추상화라고 한다.

0개의 댓글