ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1주차 리뷰
    우아한 테크코스/테크코스 2020. 2. 8. 16:51
    반응형

    for문 비교자 신경쓰기

     for문 비교자에 계산을 해주는(?) 식이 들어가면 for문 돌 때마다 해당 부분이 실행되므로, 변동이 없는 값이라면 앞에 변수로 따로 빼주기!

     아래와 같으면, 1번 반복일 때는 위가 나아보일 수 있지만, 10번이라면? 1000번이라면? list.size()를 반복 횟수만큼 실행해야한다! 유의하기 

    // 이것보다는
    for(int i = 0; i < list.size(); i++) {
    }
    
    // 이렇게
    int listSize = list.size();
    for(int i = 0; i < listSize(); i++) {
    }

    enum을 활용하기

     특정한 상수를 Class의 static 변수로 받는 것보다 enum을 활용하면 관리하기가 더 용이하고, 코드도 짧아지고 가독성도 더 좋아지지 않을까?

    Map vs if-else

     Map으로 관리하는 것이 if-else로 관리하는 것 보다 좋다는 생각이시라고 하비 리뷰어님이 코멘트 주셨다.

     이유를 생각해보자면 추측컨데, Map으로 관리하면, Case가 많아지는 경우 if-else보다 더 가독성이 좋은 것 같다. 아무래도 if-else는 한 분기에 세 줄정도 나오고, Map add의 경우엔 한 줄이니까? 그리고 Map인 경우엔 Collection API들을 이용할 수도 있다. 재가공성인 면에서도 더 좋은 것 같고, Map의 경우 일급 컬렉션으로 포장도 가능하니까? 정도인가.. 나중에 또 생각해보자.

    try-catch Test

     try catch보다는 테스트 도구에서 지원하는 API를 이용해 보라는 조언을 들었다! https://www.baeldung.com/junit-assert-exception

    궁금한 것

    반복해서 생성하는 원시 객체도 포장을 해주어야 하는 걸까?

     원시 객체를 포장했을 때의 장점은 어느 정도 이해가 되었는데, 반복해서 생성하는 (예를 들자면 for문에서 생성하는) 원시 객체도 포장을 해주는 것이 좋은 걸까?

     예외 검증을 해야하는데, 메서드를 따로 두는게 좋은지, 아니면 원시 객체로 포장하여 예외 검증이 성공한 것들만 생성해야하는 건지를 잘 모르겠다.

     원시 객체를 쓴다면, 객체가 계속 생성되니까 메모리를 많이 잡아먹진 않으려나, 잡아먹긴 하겠지?

    클래스와 메서드를 어느 정도까지 쪼개야하며, 패키지는 어떻게 구성해야 하는 걸까?

     아직 이 부분이 조금 어렵다, 연관된 것들만 같은 클래스에 넣으려하는데, 문제는 다 연관된 것 같아 보인다. 그리고 클래스를 너무 많이 나누면 위와 같은 부분처럼 메모리만 많이 쓰는게 아닌가? 패키지는.. domain / view 이런식으로 나누던데, 어제도 조금 보고 갔는데 그 부분을 좀 더 자세히 봐야 할 것 같다. 아직 감이 오지 않음 :(

     => 메서드의 경우엔, 한 메서드가 한 일만 하도록 짜보자

    Static 변수나 메서드를 자주 쓰는 건 좋은 것일까?

     Static 변수나 메서드의 경우에는 프로그램이 시작할 때 같이 메모리에 올라가는 것으로 아는데, 그럼 static을 많이 쓰면 프로그램이 무거운게 아닌가? 어느 호출 빈도정도까지를 Static으로 지정하는게 좋은걸까? 어느 기점이 인스턴스를 많이 생성하는 것보다 Static으로 선언했을 때 비용이 더 낮아지는 비용 분기점인걸까. 이것도 잘 모르겠다.

     => 인스턴스 변수가 없다면 static으로 선언하는 것으로

    예외 처리는 세분화하는 것이 좋을까? 아니면 뭉뚱그려 크게 묶는게 좋을까?

     try-catch문을 쓰면서, 예외처리에 대한 고민을 많이 했는데, 예외처리를 세분화해놓는 것이 좋을지 아니면 그냥 크게 묶는 것이 좋을지 잘 모르겠다. 세세하게 예외를 처리하면 코드가 길어지고, 필요와 불필요의 경계에 놓이기도 하고, 시간도 조금 더 오래 걸린다. 뭉뚱그려 크게 묶으면, 어디서 예외가 발생하는지 짐작하기가 쉽진 않다. 이 경계선도 잘 모르겠다.

     => 세분화하면 좋지만, 중복되지 않도록

    알아봐야 할 것

     Map과 List의 처리 속도

     하비 리뷰어님이 Map은 처리속도가 O(1)이라고 하셨고, List는 O(n)이라고 하셨는데 크게 와닫지 않아서.. 찾아보았다.

     Map의 HashMap 또는 HashTable의 경우엔 이론상으로 데이터를 검색하는데 O(1)이 소요된다고 한다. 데이터 항목이 적든 많든 일정 시간이 소요된다는 의미인 것 같다.

     List의 경우엔, 정렬이 되어있는 것과 정렬이 되어있지 않은 것의 차이가 있을 것 같은데(sort), 정렬 유무에 따라 검색 속도의 차이가 꽤 발생하는 것으로 보인다. 그렇지만 정렬을 하는 데도 시간이 걸리니까.. 이건 고려해봐야하는 것. 한 번 검색할거면 그냥 검색하고, 여러 번 검색할거면 정렬하고 검색하는 게 좋을 것 같은데, 데이터가 또 추가되긴 할 테니까. 그럼 또 정렬을 해야하고..(고민)

     조금 더 공부를 해봐야 할 것 같다.

     나중에 읽어볼 블로그 : LINK

    반응형

    '우아한 테크코스 > 테크코스' 카테고리의 다른 글

    2주차 리뷰  (0) 2020.02.15
    정규표현식(Regular expression)  (0) 2020.02.08
    [Java] 일급 컬렉션을 알아보자!  (0) 2020.02.06
    [IntelliJ] MAC 단축키 등 알아두기!  (0) 2020.02.06
    [Java] JUnit  (0) 2020.02.05

    댓글

Designed by Tistory.