오늘 한일

  • 이전부터 터미널에서 git push시 문제가 되던 부분을 해결 하였다. 원인은 맥os상에서 몇몇 프로그래들의 경우 계정에 대한 정보를 키체인(keychain)에 인증정보를 보관하여 사용 하게 되는데, 최초 깃허브 이용시 사용했던 아이디와 비밀번호가 키체인에 등록이 되어 있었다.
    git credential-osxkeychain erase
    host=github.com
    protocol=https
    <press return>
    

    위의 명령어를 터미널에서 수행하면 git과 관련된 정보를 지워서 다음 git push시 새로 계정과 비밀번호를 물어보게 되고 해당 정보가 새로 등록 되게 된다. 혹은 맥에서 keychain으로 검색을 하여 ‘키체인 접근’ 항목으로 가서 ‘git’ 검색 후 나온 항목에서 계정 정보를 변경 하면 된다.

  • 체스 게임을 계속 구현 하였다. 막혀 있던 각 말들(킹,퀸,폰…)의 움직임을 일부 구현 하였고 그 과정에서 자식 클래스를 나눠야 하는 이유도 깨달았다. 현재 상태에선 이동 부분만 달라서 그런지 인터페이스로만 따로 빼서 만드는게 더 낫지 않을까란 고민을 하게 되었다. 이동 방식을 인터페이스화 시키면 생기는 이점 중 하나는 폰이 다른 말의 이동 방식으로 변경 가능한 시점에서 해당 말이 가진 이동 방식만 가져오면 될 것 같기 때문이다. 단순히 주먹구구식으로 짜는건 어느 정도 가능하겠지만, 객체지향이란 걸 느껴보면서 짤려고 하다보니 더 오래 걸리는 것 같다. 객체지향적으로 구현 할 수록 느끼는건 레고블럭을 조립 하는 느낌이 나서 재밌는 것 같다.(절차지향은 물 흐르듯이 잘 흘러가는 걸 보는 재미가 있었던 것 같다.)

  • 하루에 한두 문제씩 알고리즘을 풀려고 백준 사이트를 갔다가, 코드스쿼드 인강을 듣기 위해 잠시 들려 본 적이 있는 tryhelloworld를 접속해서 level1의 문제 두개 풀어보았다. 아직은 쉬운 문제다 보니 쉽게 풀렸는데, 다른 사람들의 정답을 보니 내 코드에서 필요없는 한두 줄의 코드들이 눈에 띄었다. 간결하게 짠다고 꼭 좋은건 아니겠지만, 필요없는 부분들은 줄여 나가도록 좀더 연습 해야겠다. 참고로 사이트 이름이 programmers로 변경 된거 같다.
  • 다른 분들 로또 프로그램 제작 하는거나, 문법 공부하시는 걸 오래 도와드리다 보니 아직은 책을 보질 못했다. 그렇게 알려주는 것 또한 좋아하고 내 복습도 되니 나쁠건 없다 생각 된다. 그리고 책은 집에 가서 봐도 되니 말이다.

내일 할일

  • 예비군 날짜가 이전 내가 변경 한 날짜가 아닌 다른 날짜로 안내가 왔다. 동대에 문의 해보자.
  • 체스 게임을 웹에 올릴 수 있게 최대한 빨리 작업을 끝내보자.
  • 수업

