본문 바로가기
회고

210519_TIL

코동이 2021. 5. 20.

1. Facts(사실, 객관)

- 클린코드 4장, 5장, 6장 읽기

- 클린코드 기반 회사 StringUtil 리팩토링 한번 더 하기

- ObjectMapper 사용법 강의

- 어노테이션 만들기 강의

2. Feelings(느낌, 주관)

- 휴일을 맞이하여 환기할 겸 클린코드 책을 읽었습니다. 4장 주석, 5장 들여쓰기, 6장 객체와 자료구조를 읽으면서 이전에 훓었던 내용을 복습하고 또 깊이 인상을 받았습니다. 이 책도 주기적으로 열어볼 때마다 새롭게 다가오고 선명해집니다. 단순히 읽고 끝내기는 아쉬워서 회사 프로젝트에 적용해보기로 했는데, 정말 놀랍게도 4장과 5장은 실제 적용해보면서 공부할 부분이 많았습니다. 6장의 경우 객체와 자료구조를 구분하여 새롭게 개선하는 것은 당장은 쉽지 않고 디미터 법칙에 대해서 좀 더 공부 필요성을 느꼈습니다.

 

- ObjectMapper 사용법에 대한 강의를 들었습니다. 코드숨 1주차 때 사용한 경험을 바탕으로 한층 깊은 이해가 가능했으면 그럼에도 다시 사용해보고 실습하는 과정이 필요합니다.

 

- 커스텀 어노테이션을 만드는 것은 신선했습니다. 이전에 bookclub 프로젝트에서 계정이 계속 로그인 되어있는지 확인하기 위해 커스텀 어노테이션을 만든 경험을 바탕으로 이번에 개념적인 부분과 실제 유효성 검사를 통해 메세지를 만드는 것까지 알 수 있었습니다. 역시나 강의만 보았으므로 실습하는 과정이 필요합니다.

 

- 요즈음, 강의를 듣던 책을 보던 이전과는 비교할 수 없을 정도로 빠른 습득이 느껴집니다. 매일매일 단순히 내 머리속에 넣는 것이 아니라, 직접 실습하고 TIL을 작성하고 블로그에 정리하니 좀 더 논리적으로 이해하고 장기기억에 저장되지 않나 생각합니다. 이렇게 계속 인출 기반의 학습을 위해서 노력하려고 합니다.

3. Findings (배운 점)

* 클린 코드 후기

*4장 주석

- 가장 좋은 것은 주석이 없이 코드로만 이해하도록 짜는 것이다.

- 실행결과 경고 주석, 간과할 수 있는 정보를 주는 주석, 이해를 돕는 주석은 포함한다.

- 소스 수정 이력 주석, 중복 설명 주석, 필요 이상의 상세한 주석 등은 사용하지 않는다.

- 주석처리한 코드는 과감히 지우거나 이유를 명시한다.

 

*5장 들여쓰기

- 메서드 이름이 같고, 매개변수가 다른 비슷한 기능의 메서드는 같이 묶는다

- 메서드 내려쓰기를 통해 자연스럽게 코드 흐름이 위에서 아래로 읽히도록 한다.

- 변수 선언은 보통 변수가 쓰이기 직전에 선언하는 것이 좋지만, 클래스 변수는 처음에 선언하는 것이 좋다.

-  가로는 100, 120줄 정도를 제한으로 하며 등식 전후 공백, 괄호 전후 공백 등의 가독성을 유의한다.

 

*6장 객체와 자료구조

- 자료구조는 메서드 추가에 용이하고, 객체는 새로운 클래스 추가에 용이하다

- 객체라면 직접적으로 해당 필드에 접근해서는 안되고 꼭 객체에게 부탁하는 형태로 메서드를 이용한다.

- 자료구조의 필드에 접근하는 것은 디미터 법칙을 의식하지 않아도 된다.

 

* ObjectMapper 사용법

- gradle에 먼저 data-bind를 추가할 것

 

1. Object -> String ( getter 정의 필요 )

String json = mapper.writeValueAsString(user);

 

2. String -> Object ( 생성자 정의 필요 )

User user = mapper.readValue(json, User.class);

 

3. ObjectMapper로 요소에 접근하고 수정하기

JsonNode jsonNode = mapper.readTree(user);

ObjectNode objectNode = (ObjectNode) jsonNode;

String name = objectNode.get("name);

objectNode.put("name", "paik");

 

4. 혹시, 자바에서 camel case를 snake case로 바꾸고 싶다면 @JsonProperty를 이용한다

...
@JsonProperty("car_name")
private String carName;
...

---

{
...
"car_name" : "Q5"
...
}

 

*커스텀 어노테이션 만들기

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : account")
public @interface currentUser {
}

 이전에 bookclub 프로젝트를 진행하면서, 현재 로그인 되어있는지 아닌지 확인하는 용도로 만든 어노테이션입니다.

@Retention은 언제까지 해당 어노테이션을 가지고 있을지 정하는 것으로, SOURCE, CLASS, RUNTIME이 있다.

@Target은 어디에 해당 어노테이션을 적용할지 정하는 것으로, PARAMETER 이외에 METHOD, FIELD, TYPE, CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE, PACKAGE, TYPE_PARAMETER 등이 있습니다.

 

해당 내용은 이후에 좀 더 자세히 글로 작성하면서 공부할 계획입니다.

 

4. Affirmation (자기 선언)

- 나는 책에서 읽은 내용을 적극적으로 적용하여 내것으로 만드는 개발자다.

- 나는 단순히 지식을 머리에 넣는 것이 아니라. 실제 프로젝트에 어떻게 적용할지 실용적으로 고민하는 개발자다.

5. Future Action ("구체적" 행동 계획)

- 커스텀 어노테이션 만들어보기

- html 화면 만들기

반응형

'회고' 카테고리의 다른 글

210521_TIL  (0) 2021.05.22
210520_TIL  (0) 2021.05.21
210518_TIL  (0) 2021.05.19
210517_TIL  (0) 2021.05.18
210515_TIL  (0) 2021.05.15