반응형

JAVA/JAVA | Spring 학습기록 72

[호호 스터디] 재사용: 상속보단 조립_ 객체지향과 디자인 패턴 Chapter 4

호호 스터디에서 Chapter 4: 재사용: 상속보단 조립을 발표하기 전에, 미리 책을 읽고 공부한 내용을 기록한 포스팅이다. 이펙티브 자바 (아이템 18. 상속보다는 컴포지션을 사용하라) 내용과도 유사한 점이 존재한다. 상속을 통한 재사용의 단점 지난 포스팅에서 `상속이 정말 좋을까?` 라는 소주제로 글을 쓴 적이 있다. https://kth990303.tistory.com/280 [호호 스터디] 다형성과 추상 타입_ 객체지향과 디자인 패턴 Chapter 3 호호 스터디에서 Chapter 3: 다형성과 추상 타입을 발표하기 전에, 미리 책을 읽고 공부한 내용을 기록한 포스팅이다. 이펙티브 자바, 오브젝트 책에 적힌 내용과 유사한 내용도 많이 있어, 함께 읽 kth990303.tistory.com 상속을..

Collections.EMPTY_LIST vs Collections.emptyList() 무엇이 다를까?

java를 사용한다면 빈 객체를 넘겨줘야할 일이 한번쯤은 발생할 것이다. 이 때, null을 넘겨주는 것은 굉장히 위험하니 빈 list를 넘겨줘야 되는 경우가 많이 발생한다. (아이템 54. null이 아닌, 빈 컬렉션이나 배열을 반환하라) 이 경우, 우리는 두 가지 선택지가 존재한다. Collections.EMPTY_LIST를 쓸지, Collections.emptyList()를 쓸지. 전자의 경우(EMPTY_LIST 사용) 빈 객체를 넘겨주기 위해 EMPTY_LIST 상수값을 넘겨주었다. 이제 테스트를 돌려보자. 아래와 같은 경고가 발생한다. uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 형변..

[호호 스터디] 다형성과 추상 타입_ 객체지향과 디자인 패턴 Chapter 3

호호 스터디에서 Chapter 3: 다형성과 추상 타입을 발표하기 전에, 미리 책을 읽고 공부한 내용을 기록한 포스팅이다. 이펙티브 자바, 오브젝트 책에 적힌 내용과 유사한 내용도 많이 있어, 함께 읽으면 좋은 시너지 효과를 낼 수 있을 듯하다! (이펙티브 자바 3판_아이템18, 19, 64) 다형성을 위한 인터페이스 다형성(Polymorphism)이란, 한 객체가 여러 가지 모습을 갖는다는 것을 의미한다. 즉, 한 객체가 여러 가지 타입을 갖는다는 것을 의미한다. 위 그림처럼 LottoGenerator에는 여러 방법이 있다. 자동으로 생성하는 방법과, 수동으로 생성하는 방법. 따라서 로또 생성 인스턴스 객체를 생성하려 할 때, 아래와 같이 두 가지 방법이 존재한다. LottoGenerator lotto..

null을 반환하지 말고 빈 객체, 또는 Optional을 반환하자

우아한테크코스 미션을 진행하면서, 그리고 이펙티브 자바를 읽으면서 null 반환의 위험성을 알게 됐다. 로또 미션을 진행하면서 로또 구매 방법에는 자동, 수동이 존재한다. 수동으로 구매할 것이라면 구매할 로또 번호들을 입력하고, 구매하지 않을 것이라면 생략해주자 수동 로또를 구매할 개수를 입력받을 때, 0이 아닌 특정 자연수값이라면 번호를 List에 담은 객체를 넘겨주면 되지만, 0이 입력됐을 경우, 두 가지 방법이 존재한다. null을 반환해준다. 빈 객체(Collections.emptyList())를 반환해준다. 1번 방법은 위험한 방법이다. null을 반환해줄 경우, 이를 사용하는 프로덕션 메소드에서 null일 때에 따로 처리하는 로직을 추가로 만들어주어야 한다. 그렇지 않을 경우, 우리를 자주 괴..

[220221] 호호 스터디_ 객체지향과 디자인 패턴 Chapter 2

데일리 미팅에서 호호 크루가 '객체지향과 디자인 패턴' 책 스터디를 주최하여 참여를 신청했다 :) 앞으로 호호 스터디를 통해 객체지향과 디자인패턴 책을 읽고 배우며 느낀 점들을 여기에 기록할 듯하다. 끝까지 완독하고 나면, 독후감 카테고리에 따로 포스팅을 작성할 예정이다. 객체지향을 선택한 이유 절차지향은 데이터 중심으로 이루어진다. 그리고 각 프로시저들이 그 데이터를 여러가지 방식으로 조작한다. 프로시저가 다른 프로시저를 사용할 수도 있고, 같은 데이터를 사용할 수도 있다. 그러나 위 경우의 문제점은, 요구사항이 수정됐을 때 발생한다. 일단 같은 데이터를 다루는 프로시저들이 많다보니, 데이터 타입이나 의미 변경이 발생하면 수정해야 할 프로시저도 많아진다. 거기에, 프로시저가 다른 프로시저를 사용하고 있..