오늘 한일

  • 상속에 대해 배웠다. 상속을 하는 이유 중 하나는 중복을 없앤다이전까지는 단순히 상속을 하면 부모에서 자식들이 공통적으로 사용할 메소드를 정의 함으로써 자식들이 편리하게 해당 기능을 쓸 수 있다는 점만 생각 했다. 근데 그걸 다르게 보면 자식들이 중복적으로 코드를 작성 함으로 생기는 코드의 중복을 없앨 수 있다는 얘기인 것이다. 추가로

    protected : 같은 패키지 내에서 접근 가능, 또한 다른 패키지에서 상속받은 클래스에서도 가능

    protected를 이론 상으로만 보고 실제 써본 적이 적어서 까먹고 있었던 접근제어자 였는데 이제는 모든 접근제어자들을 한번씩은 제대로 써보면서 어떤 변수, 메소드에 어떤 접근제어자를 지정 해야할 지 조금씩은 감이 오는 것 같다.

  • super 해당 키워드는 자식 클래스가 부모에 접근할때 쓰인다. super.xxx, super() 등등 또한
      자식(Type xx){
        //super();
        this.xx = xx;
      }
    
    

    이런 식의 코드가 있으면 주석이 없다 해도 자식이 생성될때 super()가 내부적으로 실행 된다. 즉, 부모의 생성자를 먼저 호출 한 다음 자신의 생성자의 내용을 수행한다. 또한 super()가 부모 인스턴스를 생성하는게 아니라 부모의 상태값들을(부모의 모든 기능을 쓰기 위해) 초기화 시킨다음 자식 자신을 만든다. 즉, 자식이 생성될려면 부모를 먼저 초기화 시킨다음 자신을 초기화 시키라고 강제화를 시키라는 규약 같은 것이다.

  • 바코드 기기의 구현이 어느정도 마무리 되어 이제는 다른 사람들의 작업이 끝난 다음 추가 작업을 하면 될 것 같다.
  • 카카오 공개채용 문제를 일부 풀어봤는데, 풀면서 재미도 느꼈지만 알고리즘 공부가 부족했던 걸 느꼈다. 틈틈히 백준 등 알고리즘 문제를 풀면서 공부를 해봐야겠다.
  • 체스 게임 구현은 부모, 자식 클래스를 어떻게 나눌까 고민 하는데 시간을 많이 쏟느라, 정작 코드 작성은 많이 못했다.

오늘 느낀점

  • 일단 TIL작성을 매일 남아서 공부를 한 후 집에 와서 하다보니 12시 이전에 마무리 짓지 못하는 것 같다. 내일 부터는 10시 쯤이면 TIL작업을 일정 부분 한다음 마무리 부분을 추가해야 할 것 같다.
  • 상속!! 저번의 인터페이스도 그랬지만, 상속도 자바의 기본서로 공부하면서 이론적인 사용법이야 알았다. 그렇지만 사용시 생기는 효용성이 크게 와닿지 않았고, 실질적으로 어떻게 써야하는지는 잘 몰랐는데 이제는 조금 알 것 같다. 하지만 아는 것과 할 줄 아는건 별개이니 앞으로 상속 및 인터페이스가 필요한 부분을 찾아가며 의도적으로 연습을 해야 할 것 같다. 특히나 상속과 인터페이스를 배우면서 객체지향의 매력을 다시금 느꼈다. 객체지향.. 어렵지만 참 매력적인 것 같다.
  • 알고리즘!! 일단은 간단한 문제부터 하루에 한,두개씩 풀어 나가야 할 것 같다. 알고리즘을 풀면서 패스하는 걸 보면서 단위 테스트가 떠올랐는데 단위 테스트를 활용해서 풀어보는 것도 재밌을 것 같다.
  • 책을 아직은 못 읽었다. 일단은 내가 보고 싶어서 두시간 정도 읽다 잘 생각이지만, 수업이 있는 월,수,금은 책 보다는 그날 배운 부분 공부 쪽에 비중을 더 두는게 나을 것 같다.

내일 할일

  • 체스 게임(상속 부분 지속적으로 구현)
  • 웹 개발 워크북 일기
  • 알고리즘 공부 할 사이트 찾기

오늘 한일

  • 체스판을 초기화 할때 말의 색,종류에 따른 생성 부분이 비효율적으로 보여 최근에 배웠던 인터페이스를 적용 했었다. 그러면서 이름 짓기 과정에서 고생을 하였다. 처음에는 어떠한 인터페이스인지 상세하게 나타내기 위해
    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방식으로 데이터를 보내는 과정도 접하고, 생각보다 해당 기기를 만드는 시간도 별로 안들고 오랜만에 라즈베리 파이를 만지면서 재밌게 작업 한거 같다.

