본문 바로가기

About me

N Tech Service 인턴십 2주차 회고

이번 한주는 시간이 참 부족한 한 주였다. Java를 제대로 공부해 본 적이 없다 보니 관련해서 학습해야 할 내용이 많았다. 자료를 찾고, 해당 내용을 익히느라 시간을 많이 소비했다. 그렇다 보니 다른 사람에 비해 속도는 많이 나지 않았다. 하지만 많은 자료를 찾아보고 정리하고 공유하면서 배운 게 많은 한 주였다.

아쉬운 점


자동생성, 외부참조 코드의 의미 파악 부족

이번 한 주는 내가 작성한 코드의 의미는 최대한 파악하면서 보냈다. 하지만 간과한 부분이 있었다. 프로젝트생성시 자동생성 코드와 외부 코드를 참조할때 의미를 파악하지 않고 그대로 붙여넣었다. 이로 인해 불필요한 디펜던시를 사용하고 있었고, 사용하지 않는 인스턴스를 생성했다.

내가 직접 작성하지 않은 코드라도 의미를 파악하고 남에게 설명 할 수 있도록 하자.

기초적인 내용 지식 부족

기초적인 내용에 대한 지식이 부족했다. wrapper class, instance, 예외처리 등 직접 사용하고 있었지만 정확한 의미를 모르는 상태에서 사용 하고 있었다.

학습하고 정리하는 시간을 좀 더 투자하자.

실제 테스트가 아닌 추측에 의한 코드 작성

예외 처리를 하면서 실제 테스트를 하지 않고 '이럴 것이다'라는 추측으로 코드를 작성했다. NullPointException이 발생할 것이라 생각했지만, 실제로는 NumberFormatException이 발생했다.

추측으로 코드를 작성하지 말고 직접 테스트를 하고 작성하자. 나아가서 테스트 코드 학습해서 작성해보면 좋을 것 같다.

퇴근 후 시간활용 부족

프로젝트 수행뿐만 아니라 강의 수강, 내용 정리를 모두 하다 보니 근무시간이 턱없이 부족하다. 항상 퇴근하면서는 집 가서 이거이거 하고 자야지 하면서도 집만 가면 늘어진다.

다음 주는 적어도 하나라도 해결하고 자도록 해보자.

배운 점


객체, 클래스, 인스턴스

먼저 분류(classification)와 인스턴스화(instantiation)을 알아야 한다. 분류(classification)란 실재하는 객체를 공통적인 속성을 공유하는 추상적인 개념으로 분류하는것을 말한다. 인스턴스화(instantiation)란 반대로 추상적인 범주나 개념으로 부터 실재하는 객체를 만드는 과정을 의미한다.

따라서 클래스(추상적인 개념)의 인스턴스가 객체 라고 할 수있다.

클래스를 인스턴스화 한 결과물이 객체라고 보면 된다.

참조링크

디자인 패턴

디자인 패턴 중 싱글톤 패턴과 생성자 패턴에 대해서 학습했다.

 

싱글톤 패턴

싱글톤 패턴은 주로 인스턴스가 복수로 생성되는걸 막기 위해서 사용한다.

싱글톤을 구현하는 방법에는 많은 방법이 있지만 주로 Lazy holder방식을 사용한다.

public class Singleton {
	private Singleton(){}
	
	private static class LazyHolder{
		private static final Singleton INSTANCE = new Singleton();
	}

	public static Singleton getInstance(){
		return LazyHolder.INSTANCE;
	}
}

장점으로는 멀티쓰레드에 정상적으로 동작하면서도 synchronized 키워드가 필요 없다는 것이다. getInstance()를 호출 하면 holder클래스가 로딩되며 초기화가 진행 되는데, 클래스를 로딩하고 초기화 하는 시점은 thread-safe를 보장한다. synchronized 키워드는 비용이 크기 때문에 호출이 잦으면 성능이 저하 될 수있다.

 

생성자 패턴

생성자 패턴에는 점층적 생성자 패턴, 자바 빈 패턴 등이 있다.

생성자 패턴은 오버로딩을 이용해서 생성자를 점층적으로 작성한다. 객체를 한번에 생성 할 수 있지만, 코드 수정이 어렵고 인자가 많아 질 수록 가독성이 떨어진다.

자바 빈 패턴은 setter 메소드를 이용하는 방식이다. 각 인자의 의미를 파악하기 쉽고, 생성자를 많이 만들 필요가 없지만, immutable한 객체를 만들 수가 없다는 단점이 있다.

빌더 패턴은 inner클래스를 사용한다. 각 인자가 어떤것을 의미하는지 알기 쉽고, setter를 사용하지 않기 때문에 immutable 한 객체를 만들수 있다. 하지만 코드가 길고 복잡하다는 단점이 있다.

코드리뷰 내용

JAVA

  • Class 주석에 author은 삭제하도록 하자. 현재는 여러명이서 작성하는 경우가 많다. Git에서 누가 작성한지 알 수 있다.
  • 너무 작은부분을 메소드로 분리할 필요는 없다. 해당 메소드 이름을 validate를 사용했는데 내용은 exception 이라 의미가 맞지 않는것 같다.
  • 이번 프로젝트 외에 logger를 사용할 땐 print, printStackTrace 사용하지 말자.
  • list.add() 부분에서 null 인 경우도 add해주고 있다. null일때, 아닐때를 고려하도록 하자.
  • DTO의 생성 날짜 type을 String 대신에 DateType 을 사용하도록 하자.
  • 생성자 오버로딩 외에도 다른 디자인 패턴이 있다. 다른 디자인 패턴을 알아보고 장점과 단점을 알아보자.
    • 필수값은 생성자, 나머지 값은 set 을 사용하기도 한다.
  • DAO를 싱글톤으로 개선할 필요가 있어보인다. 매번 생성자를 실행 할 필요는 없다.
    • 싱글톤 방식을 이용했을때 동시에 요청이 들어오면 서로 다른 인스턴스를 내려 줄 수 있다. 방법 찾아보자.
  • 페이지 로딩시 데이터를 불러올 때 전체데이터 또는 섹션 별 데이터를 불러 올 수 있다. DB접근 횟수 등 차이나는 부분이 있다. 데이터 크기에 따라, 상황에 맞게 적용하도록 하자.
  • try~catch의 catch 에 "or" 사용 가능하다.
    • NullPointerException과 NumberFormatException 같이 검증하면 좋을것 같다.
  • HTTP status code는 enum으로 생성하지 말고 java 에서 제공하는걸 사용하면 된다.

HTTP

HTML/CSS

  • 문서 하위에 더이상 요소가 없어도 float 해제 옵션을 추가하면 좋을것 같다.
  • DOM조작도 id 대신 data 속성 사용하는게 좋을 것 같다.

JavaScript

  • List의 부모요소에 list라는 이름이 있으니 의미가 맞지 않는것 같다.
  • index를 따로 사용하지 않는다면 for 대신 forEach를 쓰는게 좋을것 같다.
    • JSTL 공백부분을 텍스트 노드판단해서 개선하면 좋을듯 하다.

기타

  • 예외처리는 클라이언트, 서버 양쪽 다 해주도록 하자.

'About me' 카테고리의 다른 글

N Tech Service 인턴십 3,4주차 회고  (0) 2020.11.22
N Tech Service 인턴십 1주차 회고  (0) 2020.11.22
블로그 다시 시작하기  (0) 2019.05.27