일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 오어스
- Kotlin
- oauth
- tomcat
- circuitbreaker
- 최종 합격
- 톰캣
- redis
- 우아한 테크 코스
- Spring cloud gateway
- DispatcherServlet
- Spring Batch
- 커넥션 풀
- 우테코 5기
- 우테코
- HikariCP
- 테스트코드
- MDC
- JWT
- Thread
- resilience4j
- Gateway
- 우아한테크코스
- spirng
- AOP
- 동시성문제
- Elk
- 트랜잭션
- 살아남았다.
- Transactio
- Today
- Total
코딩은 내일부터
[우테코] 우아한테크코스 생존기 (3)(객체의 선언과 초기화 , 양방향 의존성) 본문
객체의 선언과 초기화
객체의 선언과 초기화를 같은 곳에서 하는 것은 코드의 가독성과 유지 보수성을 향상시킬 수 있습니다.
객체를 선언할 때는 해당 객체의 타입을 지정하고,
이를 초기화할 때는 값을 할당합니다. 이 두 단계가 분리되어 있다면,
코드를 읽는 사람이나 유지 보수하는 사람은 객체를 사용하기 위해 두 군데 이상을 찾아봐야 합니다.
이러한 과정에서 코드가 복잡해지고, 코드의 가독성이 떨어질 수 있습니다.
하지만, 객체의 선언과 초기화를 같은 곳에서 한다면, 객체의 타입과 초기값을 한꺼번에 확인할 수 있습니다.
이러한 방식은 코드의 가독성을 높이고, 유지 보수를 용이하게 만들어줍니다. 또한, 객체를 수정할 때도 한 곳에서 변경할 수 있으므로,
실수할 가능성이 줄어듭니다.
따라서, 객체의 선언과 초기화를 같은 곳에서 하는 것이 좋습니다.
정리하자면 객체를 생성하면 선언과 초기화를 같이해주고 객체 생성자를 사용하여 객체를 생성하고 초기화(생성자 주입)하는 것이 그 이유입니다.
양방향 의존성
객체지향에서 중요한게 의존성인데 양방향 의존성이면 결합도가 높아져서 코드의 재활용이 불가능해집니다.
그리고 양방향성이면 두 클래스에 대한 행위만 할 수 있어서 재활용을 할 수 없고,
나중에 유지보수할 때 서로 결합도가 높아 유지보수할 때 서로 의존하고 있는 객체 전체를 바꿔야 상황이 생길 수 있습니다.
그리고 순환참조의 문제가 발생합니다.
public enum PieceType {
ROOK(5, List.of(RookState.getInstance())),
KNIGHT(2.5, List.of(KnightState.getInstance())),
BISHOP(3, List.of(BishopState.getInstance())),
QUEEN(9, List.of(QueenState.getInstance())),
KING(0, List.of(KingState.getInstance())),
PAWN(1, List.of(InitialPawnState.getInstance(), MovedPawnState.getInstance())),
EMPTY(0, List.of(EmptyState.getInstance()));
private static final int INITIAL\_STATE = 0;
private final double score;
private final List<MoveState> state;
PieceType(double score, List<MoveState> state) {
this.score = score;
this.state = state;
}
public class RookState implements MoveState {
private static final PieceType pieceType = PieceType.ROOK;
private static final RookState instance = new RookState();
private RookState() {
}
public static RookState getInstance() {
return instance;
}
위와 같이 양방향의 의존성을 가지는 코드로 예를 들면 기물들의 상태를 생성이 할 때 정상적으로 생성이 된다고 생각 할 수 있는데
테스트를 작성해서 확인해보면 nullpointerexception이 발생한다는 것을 볼 수 있습니다.
정리하자면 양방향의 의존성은 순환참조 문제가 일어날 수 있고, 결합도가 높아져 재사용성과 유지보수가 힘들어진다는 단점이 있습니다.
'우아한 테크 코스(우테코) > 우테코 공부' 카테고리의 다른 글
[우테코] 우아한테크코스 생존기 (6)(@Repository의 예외처리) (6) | 2023.04.22 |
---|---|
[우테코] 우아한테크코스 생존기 (5)(DI 와 빈 스코브) (3) | 2023.04.22 |
[우테코] 우아한테크코스 생존기 (4)(스프링이란) (4) | 2023.04.22 |
[우테코] 우아한테크코스 생존기 (2)(상속과 조합) (3) | 2023.03.13 |
[우테코] 우아한테크코스 생존기 (1)(방어적 복사) (3) | 2023.02.27 |