1 minute read

OOP(Object-Oriented Programming) 간단 정리

  • 개념

    프로그램을 수많은 ‘객체’ 라는 기본 단위로 나누고 이들의 상호작용으로 서술하는 방식

    객체란 하나의 역할을 수행하는 ‘메소드와 변수(데이터)’ 의 묶음

  • 특성

    모든 것은 객체로 나뉘어짐

  • 배경

    절차형 프로그래밍의 탑다운 방식으로 인해 스파게티 코드화 되며 유지보수에 어려움 겪음

    GOTO문의 해로움 이라는 논문에서 프로그램을 함수 단위로 나누고 프로시져끼리 호출 하는 구조적 프로그래밍 방식 제안

    네임 스페이스 포화, 실행 콘텍스트 저장 문제 등장

    구조체로 돌려막기

    객체 지향 프로그래밍의 독립성/신뢰성 확보로 재사용성 높임으로써 위의 문제들 극복

    빠르고 효율적인 코딩과 유지 관리 가능해짐

  • 요소

    • 캡슐화

      변수와 함수를 하나의 단위로 묶는 것

      • 정보 은닉

        프로그램의 세부 구현이 외부로 드러나지 않도록 특정 모듈 내부로 감추는 것

        모듈 내에서의 응집도를 높이며, 외부로의 노출을 최소화하여 모듈 간의 결합도를 떨어뜨려 유연함과 유지보수를 높이는 것

        접근 제한법으로 public (외부에서 사용 가능), protected(자식 클래스에게만 노출), private(클래스 내부에서만 사용)

    • 상속

      자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받는 것
      
      기능 변경은 overriding 으로 가능하여 재사용성이 용이
      
    • 다형성

      하나의 변수나 함수가 상황에 따라 다른 의미로 해석될 수 있는 것

  • 장단점

    상속은 뛰어나지만 그만큼 복잡해질 수 있음

    클래스의 정보 은닉은 시스템 보안과 자료 훼손 방지를 제공하지만 pulic 변수 남발 시 의미가 없어짐

    클래스의 정의는 다른 OOP 에서도 똑같이 사용할 수 있지만 네트워크 분산 사용은 쉽지 않음

    데이터 클래스 개념은 새로운 데이터 형식을 임의로 정의할 수 있게 해줌

    캡슐화, 격리 구조 설계 시 성능 하락이 있음

    개념을 기준으로 나누다보니 반복 연산이 컴퓨터 친화적이지 않고 배열 자료구조를 적용하기 힘들어짐

    객체를 따로 나누는데 주력하다 보니 서로 비슷한 처리를 하는 코드가 서로를 건드릴 수 없게 됨

  • 객체와 인스턴스

    객체 : 코드 상에서 자료형이 임의의 클래스로 선언된 식별자

    인스턴스 : 코드 컴파일 후 프로그램이 실행될 때 해당 객체가 메모리에 적재시

    객체 = 인스턴스