-
nextStep - 모든 원시값과 문자열 포장언어/JAVA 2023. 7. 23. 10:20
- 클래스를 분리할 때 좋은 원칙이다.
> 모든 원시값, 모든 문자열 포장 + 일급 컬렉션 사용
> 꼭 모든 원시값이랑 문자열을 포장할 필요는 없음 이런 기준으로 쪼개는 것 연습하다보면 감이 온다.
(클래스 분리에 대한 감)
원시값, 문자열 포장의 장점
1. 유효성 체크가 편해진다. -> 객체의 유효범위 조정이 더 안전하다.
2. 로직구현 위임이 쉽다 -> 몇몇 로직은 줘버리자
3. 불변객체로 만들어서 외부에서 변경 불가능하게 만들기 쉽다.
4. 클래스가 분리되면서 테스트하기 더 쉬운코드 만들어진다
5. 단일 책임 원칙 지키기 쉬워진다.
1. 원시값 포장
public class Position { private final int pos; public Position(int pos) { this.pos = pos; } public int getPos() { return this.pos; } }
- 일단 간단하게 position객체를 만들었다.
- 여기서 getPos를 잠시 없애보자 (갯터를 지우기)
-> 비교할 때 getter없이 하고 싶으면, 값이 아닌 객체 비교를 하자
@Test void create(){ Position ps = new Position(3); assertThat(ps).isEqualTo(new Position(3)); }
* Position에 equal이랑 hashcode 오버라이딩 필요
-> 값 변경시에도 getter와 setter 구현 주의하자
public void move(int rand){ if(rand >= FORWARD_NUM){ int pos = pos2.getPos(); pos2.setPos(pos+1); } } -------------------아래와 같이 변경 -------------------- public void move(int rand){ if(rand >= FORWARD_NUM){ pos2 = pos2.move(); } }
position 내부
public Position move() { return new Position(++this.pos); } //추후에 성능이 문제가 되면 아래와 같이 고칠 수 있다 (가변객체로 변화한다) public Position move() { pos =pos+1; return this; }
* 이런 방식을 통해 불변객체가 된 것을 볼 수 있다.!
* getter, setter 지양하여 벨류인스턴스 (포장된 원시값, 이름 등등)을 불변객체로 만들었다.
* getter,setter가 아닌 객체에 메시지를 보내서 (메서드 호출)을 통해 해결하려고 해보자
'언어 > JAVA' 카테고리의 다른 글
Java - io 직렬화(Serialization) (0) 2023.07.24 nextStep - 자동차 경주 일급 컬렉션 만들기 (0) 2023.07.23 nextstep-자동차경주 (테스트하기 어려운 코드 테스트하기) (0) 2023.07.23 람다식(3) - 최종처리 (0) 2023.07.14 스트림(2) - 중간 처리 (0) 2023.07.14