2탄을 적어보잣!
개발하신 OOO 프로젝트에 대해 그림으로 설명해주실 수 있을까요?
- 각자 그림을 그려가면서 연습해보자. hackersrank등에 화이트보드 등으로 실제 컴퓨터로 화이트보드로 면접 처럼 연습해보는 것이 좋을 것 같다
Springboot를 사용한 이유가 뭔가요?
- 일단 spring을 사용하게 되면 datasource나 entity manager등 설정에 많은 시간이 소요가 됩니다. 하지만 springboot는 내부 웹컨테이너 등 이러한 환경등을 설정하는데 매우 간편하기 때문에 springboot를 사용하게 되었습니다. 또한 springboot는 springboot starter를 제공하여 일반적으로 사용되는 로깅이나 하이버네트, springboot MVC등을 버전을 맞춰서 제공하기 때문에 편의성이 높습니다. 즉 생산성을 높이기 위해 사용하였습니다.
JUnit이란 뭔가요?
- JUnit이란 java의 단위테스트를 위한 프레임워크를 말합니다.
객체의 인스턴스를 생성하여 로직 수행후 결과값이 기대값과 일치하는지 비교하거나 파일이나 네트워크 상의 연결이나 데이터베이스 연동 테스트 등을 수행할 수 있습니다
assert관련 메소드를 제공하는데 실제 Junit에서 테스트시 참거짓 혹은 null 혹은 같은 객체인지등을 검사하는 메소드를 제공합니다.
기본적으로는 Test 어노테이션을 제공해서 테스트할 메소드를 지정하구요. Before나 after를 지정해서 테스트 전후 실행될 동작들을 지정하기도 합니다
JUnit4와 JUnit5의 차이점은?
1) 지원환경의 변화
java8, 인텔리와 이클립스 IDE 일정 버전 이상, 코틀린에 대한 지원
2) 구조적 변화
JUnit4 모듈 1개 -> JUnit5에서는 JUnit Platform + JUnit Jupiter + JUnit Vintage 3가지 서브 모듈로 변경
JUnit Platform : Test를 케이스 발견, 실행, 결과보고를 해주는 컨텍스트이며, 실제 테스트 케이스에 대한 구현체는 TestEngine 인터페이스에 구현
JUnit Jupiter : TestEngine 인터페이스를 구현한 구현체죠 Jupiter API 라는 형태로 이제 제공이 됩니다
JUnit Vintage : JUnit4를 지원하기 위한 엔진
3) 어노테이션의 변화
테스트하는 관점에서 보면 사용하는데 많은 변화가 있는 것은 아니고 어노테이션이 좀 더 명확해졌다는 점입니다
기존에는 4버전에서는 Before After 같은 식의 어노테이션을 썼다면 5버전에서는 BeforeAll, BeforeEach 등 테스트 케이스 전후마다 실행할 것인지 아니면 특정 테스트케이스의 전후에 실행할 것인지 어노테이션이 명확해짐
JAVA8에서 변화한점은?
크게 4가지가 업데이트 되었습니다
첫번쨰, 람다 표현식(lambda expression)이 추가되어 함수형 프로그래밍이 가능해졌습니다
두번쨰로, 스트림 API(stream API)가 추가되어 데이터의 추상화가 가능해졌습니다
셋째, java.time 패키지가 추가되었는데 Joda-Time을 이용한 새로운 날짜와 시간 API를 말합니다.
마지막으로 나즈혼(Nashorn)이라는 자바스크립트의 새로운 엔진이 추가되었습니다
4가지에 대해서 각각 설명해주시겠어요?
일단 람다표현식은 간단히 말해 메소드를 하나의 식으로 표현한 것입니다. 이름없이 실행할 수 있는 함수 표현식을 의미하며, 이름이 없기 때문에 익명함수라고도 부릅니다
예를들어 자바에서 Thread를 만들때 Runnable()객체를 할당하고 run 메소드를 실행하는데 이를 축약하여 ()로 나타낼 수 있습니다. 불필요한 코드를 줄이고, 가독성을 높이기 위해서 사용하는 경우가 많습니다
둘째로 스트림 API의 경우 자바에서 데이터 저장시 배열이나 컬렉션을 사용하는데 이에 접근하기 위해서는 반복문을 사용해야 했고 데이터마다 접근하는 방식도 제각각이었습니다. 이를 극복하기 위해 데이터를 추상화하여 읽고 쓰기 위한 공통된 방법으로 나타난 것이 스트림 API입니다.
셋째로 java.time 패키지는 사용이 권장되지 않는 java 1.0에서의 Date와 java 1.1에서의 Calendar를 대체하기 위해 만들어진 패키지 입니다. Calendar 의 경우 윤초에 대한 지원이 없는점, 불변객체가 아니라 수정가능한 점, 월이 0~11까지 표기되는 3가지 단점이 있었는데 이러한 단점들을 모두 보완한 패키지가 java.time 패키지 입니다.
마지막으로 나즈혼 엔진의 경우 기존 JAVA7까지는 모질라의 리노 자바스크립트 엔진을 사용하였는데 java의 최신 개선사항 등을 반영하지 못해 성능이나 메모리상으로 크게 향상된 나즈혼 엔진이 업데이트 되었습니다.