코딩은 내일부터

[우테코] 우아한테크코스 생존기 (3)(객체의 선언과 초기화 , 양방향 의존성) 본문

우아한 테크 코스(우테코)/우테코 공부

[우테코] 우아한테크코스 생존기 (3)(객체의 선언과 초기화 , 양방향 의존성)

zl존 비버 2023. 3. 27. 17:30
728x90

깔ㅡ끔

 

객체의 선언과 초기화


객체의 선언과 초기화를 같은 곳에서 하는 것은 코드의 가독성과 유지 보수성을 향상시킬 수 있습니다.

객체를 선언할 때는 해당 객체의 타입을 지정하고,
이를 초기화할 때는 값을 할당합니다. 이 두 단계가 분리되어 있다면,
코드를 읽는 사람이나 유지 보수하는 사람은 객체를 사용하기 위해 두 군데 이상을 찾아봐야 합니다.


이러한 과정에서 코드가 복잡해지고, 코드의 가독성이 떨어질 수 있습니다.

하지만, 객체의 선언과 초기화를 같은 곳에서 한다면, 객체의 타입과 초기값을 한꺼번에 확인할 수 있습니다.


이러한 방식은 코드의 가독성을 높이고, 유지 보수를 용이하게 만들어줍니다. 또한, 객체를 수정할 때도 한 곳에서 변경할 수 있으므로,
실수할 가능성이 줄어듭니다.

 

 

따라서, 객체의 선언과 초기화를 같은 곳에서 하는 것이 좋습니다.

정리하자면 객체를 생성하면 선언과 초기화를 같이해주고 객체 생성자를 사용하여 객체를 생성하고 초기화(생성자 주입)하는 것이 그 이유입니다.

 

 

 

양방향 의존성


객체지향에서 중요한게 의존성인데 양방향 의존성이면 결합도가 높아져서 코드의 재활용이 불가능해집니다.


그리고 양방향성이면 두 클래스에 대한 행위만 할 수 있어서 재활용을 할 수 없고,

나중에 유지보수할 때 서로 결합도가 높아 유지보수할 때 서로 의존하고 있는 객체 전체를 바꿔야 상황이 생길 수 있습니다.

 

 

그리고 순환참조의 문제가 발생합니다.

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이 발생한다는 것을 볼 수 있습니다.

정리하자면 양방향의 의존성은 순환참조 문제가 일어날 수 있고, 결합도가 높아져 재사용성과 유지보수가 힘들어진다는 단점이 있습니다.