-
회사에서 꾸준히 개발일을 하고 있지만 최근 개발을 하지 못한 느낌이다(?).
지난 반년을 돌아보면 elasticsarch 서버 구축, 사용, elk 환경 세팅 사용, 딥러닝 keras lstm을 활용한 가격예측이고 새로운 것들이다보니
익숙하지도, 잘 안다는 자신이 없다. 메모를 중간중간 하긴 했지만 개인프로젝트를 통해 정리해 볼 필요가 있을 것 같다.
각설하고, 최근에야 다시 spring boot 환경에서 간단한 프로그램을 만들었는데 알면서도 지나쳤던 것들을 잡아야겠단 생각이 들어
조금씩이나마 바꾸는 코딩습관들을 적어본다.
1.DI 에서 주로
단순하게
@Autowired
private A a;
와 같은 필드주입이나
private A a;
@Autowired setA(A a){
this.a = a
}
와 괕이 수정자를 통한 주입을 써왔다.
생성자를 통한 주입을 써야한다는 글을 2018년 말부터 봤지만 난 수정자를통한 주입이 생성자를 통한 방법인 줄 알았고,
다름을 알았을때도 동작엔 이상 없어서 그냥 사용했었다.
하지만 아직도 부끄러운 코딩실력을 조금이라도 극복하고자 바꾸려 한다.
생성자를 통한 주입으로는
예를들어 컨트롤러에서 서비스를 호출한다면
public class Cotroller{
private Service service;
//@Autowired(스프링 4.3이상부터는 생략이 가능하다고 하니 지금은 생략해도 문제없다)
public Controller(Service service){
this,service = service;
}
}
와 같이 하면된다.
이와 관련하여 앞으로 코딩할 때 OOP를 더 염두하기로 했다.
2.LocalDate, LocalDateTime
코딩을 본격적으로 시작을 한 때가 자바 1.8이 나온지 수년이 지났음에도
첫 직장에서는 1.8을 썼으나 작업은 1.5~1.6으로 설계된 기존 코드를 벗어나지 못했다.
따라서 시간 입력은 Date와 Calendar를 사용했었다. 최근에서야 LocalDate, LocalTime, LocalDateTime
을 알고 사용하게 되었다.
간단한 사용법은 아래와 같다.
LocalDate currentDate = LocalDate.now(); // 컴퓨터의 현재 날짜 정보 2018-07-26
LocalDate myDate = LocalDate.of(int year, int month, int datOfMonth); //년,월,일
getYear();
getMonth(); (Month 열거값나옴 JANUARY, FEBRUARY)
getMonthValue(); 월(1,2,3,...)
getDayOfYear(); 년의 몇 번째 일
getDayOfMonth(); 월의 몇번째 일
getDateOfWeek();요일(MONDAY, TUESDAY,...)
isLeapYear(); 윤년여부
LocalTime currentTime = LocalTime.now(); // 컴퓨터의 현재 시간 정보. 결과 : 16:24:02.408
LocalTime targetTime = LocalTime.of(int hour, int minute, int second, int nanoOfSecond);
int getHour() 시간
int getMinute() 분
int getSecond() 초
int getNano() 나노초
LocalDateTime 시간,날짜 동시에 필요할 때 사용.
LocalDateTime currentDateTime = LocalDateTime.now(); // 컴퓨터의 현재 날짜와 시간 정보. 결과 : 2018-07-26T16:34:24.757
LocalDateTime targetDateTime = LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond);
ZonedDateTime utcDateTime = ZonedDateTime.now(ZoneId.of("UTC"));
ZonedDateTime seoulDateTime = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));
3.객체, 메소드 이름 짓기
이름 짓는 것을 정말 어렵게 생각하고 많은 생각을 했지만 정리가 잘 되지 않았다. 따라서 소스를 보면 doService,() getAPI()와 같이 간단하게 표현된 것이 많고 비슷한 기능의 비슷한 이름으로 인해 헷갈리는 경우가 많다. 최근 개발자의 글쓰기를 정독하며 강조하는 부분을 지키려 노력한다. 따라서 기능을 상세하게 생각한 후 이를 조각낸 후 불필요한 부분을 없애며 다듬는다. 이후 한글을 영어로 바꾸고 단어를 정리하는방식이다. 정리하자면
-
함수가 할 일을 육하원칙을 준수해서 한글로 적는다.
-
시스템이 할 일만 남기고 나머지는 없앤다.
-
문장을 조각내고 불필요한 설명을 없앤다.
-
논리적인 문장으로 바꾼다.
-
1함수 1업무 규칙에 따라 함수를 결정한다.
-
함수 문장을 영어로 바꾼다.
-
이해하는 데 크게 관계없는 단어를 없앤다.
-
필요하다면 짧고 포괄적인 단어로 바꾼다.
-
띄어쓰기를 없애고 두 번째 단어부터는 첫 글자를 대문자로 바 꾼다.
10. 함수를 사용할 때 의미상 없어도 되는 단어를 없앤다.
와 같게 되는 셈이다.
더 나은 개발을 위해 익히고 생각하다보면 나 역시 누군가에게 도움이 될 만한 것을 가지겠지.
그 결실을 위해 2020년도 화이팅이다.
'개발 > 개발노트' 카테고리의 다른 글
면접 질문 답변으로 떠올리지 못했던 hash table에 대해 (0) 2021.08.08 typeOrm에서 entity 의 필드값은 왜 private가 아닐까? (캡슐화x) (0) 2021.06.24 새로운 프로젝트를 접하며 (0) 2021.06.16 gradle build시 jdk version 설정 (0) 2020.06.29 맥 사용포트 확인 (0) 2020.03.12 댓글
-