본문 바로가기
728x90
728x90

Study/Java13

Eager Loading & Lazy Loading 아직 JPA랑 좀 서먹서먹한 관계라 이 친구에 대해 잘 알지 못 한다. Eager Loading 과 Lazy Loading에 대해 처음 들었을 때는 '그게 뭔데;;' 라는 생각이 들었고, 누군가가 설명해줬을 때는 '그런게 된다고?' 라는 생각이 들었다. JPA랑 조금 더 친해져 보자. Eager 일반적인 게시판을 생각했을 때, 게시글(Post)와 사용자(Member)의 관계는 N:1 이다. // Member Entity @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; ... } // Post Entity @Entity public c.. 2023. 7. 16.
도메인 객체의 equals & hashcode (feat. ID) 장바구니 협업 미션 을 진행하며 도메인객체에 ID 필드를 넣어주었다. public class Order { private final Long id; private final Integer price; private final Member member; private final CartItems orderedItems; //... } 도메인 객체가 ID를 갖고 있을 때의 장점과 단점을 비교해 보았을 때, 장점 쪽이 좀 더 마음에 와닿았기 때문이다. 도메인에 ID를 넣어주겠다는 것은 객체의 식별자로 ID를 사용하겠다는 의미이고, ID를 통해 동등성을 보장하겠다는 의미이다. 처음에는 굳이 동등성을 보장할 필요가 없는 도메인 객체는 equals & hashcode를 재정의해주지 않았다. 필요하지가 않은데 굳이 .. 2023. 6. 7.
뒤늦게 공부해보는 함수형 인터페이스, 근데 이거 왜 씀? 우테코 레벨1 체스미션을 진행하며 함수형 인터페이스를 처음 사용해봤다. 정말 뒤늦게 공부하는 거 같긴한데.. 늦게라도 하는게 안하는 것보다는 항상 낫다고 생각한다. 함수형 인터페이스란? 함수형 인터페이스는 1개의 추상 메소드를 갖고 있는 인터페이스를 말한다. 다른 말로 SAM(Single Abstract Metehod)이라고 불리기도 한다. public interface Example { void doSomething(String string); // public abstract 생략 } 위의 인터페이스는 하나의 추상 메서드를 가지고 있는 인터페이스이다. 즉, 함수형 인터페이스의 조건을 충족하고있다. 위처럼 정의된 함수형 인터페이스는 람다를 이용해 접근할 수 있다. Example func = (strin.. 2023. 3. 29.
VARCHAR(20)에는 한글로 몇 글자까지 입력가능할까? 레벨1의 하이라이트 체스미션을 진행하면서, DB에 게임룸마다 게임을 생성하고 저장하는 기능을 구현해야 했다. 각각의 게임룸에 이름을 정할수 있으면 좋을것 같아서 room에 대한 테이블을 아래와 같이 작성했다. CREATE TABLE `room` ( `_id` int PRIMARY KEY NOT NULL AUTO_INCREMENT, `roomName` varchar(10), `currentTurn` varchar(5) default 'WHITE' )ENGINE=InnoDB DEFAULT CHARSET=utf8; table에서 CHARSET을 utf-8로 설정하였기에, 한글은 3글자까지 밖에 안들어가겠지 하고이것저것 테이블에 값을 집어넣어 봤다. 근데 예상과는 달리 한글이 4글자도 들어가고 5글자도 들어간다.. 2023. 3. 27.
어질어질 LinkedHashMap 복사하기 레벨1 - 블랙잭 미션을 진행하며, LinkedHashMap을 이용하여 플레이어와 플레이어의 배팅 금액을 저장하였었다. private final Map bettingMap = new LinkedHashMap(); LinkedHashMap을 사용한 이유는 플레이어가 생성된 순서대로 베팅금액을 입력받고, 그 순서대로 출력되기를 원했기 때문이다. 출력을 위해 당당하게 getter를 사용했는데, Map을 그냥 던져주기엔 불안하다. Map.copyOf()를 통해 복사된 Map을 던져주고 코드를 돌려봤다. 그런데 출력된 결과는 입력된 순서와는 상관없이 무작위 하게 섞여있는 것을 확인할 수 있었다. 왜죠? CopyOf() 까보기 static Map copyOf(Map 2023. 3. 13.
넌 지금 전혀 util 하고 있지 않아. util이 util한가? 레벨1 사다리미션의 리뷰 중 이제껏 한번도 생각해보지 않았던 의문을 갖게 만든 리뷰가 있었다. 평소 아무 생각없이 utils 패키지를 만들고, 그 안에 Validator 클래스를 두어 검증로직을 관리했다. 사다리미션 역시 마찬가지의 방식으로 패키지를 구성했었다. 그리고 이에 대해 이번 리뷰어는 Validator 클래스가 정말 utils 패키지에 어울리는지에 대한 의문을 안겨줌과 동시에 utils 패키지의 역할에 대한 의문 또한 안겨주었다. 그냥 너무나도 흔하게 사용하고 자주 사용하다보니, util이란 패키지 또는 클래스에 대해 한번도 깊게 생각해본적이 없는 것 같다. 우테코는 나에게 정말 많은 의문들을 안겨준다. 해결은 내 몫이니 파고들어보자. 소프트웨어에서의 util util .. 2023. 3. 12.
LinkedList에서 삭제된 노드의 next의 null 처리 할까 말까? 학습을 위해 작성된 포스팅 입니다. 잘못된 내용이 있으면, 지적해주세요! Linked List 미니미션 우테코 레벨1 사다리 미션 진행 중, LinkedList를 직접 구현해보는 미니미션이 하나 추가되었다...ㅎ (와.. 신난다...) 자료구조에 대한 선수지식이 없어서 제법 애를 먹었는데, 아주 멋진 크루 마코 에게 이런저런 질문을 하며, 얼레벌레 구현을 하는데는 성공하였다. 그런데 구현을 하던도중 한가지 의문점이 떠올랐다. null 처리 해줘야 하나..? 의문이 든 시점은 remove 기능을 구현하는 도중이었다. LinkedList 의 remove 는 위의 그림과 같은 방식으로 구현되는데, 삭제된 노드(C)의 next는 여전히 D를 가리키고 있다. C의 next를 null로 처리를 해줘야 할까..? 참.. 2023. 2. 24.
우리 당당하게 getter 씁시다! 학습을 위해 작성된 포스팅 입니다. 잘못된 내용이 있으면, 지적해주세요! 객체지향을 공부하다 보면, 한번쯤은 맞닥뜨리는 문장이 있다. getter/setter/property를 쓰지 않는다. 객체지향 생활체조 9번에 해당하는 내용이다. 이제껏 위의 문장을 성서에 나온 문구처럼 가슴속에 깊이 새기고, 왜에 대한 의문은 품지 않았다. (무교임) 최근에 반란군크루에 가입하게 되었는데, 반란군답게 "왜 안되는데?" 마인드로 한번 다가가보자. setter에 관한건 이미 너무 멋진 글이 있으니 참고하면 좋을 듯 하다. getter 왜 안쓰냐? getter를 지양하자. 가 중론이기 때문에 당당하게 getter씁시다! 를 외치기 위해선 왜 getter를 쓰면 안되는지 를 먼저 샅샅이 파악하고, 그 빈틈을 노려야 한다... 2023. 2. 21.
[Java] 에러(Error)과 예외(Exception) 0. 목차 1. 개요 2. 오류 3. 예외 1. 개요 우테코 3주차 과제 수행 중 예외에 대한 공부의 필요성을 느끼고 책과 검색을 통해 알게된 내용을 정리해보려고 한다. JS만 거의 1년 가까이해서 뭔가 굉장히 낯선 부분인데, 우테코 슬랙채널을 보면 다른 언어를 하시던 분들도 다 비슷한 마음 인것 같다.. 현재 공부하는 책에서 예외처리에 대한 챕터를 딱하고 펼치니, 오류와 예외는 다릅니다. 라는 사실 부터 짚고 넘어간다. 일단 오류나 예외나 모두 클래스로 관리되고,둘 다 Throwable을 상속하기 때문에, 에.. 비슷한거 아닌가 싶은 느낌인데, 다르다니까 뭐가 다른지 확인을 해보자. 2. 오류 우선 오류는 시스템이 종료되어야 할 수준의 상황과 같이 수습할 수 없는 심각한 문제를 의미한다. 이는 개발자가.. 2022. 11. 14.
[Java] enum type(열거 타입) 정리 0. 목차 1. 개요 2. enum type 1. 개요 그래도 약 1년간 프로젝트도 해보고, 코테준비도 했던 덕분인지 우테코 미션을 받았을 때 서비스 로직을 머릿속에 그리는 건 어렵지 않게 된다. 그런데 Java 기본 개념이 부족하다 보니, 서비스 로직을 코드로 옮기는 게 어렵다... 오늘은 쓰려고 할때마다 이거.. 뭐더라 하는 enum type 찢고 넘어가자. 2. enum type 데이터 중에는 몇가지의 한정된 값만을 갖는 경우가 있다. 뭐 예를들어 행정구역이라던가(서울, 부산, 대구 등등..), 계절이라던가(봄,여름,가을,겨울) 이런 애들을 enum type이라고 한다. 라는 식으로 되어있는 설명을 봤는데 뭔소리지 싶었다. 그냥 성질이 비슷한 상수(constant) 모아놓은 애라고 생각하면 된다. .. 2022. 11. 7.
[Java] MVC 패턴 그리고 domain, service 0. 목차 1. 개요 2. MVC 패턴 3. domain과 service 1. 개요 우테코지원 해야겠다 마음먹고, 이전기수 프리코스 내용 검색해서 찾아본적이 있었다. 이전기수 분들의 블로그 글들에서 공통적으로 보이던 것들이 OOP(객체지향), TDD(테스트 주도 개발), MVC 였다. 그때부터 조금씩 저 세가지 내용에 대해 틈틈히 블로그 글들을 읽으면서, 내가 프리코스를 할 때는 저 세가지 항목을 꼭 지키면서 해야지 라는 마음을 가졌었다. .. 물론 잘 못하고 있는 중이다. 더 잘하기 위해서 공부했던 내용 한번 정리 들어간다. 2. MVC 패턴 솔직히 한번도 안들어 본 사람은 없을거다. 나도 뭔지는 몰라도 들어본적은 있었으니까. MVC 패턴은 MODEL VIEW CONTROLL의 약자로 하나의 애플리케이.. 2022. 11. 5.
[Java] JUnit ParameterizedTest input 여러개 테스트 돌리기 0. 목차 1. 개요 2. 여러개 테스트 한큐에 돌리기(ParamterizedTest) 3. 그외에도 이것저것 1. 개요 프리코스 2주차 2일째. 고난과 역경의 TDD 하다가 input 여러개 넣고 한큐에 테스트 돌리는 방법 찾다가 알게된거 정리해볼려고한다. 2. 여러개 테스트 한큐에 돌리기(@ParameterizedTest) 예를 들어서, 인자로 받은 숫자가 짝수인지 아닌지 테스트하는 테스트 코드를 작성했다고 해보자. @Test void check_odd_test() { Integer input = 2; boolean result = isOdd(input); Assertions.assertThat(result).isTrue(); } input의 값을 2로 지정하고 테스트가 통과했다. 하지만 나는 나를 .. 2022. 11. 3.
[Java] TDD 톺아보기 수정과 지적 환영합니다. 막 대해 주세요. 0. 목차 1. 개요 2. TDD란? 3. 테스트 코드 작성 4. 정리 1. 개요 우테코 2주차 미션에 JUnit 5와 AssertJ를 이용하여 본인이 정리한 기능 목록이 정상 동작함을 테스트 코드로 확인한다 . 라는 내용이 추가되었다. JUnit 5와 AssertJ가 누구신지는 모르겠지만, 대충 TDD 해라 라는 내용인건 확실하다. 이렇게 말하면 내가 TDD에 대해 잘 알고, 잘하는 사람 처럼 보이겠지만 초면이다. 그냥 어디서 주워들은게 있다. 작업을 하기전에 TDD가 무엇인지, 어떻게 하는 건지 하나하나 톺아보려한다. 2. TDD란? TDD의 뜻은 Test Driven Development 의 약자이다. 소중한 우리말로는 테스트 주도 개발 이다. 음 항상 용.. 2022. 11. 3.
728x90
728x90