[TDD 리팩토링] @ParameterizedTest을 이용한 테스트 메소드에서의 여러 값 검증

아래의 테스트 코드를 한 번 보자. 빈 문자열 또는 null일 경우 0을 반환해주게 하는 테스트 코드이다. 또 다른 테스트 코드도 한 번 보자. 방금 보여준 두 개의 테스트 코드는 모두 어딘가에 하자(?)가 존재한다. 바로바로... 하나의 테스트 메소드에 불필요하게 너무 많은 assert문이 존재한다는 것이다! 이러한 경우는 보통, 검증을 제대로 못했거나, 하나의 메소드에 하나의 test라고 생각했지만 여러 개의 test를 묶어놓은 경우이다. 우리는 위 코드들을 알아보기 쉽게 리팩토링해볼 것이다. 1. @ParameterizedTest 이용 먼저 맨 처음 테스트코드 먼저 고쳐보자. 사실 리뷰어(이하 미르)의 피드백을 받기 전까진 @ParameterizedTest가 무엇인지도 몰랐다. @Parameteri..

[ERROR] 스프링 어노테이션 인식이 안될 때

가끔 프로젝트를 오랜만에 작동하거나, 라이브러리가 최신 버전이 아닐 경우 아래 사진처럼 스프링 어노테이션들이 빨갛게 떠 인식이 안될 때가 있다. 사실 맨 처음엔 나도 정말 당황했었고, 구글링을 해도 잘 해결이 되지 않아 해결에 어려움을 겪었는데, 해결 방법이 정말 간단했다. 너무나도 간단했기 때문에 사람들이 블로그에 포스팅을 안한 것이 아닐까 의심될 정도. 해결방법 스프링 어노테이션들을 인식을 못한다는 것은 결국은 라이브러리(dependencies)들이 제 기능을 못한다는 것이므로 인텔리제이 기준으로 build.gradle에서 빨간 박스의 돌고래 표시(Load Gradle Changes) (단축키 ctrl + shift + O)를 눌러준다. 저 표시는 라이브러리들이나 환경세팅이 변경됐을 경우 그 세팅에 ..

[211219] 유스콘 2021 웨비나 컨퍼런스를 듣고 왔다

우아한형제들, 인프랩, 넥스트스탭에서 주최한 유스콘 2021 웨비나를 듣고 왔다. 마침 어떻게 공부할지 고민이 많기도 했고, 웨비나 들은 경험이 많이 없기도 했으며, 스프링과 java 웨비나라서 한 번 들어보는 것도 좋겠다 싶어서 참여하였다. https://frost-witch-afb.notion.site/YOUTHCON-21-365e94c3df3443e5b1322520a8b1a2ef YOUTHCON'21 유쾌한 스프링방에서 탄생한 유스콘은 👨‍🎓 젊은 개발자와 👨‍🏫 선배 개발자가 함께 가치 있는 기술에 관한 정보와 경험을 공유하는 콘퍼런스입니다. 여기서 발표하는 사람들을 잘 기억 frost-witch-afb.notion.site 다 듣지는 않았고 일부 참여하였는데 간단하게 요약 및 느낀점을 포스팅하겠..

[JAVA] 스트림 filter을 anyMatch, allMatch로 바꿔보자

코드 indent(들여쓰기)를 최소화하기 위해서 filter를 사용하면서 github에 commit하려던 와중에 아래 메시지가 발생했다. 자바 List 컬렉션에서 Stream api를 통해 특정 조건을 만족하는 원소가 하나라도 있다면~ 의 작업을 해주기 위해 아래와 같이 코드를 짰었다. 일단 stream api를 통해 위와 같이 코드를 작성한 결과 for문 -> if문이 요구되는 indent 2로 원소를 뽑아내는 대신, indent 0으로 간단하게 해당 원소를 뽑아낼 수 있었다. 그런데 똑똑한 인텔리제이는 코드를 보며 아래와 같이 말한다. 인텔리제이: 어차피 count()로 개수 파악하려고 하는 것이 아닌, 존재하는지만 파악하려면 anyMatch 키워드를 써봐~ 오... anyMatch? 위 코드를 아래..

[JAVA] JDK 환경설정 / WARNING: An illegal reflective access operation has occurred 경고 해결

우테코 프리코스를 진행하던 도중 test code를 돌릴 때 아래 경고문구가 발생했다. 테스트 코드는 통과하며, 코드 에러도 뜨지 않는다. 즉, 에러 문구가 아닌 경고 문구이지만, 상당히 거슬린다. 해결방법 원인은 JDK 11 버전을 사용하고 있었기 때문이었다. cmd 창에서 jdk -version은 1.8.0 이라 뜨는데, 인텔리제이 ide에서 내가 자바11을 사용하고 있었기 때문인 것으로 보인다. 따라서 인텔리제이에서 jdk 1.8 (java 8) 버전을 설치해주기로 했다. 요즘은 인텔리제이 자체에서 jdk를 다운받을 수 있는 편한 세상이 됐다. 1. Ctrl + alt + s 를 눌러 설정에 들어간 후, gradle이라 쳐주고 위 화면에서 Download JDK를 클릭한다. 2. jdk 1.8 (j..

반응형