OOP - 객체

이성준·2022년 8월 9일
0

OOP = 시스템을 객체들끼리 메시지를 주고받으며 공동의 목표를 달성하기위해 협력하는 자율적인 객체들의 공동체
보는것
협력 => 요청과 응답
역할과 책임

객체란?

상태와 행동 식별자 함께 지닌 실체
객체의핵심 -> 기능 제공
자율적인 객체 = 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 객체

객체의 특징

객체의 특징들을 이상한 나라의 앨리스를 예시로 들어서 설명하겠습니다

  • 상태 : 객체의 특성을 표현하는데 사용되는 값
    ex) 앨리스세계의 사람 사람의 상태 = 키, 장소
public class Person {
    int height; //키
    String location; //장소
    
    public Person(int height, String location) {
        this.height = height;
        this.location = location;
    }

}
  • 행동 : 객체의 상태는 저절로 변경되지 않는다. 객체의 상태를 변경하는 것은 객체의 자발적인 행동 뿐이다 그 객체의 기능을 사용한다는것은 메소드를 호출한다는 것이고, 만약 다른 객체들과 협력하기위해 다른 객체의 메소드를 호출하도록 요청하는것을 메시지를 보낸다고 한다.메시지는 메서드 호출, 리턴, 익셉션 등으로 다양하게 나타낼 수 있다.

ex) 앨리스는 처음에 작은문을 통과하기위해 어떤 음료수를 먹는다 -> 먹는다라는 행위를 통해 자신의 키를 줄였다 그와 동시에 음료의 양이 줄어든다.

public void drinkBeverage(Beverage beverage){
    height=height/2;
        beverage.drunken();
    }

drinkBeverage로 키가 줄어서 상태 변경이 일어났고그와 동시에 Person 객체는 음료의 양을 줄이기위해 beverage객체에 메시지를 보낸다. 그럼

요청을 받은 beverage객체는 스스로 자신의 quantity를 0으로 만들어 양을 줄인다

  • 식별자 : 사람이 있을때 키랑 장소(상태)가 같으면 같은 사람일까? 아니다 당연히 상태가 동일해도 다른 인격체다 왜냐하면 지금 상태가 동일하더라도 나중에는 달라질수가 있다.
    그러므로 별도의 식별자를 둔다.
       Person Alice = new Person(130,"통로");
       Person MadHatter = new Person(130, "통로");
       //둘은 다른사람

동등성(equality) : 숫자나 문자열같은 불변상태를 가지는 대상들은 두 인스턴스의 상태가 같다면 두 인스턴스를 같다고 해도 무방하다.
동일성(identical) : 하지만 객체는 행동에 따라 상태가 가변하기때문에 두 객체는 독립적인 별개의 객체로 다뤄야 한다.

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return height == person.height && Objects.equals(location, person.location);
    }

자바에서는 Object클래스의 equals를 오버라이드해서 동일성 비교를 구현한다.

  • 객체의 기능 명세
    메서드를 이용해서 기능 명세
    이름, 파라미터,결과로 구성
    public static String valueOf(int i) {
            return Integer.toString(i);
        }
    String클래스의 valueOf라는 메소드인데 파라미터가 int형이고 이름이 ValueOf이니 int의 값을 출력?? 근데 return값을 보니 Integer.toString(i)이니 아 파라미터값으로 온 int값을 String으로 바꿔주는 메소드구나 하고 알수있다.

0개의 댓글