<객체지향의 사실과 오해> 3.타입과 추상화

2024. 11. 6.·🤓 기술 학습 & 공부 기록/컴퓨터 일반

1. 추상화를 통한 복잡성 극복

📍 추상화의 목적

- 단순화

- 복잡도를 다루기 위해 추상화한다

📍 추상화의 정의

- 어떤 양상, 세부 사항, 구조를 좀더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법

📍 추상화 방법 2가지

1. 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화

2. 중요한 부분을 강조하기 위해 불필요한 세부사항을 제거

- 객체지향에서는 객체라는 추상화를 통해 현실의 복잡성을 극복한다

 

2. 객체지향과 추상화

📍 앨리스의 추상화 예시

- 하트 여왕, 스페이드 정원사, 클로버 병사 등을 모두 트럼프 객체로 단순화

(토끼는 트럼프로 추상화 불가)

- 트럼프로 단순화할 수 있는 이유는, 위의 모든 인물들이 트럼프의 일반적인 외형과 행동방식을 지녔기 때문

 

인스턴스(instance)

- 객체에 어떤 개념을 적용하는 것이 가능해서 그 개념 그룹의 일원이 될 때, 객체를 그 개념(그룹)의 인스턴스라고 함

- 대부분의 객체들은 몇 가지 개념의 인스턴스일 것임

 

3. 타입

📍 타입은 개념이다

타입

- 공통점을 기반으로 객체들을 묶기 위한 틀

- 현실 세계의 '개념'을 컴퓨터 공학 세계에서 '타입'이라는 용어로 대체하여 사용

 

📍 데이터 타입

타입 시스템이 생겨난 계기

- 애플리케이션이 커질 수록 메모리 주소값을 직접 다루는 것이 힘들어져서, 데이터 용도에 따라 데이터의 목적을 분류하기 위헤 데이터 타입(자료형)이 만들어짐

 

타입 시스템의 목적

- 메모리 안의 모든 데이터가 비트열(2진수)로 보임으로써 야기되는 혼란을 방지

- 데이터가 잘못 사용되지 않도록 제약사항을 부여(숫자형을 써야 할 때, boolean형을 쓰면 안되므로)

 

타입 시스템의 2가지 특성

- 어떤 데이터에 어떤 연산자를 적용할 수 있느냐가 그 데이터의 타입을 결정

- 타입에 속한 데이터를 메모리에 어떻게 표현하는지는 외부로부터 철저히 감춰진다

 

📍 객체와 타입

객체는 데이터(상태를 표현하기 위한)인가? (No)

- 객체는 행동에 따라 변하는 상태를 가지지만, 데이터는 아니다

- 그 이유는 객체에서 중요한 것은 상태가 아니라 행동이기 때문이다

(상태는 행동의 결과로 초래된 부수효과를 쉽게 표현하기 위해 도입한 추상적인 개념에 불과)

 

객체의 타입

- 어떤 객체가 어떤 타입에 속하는지를 결정하는 것은 상태가 아닌 객체가 수행하는 행동이다

- 행동을 책임으로 표현할 수 있고, 책임은 메시지 수신을 의미한다

- 다형성에 의하면 동일한 요청에 대해 각각 다른 방식으로 응답할 수 있다, 하지만 메시지는 동일해야 하므로, 다형적인 객체들은 동일한 타입에 속하게 된다 (매개변수와 반환 타입이 같기 때문에)

- 객체의 내부적 표현은 외부로부터 철저하게 감춰진다 (객체의 타입은 객체의 내부 표현과 아무 상관 없음)

 

캡슐화

- 객체지향 설계 시 데이터의 내부 표현 방식과 무관하게 행동만 고려하면 되므로 외부에 행동만 제공하고 데이터는 행동 뒤로 감춘다

- 데이터가 객체 인터페이스를 오염시키는 순간, 유연하지 못한 설계를 갖게 된다

 

4. 타입의 계층

📍 계층

