170827-TIL

Reading time ~2 minutes

오늘 한일

  • 체스판을 초기화 할때 말의 색,종류에 따른 생성 부분이 비효율적으로 보여 최근에 배웠던 인터페이스를 적용 했었다. 그러면서 이름 짓기 과정에서 고생을 하였다. 처음에는 어떠한 인터페이스인지 상세하게 나타내기 위해
    public interface MakePiecesStrategy {
     	// List<Piece> pieces = new ArrayList<Piece>();
     	List<Piece> makePieces(int index);
     }
    

    이런 형태로 작성을 하였다. 그 이후 해당 인터페이스를 상속 받는 클래스들을 WhitePiecesMakePiecesStrategy, BlackPawnMakePiecesStrategy 같은 식으로 만들고 작업을 진행하고 있었다. 이때까지는 큰 문제점을 못 느끼고 있었는데 제작한 인터페이스를 기존 코드에 적용하면서 문제점을 깨닫기 시작했다.

      new WhitePiecesMakePiecesStrategy()
      makePiecesStrategy.makePieces(index)
    

    대놓고 Pieces, make의 중복이 보인다. 이를 어떻게 해결할까 고민을 하다가 최종적으로는 행동을 의미하는 make는 메소드 이름으로 채용하고(참고로 create로 변경하였다) 인터페이스의 이름은 명사적 느낌만 살려 PiecesStrategy라고 변경 하였다. 그다음으로 인터페이스를 상속 받는 클래스들의 이름을

    • WhitePiecesStrategy
    • BlackPiecesStrategy
    • WhitePawnPiecesStrategy
    • BlackPawnPiecesStrategy
    • BlankPiecesStrategy

    이런식으로 변경을 하니 기존의 BlackPawnMakePiecesStrategy보다는 훨씬 깔끔해졌다. 그러나 아직 PawnPieces부분에서 마음에 들지 않는다. 거기다 생성 부분만을 담당하는 인터페이스인데 좀더 포괄적인 Pieces들의 인터페이스처럼 보인다. 그렇다고 create를 이름에 담자니 메소드 이름에서 중복성이 느껴져 현재는 저 상태로 유지를 해뒀다. 역시 이름 짓는건 쉽지가 않다. 앞으로도 이러한 고민들을 통해 정확한 의미를 전달해 줄수 있는 이름 짓기를 했으면 좋겠다.

    MakePiecesStrategy -> piecesStrategy
    WhitePiecesMakePiecesStrategy -> WhitePiecesStrategy
    makePiecesStrategy.makePieces(index) -> piecesStrategy.create(index) 조금은 간결해 졌다.

  • 사실은 위에 초기 인터페이스 선언부의 주석을 안 지워두고 올린 이유가 있다. 처음에 인터페이스를 제작 할때 상속 받는 클래스들의 객체가 생성 될때

    List< Piece > pieces = new ArrayList< Piece >()

이러한 List를 가지고 있기를 원했다. 하지만 내가 원했던건 객체 각각이 자신의 리스트를 가지고 있는 것이였는데 어찌된건지 저 리스트 하나를 모두가 공유를 하고 있는 느낌을 받았다. 그러면서 퍼뜩 떠오른게 이전 인터페이스 수업때 인터페이스에서 선언한 변수는 자동적으로 static으로 생성된다는 내용이였다. 확인을 해보니 역시나 였다. 해당 인터페이스를 상속 받는 클래스들은 저 List가 필요해서 코드의 중복을 줄이고 싶었던 건데 static으로 생성된다는 걸 깜박하고 있었다. 덕분에 인터페이스 내의 변수는 자동적으로 static으로 생성이 된다는 점은 확실히 경험하게 된거 같다.

  • 어제 샀던 “자바 웹개발 워크북”이라는 책을 읽었다. 체스 게임 작업을 어느정도 한 뒤에 저녁 늦게 읽기 시작했는데 책의 실습이 윈도우 기반으로만 되어 있어서 맥에 톰캣을 설치하는 과정에서 시간을 좀 허비하고 말았다. 처음엔 brew를 이용해서 깔고 책의 내용을 따라하다보니 뭔가 에러가 발생하여 책의 내용과 비슷한 방법으로 맥에 설치하는 글을 구글링 하여 설치 했다. 실행 과정에서도 조금 고생을 했지만 결론적으론 책의 첫번째 예제를 성공적으로 실행 하였다. 생각치 못한 부분에서 시간을 너무 써서 정작 책은 많이 못 읽었지만, 환경 세팅은 끝났으니 앞으론 걱정이 없을 것 같다.
  • 현재 사람들과 같이 공부차원에서 “코드스쿼드 도서대여 웹앱 만들기 프로젝트”를 진행 중인데 여기서 라즈베리파이를 이용한 바코드 인식 장치를 만들고 있다. 바코드 인식 관련 라이브러리인 zbar가 워낙 잘되어 있어서 현재 기본적인 동작은 구현 했고, 웹앱에 맞쳐 추가 구현을 하는 중이다.

오늘 느낀점

  • 처음 자바를 공부 할때부터 인터페이스 부분은 가장 이해하기 힘든 부분이였다. 실습을 해보는 것도 쉽지 않았고, 일반적인 기본서의 예제는 이론상으론 실용적이지만 예제의 코드 자체는 실용적이지 않아 실질적으로 어떻게 사용하는지 감이 안잡혔는데 요번주 수업과 오늘 체스게임에 적용을 하면서 어느정도는 알것 같다. 조금씩 객체지향에 대한 그림이 그려지는 것 같다.
  • 책은 많이 못 읽었지만 자바 코드를 접해서 좋았다. 요즘 들어 남의 코드를 많이 보고 싶었는데 새로운 코드를 접할 기회를 가진거 같아 책을 사길 잘했다고 생각들었다. 특히나 책을 사면 서론을 꼭 읽어보는데 좋은 책일거 같다.
  • 바코드 기기를 만들면서 현재 공부하는 java는 사용 안하고 있어서 아쉽긴 하지만 최근 공부한 post방식으로 데이터를 보내는 과정도 접하고, 생각보다 해당 기기를 만드는 시간도 별로 안들고 오랜만에 라즈베리 파이를 만지면서 재밌게 작업 한거 같다.

내일 할일

  • 체스 게임 구현(상속 파트)
  • 코드스쿼드 수업(상속)
  • 자바 웹 개발 워크북 읽기
  • 바코드 기기 구현(최대한 마무리 짓자)