ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 객체지향의 사실과 오해 [chpt 1,2]
    ProgrammingTheory/OOP 2023. 2. 25. 01:38

    - 이 글은  객체지향의 사실과 오해 리뷰를 위한 메모 글이며, 공부 목적을 위한 노트 입니다.  글은 4월 초에 완성합니다.

     

    chpt 1 :

    협력하는 객체들의 공동체

    1. 협력하는 사람들
    2. 역할 책임 협력
    3. 협력 속에 사는 객체

    객체는 상태와 행위를 갖는다.

    class A {

    int a

    public addA(){

    }

    }

    객체지향의 목표: 실세계를 모방하는 것이 아니다. : 오히려 세계를 창조하는 것이다.

    객체지향의 본질 : 클라스가 본질이 아니다.

    • 핵심은 적절한 책임을 수행하는 역할 간의 유연하고 견고한 협력 관계를 구축하는 것이다.
    • 역할, 책임, 협력에 집중하자.

    정통적인 객체 지향의 설계의 핵심 사상 : 완전 연결성

    실세계의 사물을 기반으로 소프트웨어 객체를 식별하고 구현까지 이어간다.

    역할 : 역할은 대체 가능성을 의미한다.

    하나의 객체가 동시에 여러 역할을 수행할 수 있다. : → “다형성”

    코드 수명 : 관점의 차이 , GC , 객체의 수 ? 코든 짜는건 팀이 따라가자.

    • 코드는 짧? : 자기의 의견의 단단함 .

    책임

    어플리케이션 기능은 더 작은 책임으로 분할 되고 ,책임은 절한 역할을 수행할 수 있는 객체에 의해 수행됨.

    협력: 객체간의 메시지를 전달하여 기능을 수행한다.

    절차지향과의 차이 : 실행시간에 메서드를 선택할 수 있다라는 점.

    자율적인 객체는 상태와 행동을 가진다

    상태 : 필드  , 행동 : 메서드

    ex

    domain entity layer

     

     

    chpt 2 이상한 나라의 객체

     

    행동이 상태를 결정한다

    = 상태를 먼저 설계 하는것이 아니라 행동을 먼저 생각하자.

    : Class - > 공통된 역할의 집합 : 도메인 뽑기

    객체지향의 캡슐화와 다형성을 높이기 위해서는 객체들의 자율을 높여야하며 , 이는 객체는 스스로 행동을 한다라는 것과 하나의 객체가 다른 객체의 상태를 변경하지 못하게 한다 라는 원칙을 지켜야한다.

    이상한나라의 카드들을 보면 손발이 달려 스스로 말하고 움직이는 의인화가 되어있다.

    객체 지향의 설계도 마찬가지다. 사용자 엘리스가 음료수를 마신다고 행동을 하면

    음료수 객체에 메시지를 보낸다.

    음류수 객체 내부에서 음료 양이 줄거나 오히려 늘수도 있다. → 음료의 자율성을 높인다.


    서문 :

    객체지향 패러다임은 지식을 추상화 하고 추상화한 지식을 객체 안에 캡슐화함으로 실계 문제에 내재된 복잡성을 관리하려고 한다.

    객체지향과 인지 능력 : 인간은 본능적으로 세상을 독립적이고 식별 가능한 객체의 집합으로 바라본다.

    세상을 더 작은 객체로 분해하는 것은 본질적으로 세상이 포함하고 있는 복잡성을 구분하기 위한 인간의 몸부림이다.

    현실 세계를 기반으로 새로운 세계를 창조 하는 것이다.

    앨리스 객체

    문을 통과하기 위하여 적당한 상태 = 문을 통과하기에 적절한 키

    ⇒ 특정 “시점”의 엘리스의 .상태. = 특정 시점의 키

    키를 변화 시키는것 = 앨리스의 행동 = 외부의 요소가 아닌 자율적인 행동

    문을 통과했다는 행동의 결과는 앨리스의 “위치 상태” 를 이용하여 설명한다.

    앨리스의 위치 상태 [”정원”, ” 통로”]

    상태가 필요한 이유 = 과거의 모든 행동 이력을 설명 하지 않고 , 행동의 결과를 예측 가능하게 한다.

    상태와 프로퍼티

    숫자, 문자열,양, 속도, 시간 날짜, 참 거짓과 같은 값들은 객체가 아니다. : premitive type

    모든 객체는 = 단순한 값 + 객체의 조합으로 표현이 가능

     **객체   = 상태+ 행동 , 상태의 특징 =  프로퍼티** 
    

    Property : Static , 키 , 위치, 음료

    객체의 프로퍼티 = 속성(단순 값) + 링크

    Property value: 시간의 흐름에 따라 변경됨 → property 의 value 만으로는 객체가 같은지 알 수 없다.

    콜라 100ml. 사이다 100ml, : 서로 다른 객체

    사이다 10ml , 사이다 10ml : 서로 다른 객체 : → 다른 주소

    링크

    객체 간의 링크가 있어야 협력이 가능하다.

    링크 : 객체가 다른 객체를 참조할 수 있다를 의미, 두 객체중 하나의 객체는 다른 객체의 식별자를 알고 있다.

    속성 attribute

    객체를 구성하는 단순한 값

    객체의 프로퍼티 = 속성 + 링크



    정리 :

    객체의 상태 = 특정 시점의 정보의 집합 , 객체의 상태 정적인 프로퍼티와 동적인 프로퍼티 값으로 구성됨

    객체의 프로퍼티는 단순값 + 다른 객체를 참조할 링크 로 구성됨

    • 객체 지향의 세계에서는 객체는 다른 객체의 상태에 직접적으로 접근할수도, 상태를 변경할 수 도 없다.
    • 객체지향의 기본 : 상태와 상태를 조작하기 위한 행동의 하나의 단위로 묶는것

    Q:

    class User (){

    int level;

    }


    case : out side of class

    if(user.getLevel() == 3){

    user.setLevel(4);

    }



    A:

    class User (){

    int level;

    public upgradeLevel(){

    this.level = 4;

    }

    }

    case : out side of class

    → user.upgradeLevel()



    page 57~59 : 어렵 → 주소를 생각하자.

    객체를 서로 구별할 수 있는 프로퍼티가 객체 안에 있다. : 이 프로퍼티를 식별자라한다.

    상태를 이용해 두 값이 같은지 판별할 수 있는 성질을 동등성이라한다. : Equals : 값 비교

    식별자를 기반으로 객체가 같은지 판별하는 것을 동일 성이라 한다. : == 객체의 주소 비교

    String 객체가 맞는 , 동등성 비교도 가능하다.

    값객체 : value object 식별자가 없다.

    stack : 값 , 객체 참조값을 저장

    Heap : 객체 , 주소

    • 언어에 맞게 알자

     

     

Designed by Tistory.