- 객체지향에서 일반화/특수화 관계를 결정하는 것도 객체의 행동이다(상태X)

예시) 일반화/특수화 계층

- 트럼프: 납작 엎드릴 수 있다(일반화)

- 트럼프 인간: 납작 엎드릴 수도 있고(일반화), 걸을 때마다 몸이 종이처럼 펄럭일 수 있다(특수화)

 

📍 슈퍼타입과 서브타입

- 일반적인 타입 -> 슈퍼타입

- 좀 더 특수한 타입 -> 서브타입

 

일반화/특수화 관계 표기법

 

5. 정적 모델

📍 타입의 목적

- 인간의 인지능력으로 객체의 동적인 변화를 캐치할 수 없어서

- 시간에 따른 객체의 상태 변경이라는 복잡성을 단순화해준다

 

📍 그래서 결국 타입은 추상화다

- 불필요한 상태 변화라는 요소를 제거하고 철저하게 정적인 관점에서 객체를 묘사할 수 있음

 

📍 동적 모델과 정적 모델

객체의 스냅샷

- 스냅샷: 객체가 특정 시점에 구체적으로 어떤 상태를 가지는지 확인

- 객체지향 모델링을 위한 표준 언어인 UML에서 스냅샷을 객체 다이어그램이라고 부름

- 동적 모델: 객체가 살아 움직이는 동안 상태가 어떻게 변하고 어떻게 행동하는지 초점(객체 관점)

 

정적 모델(타입 모델)

- 객체가 속한 타입의 정적인 모습을 표현(객체를 추상화한 타입관점)

- 동적으로 변하는 객체의 상태에는 관심 없음

 

객체지향 애플리케이션에서는 동적 모델 및 정적 모델을 적절히 혼용해야 한다

 

📍 클래스

- 객체지향 프로그래밍 언어에서 정적 모델은 클래스로 구현된다

 

클래스와 타입은 다르다

- 타입: 객체를 분류하기 위한 개념

- 클래스: 타입을 구현할 수 있는 메커니즘 중 하나

- 예) JavaScript같은 프로토타입 기반 언어에서는 클래스 불필요(단지 syntactic sugar)

 

클래스는 타입의 구현 이외에 코드를 재사용하는 용도로도 사용됨

'🤓 기술 학습 & 공부 기록/컴퓨터 일반' 카테고리의 다른 글
  • <객체지향의 사실과 오해> 4.역할, 책임, 협력
  • 컴퓨터 그래픽스 3장: 모델링
  • 컴퓨터 그래픽스 2장: 수학 기초
  • 컴퓨터 그래픽스 1장: 서론
지식물원
지식물원
지식이 자라는 식물원!
  • 지식물원
    지식물원
    지식물원
  • 전체
    오늘
    어제
    • 분류 전체보기 (516)
      • 🎨 프론트엔드 공부 (253)
        • JS & TS (92)
        • HTML & CSS (22)
        • React & Next (49)
        • Vue & Nuxt (22)
        • 기타 (68)
      • 🤓 기술 학습 & 공부 기록 (116)
        • Node.js (0)
        • Python (37)
        • 백엔드 (0)
        • 딥러닝 (1)
        • 컴퓨터 일반 (72)
        • 개발 인프라 (6)
      • 👨‍💻 프로젝트 경험 (6)
        • Work (0)
        • Toy (6)
      • ⚙️ 개발 팁 & 노하우 (21)
        • 프론트엔드 (6)
        • 기타 (15)
      • ☕️ 커리어 & 인터뷰 준비 (88)
        • 코딩 테스트 (88)
      • 📰 기술 트렌드 & 생각 정리 (4)
      • 📚 기타 (25)
        • 마케팅 (15)
        • 비개발서적 (10)
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

    • 모바일 접속 시 코드 하이라이팅 깨질 때
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
지식물원
<객체지향의 사실과 오해> 3.타입과 추상화
상단으로

티스토리툴바