내일 할일

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

오늘 한일

  • 체스게임 구현하기의 ‘인터페이스와 다형성’ 파트까지 완성 하고 추가로 상속파트의 ‘말의 이동’까지 진행 하였다.
  • 드디어 매일 그날의 기록을 남기는 것을 시작하였다. 마크다운을 쓰는건 이번이 두번째라 아직은 쉽지 않은데 빨리 익숙해졌으면 좋겠다.  - 10년 넘게 쓰던 fthr56 이라는 아이디를 버리고, hue9010 이라는 아이디를 만들었다. 아무 의미 없는 알파벳의 나열이라 이전부터 남들한테 내 이메일 및 아이디를 알려줄때 발음이 쉽지않아 서로 불편 했었다. hue는 예전에 ‘Hak sUn leE’ 내 이름에서 따온 영어 이름이다. 만들고보니 우연찮게 빛깔, 색깔 등의 의미를 가지고 있는 단어기도 해서 상당히 마음에 드는 영어 이름이다.
  • 깃허브 아이디도 새로 가입하면서 현재 작업하고 있던 체스게임도 새로운 아이디에 푸쉬하게 되었다. 그러면서 작성자가 이전 아이디인 fthr56과 현재 아이디인 hue9010 이렇게 두개가 있다보니 저장소에 올리느라 고생을 했는데 첫 주때 들었던 깃 강의와 구글링을 통해 해결했다.
  • 교보문고를 들려 ‘자바 웹 개발 워크북’을 구매 하였다. 점점 책만 늘어나고 있는 느낌이다. 하지만, 모두 보고 싶어 산 책들이니 틈틈히 다 읽어 나가야겠다.

오늘 느낀점

  • 체스게임을 구현하면서 Collections.sort()를 사용하여 점수에 따른 말들을 정렬하기 위해 Comparable 인터페이스를 사용하였다.(수요일 수업때 해본 경험이 많은 도움이 되었다.) 그러면서 자바 혹은 객체지향에 대해 한번 더 생각 할 수 있어서 좋은 경험이였던것 같다. 오늘은 해냈지만 언젠가는 같은 문제로 헤맬수도 있어 더 상세한 내용을 기록 할려고 했다. 그러나 해당 부분은 따로 JAVA폴더를 만들어 관리하는게 좋겠다.
  • 아직은 이렇게 기록을 남기는게 쉽지 않아 초코몽키님을 참고하고 있다. 하지만 매일 매일 글을 쓰면서 나만의 스타일을 찾아 나가야겠다.
  • 최근에는 수업 과제인 체스게임을 구현하는 것만 하고 있었던 것 같다. 체스만 구현하다 보면 어느 시점 부터는 다른 것도 해야 한다는 생각이 들어 집중도가 떨어지는 경향이 있었는데, 효율적인 공부를 위해 시간 분배를 통해 작업 해야겠다.
    • 이전에 포비가 알려줘서 작성하고 있던 todo리스트(하고싶은 일들)처럼 해야 하는 일들에도 가중치를 적용 하여 시간분배를 해야겠다.
    • 깃허브 및 지킬도 공부를 해야하는데 이건 평일 말고 주말에 조금씩 하도록 해야겠다.

내일 할일

  • 체스게임 구현 하기
  • 자바 웹 개발 워크북 읽기
  • 깃, 깃허브, 지킬 알아보기
  • 이전 아이디에 있던 코드들 일부 가저오기

Here be a sample post with a custom background image. To utilize this “feature” just add the following YAML to a post’s front matter.

image:
  background: filename.png

This little bit of YAML makes the assumption that your background image asset is in the /images folder. If you place it somewhere else or are hotlinking from the web, just include the full http(s):// URL. Either way you should have a background image that is tiled.

If you want to set a background image for the entire site just add background: filename.png to your _config.yml and BOOM — background images on every page!

Background images from Subtle Patterns (Subtle Patterns) / CC BY-SA 3.0