ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 최근 바꾼 것들
    개발/개발노트 2020. 1. 3. 16:15

     회사에서 꾸준히 개발일을 하고 있지만 최근 개발을 하지 못한 느낌이다(?).

     지난 반년을 돌아보면 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. 함수가 할 일을 육하원칙을 준수해서 한글로 적는다.

    2. 시스템이 할 일만 남기고 나머지는 없앤다.

    3. 문장을 조각내고 불필요한 설명을 없앤다.

    4. 논리적인 문장으로 바꾼다.

    5. 1함수 1업무 규칙에 따라 함수를 결정한다.

    6. 함수 문장을 영어로 바꾼다.

    7. 이해하는 데 크게 관계없는 단어를 없앤다.

    8. 필요하다면 짧고 포괄적인 단어로 바꾼다.

    9. 띄어쓰기를 없애고 두 번째 단어부터는 첫 글자를 대문자로 바 꾼다.

       10. 함수를 사용할 때 의미상 없어도 되는 단어를 없앤다.

     

    와 같게 되는 셈이다.

    

    더 나은 개발을 위해 익히고 생각하다보면 나 역시 누군가에게 도움이 될 만한 것을 가지겠지.

    그 결실을 위해 2020년도 화이팅이다.

    댓글

Designed by Tistory.