😌2022.08.23

일일 회고 13일차

할일 및 한일

경험 및 배움

디자인 패턴 10장(상태 패턴)

오늘은 디자인 패턴 세미나가 있는 날이라서 낮에는 디자인 패턴 10장(상태 패턴)을 복습하였다.

상태 패턴의 정의이다.

상태 패턴

객체 내부의 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있다.

마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있다.

상태 패턴은 상태를 별도의 클래스로 캡슐화한 다음 현재 상태를 나타내는 객체에게 행동을 위임하므로 내부 상태가 바뀔 때 행동이 달라지게 된다. 그리고 클라이언트가 별도로 행동을 지정하지 않아도, 내부 상태가 바뀜에 따라 객체가 알아서 행동을 바꾸게 할 수 있다.

자세한 정리는 notion에 정리 해놓았다.

세미나중 나온 질문들이 있었는데, 몰랐던 정보들은 우선 실제 클래스 개수보다, 클라이언트에게 노출되는 클래스의 개수가 더 중요하다고 한다.

그 이유는 클라이언트에게 노출되는 클래스가 많아지면, 그 만큼 클라이언트는 알고 있어야 할 클래스가 많아지는 것이고, 그것은 결국 의존성이 강해지고 의존을 더 하게 된다는 뜻과 같다고 한다.

그리고 책에서 하나 나온 질문이 "SoldState 와 WinnerState 는 중복되어 있는 코드가 꽤 많으니 추상 메소드로 상속을 받아 구현을 하는 것도 좋다." 였는데 멘토님이 말씀 해주시길, 저 두 메소드만 추상 메소드로 상속을 받아 구현이 필요한 것인데 나머지도 그렇게 동일하게 구현하게 되니 오히려 좋지 않은 방법일 수도 있다. 그래서 winner 메소드만 추가하면 되니 데코레이터로 감싸는 것도 좋은 방법이라고 말씀해주셨다.

Java getter, setter 메소드

이번 단원인 클래스를 공부하다 보니 getter, setter 메소드가 잘 이해가 가지 않고 좀 더 정보가 필요한 것 같아 찾아보았다.

우선 getter, setter 메소드를 쓰는 이유는 다음과 같다.

필드에 직접적으로 접근을 하게 되면 값이 쉽게 변경될 수 있고, 실수를 범해 코드에 오류를 날 수 있게 하는 확률이 높다. 그래서 필드는 private으로 지정하여 직접적인 접근을 막고, getter/setter 메소드를 통해 접근하도록 제한하는 것이다.

getter/setter 메소드를 사용하려면 우선 필드의 접근 제한자를 private 으로 설정하여 직접적인 접근을 막는다. 그 후, 기존의 클래스를 사용하듯이 객체를 생성하고 필드 값에 직접 데이터를 입력하는 것이 아니라, setter 메소드를 통해 초기화 시켜준다.

그리고 데이터를 호출할 때는 위와 같이 필드값을 직접 호출하는 것이 아니라 getter 메소드를 통해 호출하여 필드값을 가져온다.

또한 가져올 수 있는 이점으로는 setter 메소드를 작성할 때 조건문 등을 이용하여 원치 않는 오류가 일어날 가능성을 미리 막아준다.

public void setSpeed(int speed) {
        if (speed < 0) {
            this.speed = 0; // 입력된 값이 0보다 작을 경우, 0으로 초기
            return;
        } else {
            this.speed = speed;
        }
    }

개선 및 목표

  • 스트레스도 받고 생각할 일도 많다보니 체력이 떨어지는것 같다. 잘 관리하자.

  • 다음주 부터 2학기 개강이 예정되어 있으니 미리미리 계획하여 시간에 쫓기지 않도록 하자.

Last updated