TIL-20210224

2021. 02. 25.
  • 미션5 피드백을 반영했다. 리뷰를 늦은 시간에 하시는 것 같았는데, 그럼에도 추가적인 피드백을 빠르게 해주셔서 오늘 머지가 됐다.
  • 토끼책을 살짝 읽었다. 객체와 메세지가 아닌 클래스와 메소드에 초점을 맞추면 안된다고 한다. 객체의 책임도 중요하지만 기본적으로 객체지향은 복잡한 문제를 쉽게 만들어주는 도구로 사용해야 하는데, 객체지향 자체가 목적이 되면 안된다는 뉘앙스로 받아들여졌다. 피드백 내용 중에서도 비슷한 내용이 있었는데, 책임을 명확하게 하기 위해 도출해낸 인터페이스가 현재 기능에서는 불필요해 보인다는 것이었다. 목적에 맞게 사용하지 않으면 복잡성이 증가한다. 미래를 위한 코드는 미래의 요구사항에 적용이 되지 않을 가능성이 크고, 그렇게 되면 미래를 위한 코드까지 관리포인트에 넣거나 수정하는 작업을 거쳐야 한다. 가장 쉽고 빠른 길은 현재 상황에 꼭 필요한 부분만 구현하고 내 의도는 테스트 코드에 담는 식으로 미래에 대처하는 것이라는 게 현재 내 결론이다.
  • 미션6을 진행했다. 그런데 너무 느긋하게 한게 아닌가 싶기도 하다. 그래도 약간의 소득은 있었는데, 명령의 종류에 따라 매개변수가 달라질 경우의 처리를 이번엔 해냈다. 예전에 enum만으로 처리하려고 했을 때는 enum이 상수처럼 취급되기 때문에 상태 관리를 하지 못했었는데, 이번에는 인터페이스와 구현 클래스로 나누어 명령어 별로 서로 다른 상태를 가질 수 있도록 했다. 추가적인 if문이 발생하긴 했지만, 이는 명령어가 많아져 복잡해진다면 추후에 충분히 제거할 수 있을 것 같다. 내일은 다형성을 이용해 중복을 제거하는 부분을 할 것인데, 미션에서 제시한 방법과는 조금 다르게 갈 생각이다. 잘 됐으면 좋겠다.
  • Dong이 스트링에 대한 질문을 올렸다.

    static String PSY ="싸이의" + "강남" + "스타일";

    위의 코드를 실행하면 호출할 때마다 연산이 일어나는지, 아니면 처음에 한 번만 일어나는지에 관한 것이었다. 추가적으로 스트링 빌더에 관한 것도 있었다. 예전에 static과 생성자 등의 컴파일 결과가 어떻게 되는지 확인했었기 때문에 static 블록 안에서 초기화가 이루어질 것이라고 생각을 했다. 그리고 추가적인 StringBuilder의 호출도 바이트 코드로 볼 수 있지 않을까하고 기대했는데, StringBuilder가 나타나지 않았다. 분명 String의 연산은 StringBuilder로 최적화 된다고 들었는데, 내가 메소드를 확인하는 방법이 틀렸나 한참 찾아보고 고민해봤다. 그러다 우연히 다른 코드의 바이트 코드를 함께 봤는데, 스트링 빌더가 들어가있었다.

    일단 내가 찾은 규칙은, = 연산자로 할당 이후 본인을 포함한 추가연산을 할 때 혹은 Sysout으로 변수 없이 바로 출력을 할 때 정도로 확인을 했다. 일단 놀라웠던 것은 초기에 변수 할당에 StringBuilder가 쓰이지 않았다는 것이다. JVM의 명세를 자세히 읽어봐야 나올 것 같은데 너무 어려워서 중간에 멈췄다.

    그리고 명령어를 모르는 것도 바이트 코드를 읽는데 어려움이 었는데, 대충은 파악이 된 것 같다. 어셈블리어를 알면 도움이 좀 될 것 같은데, 머릿속에서 스택구조와 매칭이 잘 되지 않아 많이 헷갈렸다. 그래도 상수 풀에서 참조가 되면 변수 배열에 그 만큼 사이즈를 차지하게 된다는 놀라운 사실을 알게됐다. 명령어도 너무 장황해서 조금 보다가 멈췄다. 쉽게 설명해주는 사람이 있었으면 좋겠는데... 일단 쉬운 자료를 한 번 찾아보고 다시 보던지 해야겠다.

내일 할 일

  • 미션 6 마무리 및 PR
정대화
DaeHwa_Jeong@outlook.com

Powered with by Gatsby 2.0