객체지향이란 무엇일까 (1)

굴착드릴·2025년 4월 17일

Drilling

목록 보기
7/12

공학이란 현실세계의 문제점을 해결하기 위해 등장한 것이기 때문에 역사를 아는 것이 중요하다고 생각합니다.

정확한 정보를 얻고자 논문과 발표등을 통해 객체지향의 등장 배경에 대해 조사해보았습니다.

OOP의 등장 배경

객체지향프로그래밍이란 개념은 1960년대 노르웨이 크리스텐 냐우가와 올레-요한달이 개발한 시뮬라 언어에서 비롯되었습니다.

이들은 기존 프로그래밍 언어와 방식으론 복잡한 현실세계를 시뮬레이션 하기 어려움을 느꼈으며 현실세계의 모든 개체는(객체 아니고 개체입니다) 특성과 행동을 가지고 상호작용한다는 것에 영감을 얻어 시뮬라(SIMULA 64)를 개발하게 되었습니다.

그리고 시뮬레이션에서 사용한 '객체' 개념이 일반적인 프로그램 설계에서도 절차적 코드의 복잡성을 해결할 수 있음을 느껴 범용 프로그래밍을 지원하기 위한 SIMUA 67을 재작성하게 되었습니다.

SIMULA67에서 제시한 객체 지향 개념

  • 클래스(Class)
    • 데이터와 프로시저를 묶는 단위로 정의.
    • SIMULA 67 공식 메뉴얼: "클래스는 활성 레코드(Active Record)로, 실행 중인 프로세스의 상태와 행동을 캡슐화한다."
  • 상속(Inheritance)
    • prefix 키워드로 계층 구조 표현 (현대적 extends의 시초).
    • 논문 설명: "기존 클래스를 확장해 중복 코드를 제거하는 것이 목적이었다."
  • 동적 객체 생성
    • new 연산자 도입 → 런타임에 객체 인스턴스 생성 가능.

문제 해결 흐름

  • 기존 절차지향에선 함수와 데이터가 분리되어있어 의존성이 얽히고 섥힘
    • 전역변수가 어디 사용되는지 몰라 건들이지 않게 됨
  • 객체는 상태를 가지고 있으며 행동을 한다 라는 것에서 영감을 얻음. 상태 = 변수, 행동 = 프로시져 (자바에선 메서드), 객체는 프로시져와 변수를 가진 것이라 정의.
  • 현실 세계에서 객체는 독립적. 다른 객체의 상태를 직접 접근할 수 없음. 상호작용(행동)을 통해서만 상태를 바꿀 수 있음.

    속으로 생각해봤자 돌이 날아가지 않음. 내가 손으로 집어서 던져야 돌이 날아감

  • 객체와 객체는 프로시져를 통해 소통. 다른 객체의 변수에 직접 접근하지 말도록 제안
  • 위 개념을 캡슐화라고 부름
  • 비슷한 객체가 많이 만들어 질 수 있기 때문에 설계도인 클래스를 정의, new + 클래스 연산을 통해 객체를 생성하도록 함.
  • 특정 객체(클래스)에 기능을 추가하는 경우 코드 중복이 반복, 상속이란 개념을 제시

캡슐화 : 기존 문제 해결. SIMULA는 이를 핵심이라 여김
상속 : 새로운 기술


요약

  1. 절차지향으론 시뮬레이션 프로그램 개발이 어려웠음
  2. 실제 세계는 객체들이 소통하는 형태, 이를 모방하여 시뮬레이션 프로그래밍 언어인 SIMULA64 발표
  3. 단순 시뮬레이션이 아닌 범용 프로그램에서도 객체지향이 효과가 있을 것으로 예상, 범용 프로그래밍을 위한 최초의 OOP언어 SIMULAR67 발표
  4. 핵심 아이디어는 객체는 각자의 상태를 가지고 있으여 객체와 객체 사이는 행동을 통해 대화한다는 것
  5. 함수와 변수를 분리한 절차지향과 달리 객체지향은 함수와 변수를 묶음
  6. SIMULAR67에서 캡슐화, 클래스, 상속 제시. 캡슐화를 가장 강조
  7. 이 당시 캡슐화의 개념은 오늘날의 캡슐화와 조금 다름. 객체는 독립적이다라는 것이 캡슐화. 이를 지키기 위해 객체와 객체는 프로시져를 통해 소통해야 하며 다른 객체의 변수에 직접 접근하지 말도록 해야한다고 설명

Reference

O.-J. Dahl, "The Development of the SIMULA Languages" (HOPL Conference, 1978)

B. Liskov, "Programming with Abstract Data Types" (1974)

Kristen Nygaard, "Turing Award citation" (2001)

O.-J. Dahl, "Turing Award citation" (2001)

profile
두두두두..

0개의 댓글