VO(Value Object)는 무엇일까? 왜 사용할까?
·
우아한테크코스 5기/학습 로그
1. VO(Value Object)란? VO의 의미를 보면 다음과 같다. * VO란 도메인에서 한 개 또는 그 이상의 속성들을 묶어서 특정 값을 나타내는 객체를 의미한다. * 해당 속성들을 primitive 타입이다! (int, boolean, ...) 여기서는 의미만 간단하게 살펴보고, 아래에서 VO의 예시를 살펴보면서 이해해보자. 2. VO, 그래서 왜 쓰는건데? VO가 필요한 이유는, primitive 타입이 도메인 객체를 모델링하기 위해 충분하지 않기 때문이다. primitive 타입으로는 도메인에서 의미 있는 값으로 인식하기 힘들다. 지금부터 VO가 필요한 이유를 살펴보자. 🎯 2-1. primitive 타입의 기능들을 객체가 전부 사용하지 않는다. '사다리 타기 게임'을 예시로 들어보자. 사다..
우아한테크코스 LV 1 - 사다리 타기 피드백 정리
·
우아한테크코스 5기/미션 피드백 정리
0. 들어가기 전 사다리 타기는 오늘 미션이 끝나는데 자동차 경주 미션 피드백 정리와는 달리 끝나는 날인 오늘 정리해보려고 한다! 이렇게 바로 정리하는 것도 내일 바로 새로운 미션이 시작되기 때문에 다음 미션에 바로 적용해볼 수 있어서 괜찮을 것 같다! 1. 리뷰어 피드백 🎯 1) static 사용 관련 static 사용 관련해서 언제 사용해도 되는건지 기준이 모호해서 질문을 드렸었다. 리뷰어님께선 먼저 '해당 클래스를 여러 객체로 생성할 필요가 있는가?'를 고민해본다고 하셨다. '상태를 지니는가?'도 고민해보고 상태를 지니면 공통된 객체가 아니라, 인스턴스화된 객체로 여러 객체로 생성해야하므로 static을 쓰지 않는다고 하셨다. 이렇게 상태를 가지고 있지 않는 클래스 '유틸리티 클래스'라고 한다. 내..
도메인에 처음 접근하기 - Out -> In / In -> Out 접근 방식
·
우아한테크코스 5기/학습 로그
우테코 강의에서 처음 보는 도메인에 접근할 때의 방식 2가지를 소개해줬다. 1. Out -> In 접근 방식 2. In -> Out 접근 방식 1. Out → In 접근 방식 VS In → Out 접근 방식 * Out -> In 접근 방식 - 큰 관점에서 접근하는 방식 ex : 사다리 한 개의 의미가 뭘까? 사다리 한 라인은 뭘까? 사다리 전체가 있고, 사다리 한 라인이 있네! * In -> Out 접근 방식 - 가장 작은 단위를 찾아서 접근하는 방식 ex : 이게 가장 작은 단위인 것 같으니, 여기부터 시작해보자. 작은 것부터 하고, 이걸 합치다보니 완성되어 있다. 이 접근 방식은 취향의 차이지만 좀 더 적합한 것은 존재한다. Out → In 방식은 도메인 지식이 없거나 요구사항을 객체로 도출할 수 없..
포장 값을 View로 전달하는 방식으로 무엇을 사용할까?
·
우아한테크코스 5기/학습 로그
들어가기 전 해당 내용은 지극히 주관적이어서, 사람마다 생각이 다를 수 있는 부분이다. 그래서 이게 정답이라고 생각하기 보다, 이 사람은 이렇게 생각하는구나! 정도로 이해하면 될 것 같다! 0. 고민 상황 우선, 현재 미션 구조에서 MVC 패턴을 사용하고 있다. 또한, 원시 값을 포장하라는 요구사항을 받아서 여러 포장 클래스들이 존재한다. Player 객체는 이름을 가지고 있고, 해당 이름은 문자열 String이 아닌 포장 클래스인 Name을 가진다. 고민 상황은, Player의 Name을 View에 전달하고자 한다. 이때, 어떻게 Player의 Name을 View에게 전달해야할까? 1. 포장 값을 View로 전달하는 방식 MVC패턴에서 포장 값을 View로 전달하는 방식으로는 다음과 같이 2가지 방식이..
우아한테크코스 LV 1 - 자동차 경주 게임 피드백 정리
·
우아한테크코스 5기/미션 피드백 정리
0. 들어가기 전 현재 우테코 생활은 벌써 3번째 미션을 향해 달려가고 있다. 3번째 미션을 향해 달려가고 있지만, 첫 번째 미션인 자동차 경주 게임 피드백을 블로그에 따로 정리해놓지는 않은 것 같아서 기록하려고 한다! 피드백 받았던 당시에 기록했으면 더 좋았을 수도 있었겠지만 피드백을 다시 상기시키는 느낌에서 피드백을 받은지 1주 지난 지금, 다시 기록하면서 보는 것도 나쁘지 않을 것 같다! 1. 공통 피드백 중 내가 지키지 못했던 것들 1-1. 🎯 객체 입장에서 생각해보기 랜덤 값으로 자동차 전진 여부를 결정할 때, 자동차 객체는 자동차 전진 기능에서 들어오는 파라미터가 '랜덤 값'인지 알 필요가 없다. 자동차 입장에서 전진 기능의 판별은 엑셀의 깊이? 느낌으로 power 같은 네이밍이 적절할 것이다..
[Java] ArrayList, LinkedList를 직접 구현해보며 이해한 것
·
우아한테크코스 5기/학습 로그
0. 들어가기 전 우테코에서 미니 미션으로 '리스트 구현하기'를 시켰다. ArrayList, LinkedList 두 개를 직접 구현해보는 것이었는데, 처음 해보는 것이라서 신선했다. 가끔씩 모르는 메소드, 클래스들이 나오면 그 클래스를 들어가서 직접 코드를 뜯어보기 때문에 코드를 들어가보는 것에는 익숙했지만, 그래도 단순히 사용하기만 했었던 ArrayList, LinkedList를 직접 구현해야한다니 막막했다. 게다가 LinkedList는 어떤 원리인지도 자세히 알지 못했고 많이 사용해본 적도 없어서 더 막막했던 것 같다. 직접 구현한 코드들은 거의 ArrayList, LinkedList를 복붙한 내용이라서 자세하게는 기록하지 않고 미션을 진행하면서 내가 이해한 점들을 기록해보고자 한다. (내가 코드를 ..
[Java] Collection 복사 - 복사 방법(방어적 복사, 얕은 복사, 깊은 복사) 및 상황별 최적의 복사 방법
·
Java
들어가기 전 우테코 사다리 타기 미션을 페어와 함께 진행하던 중에, 페어가 List.copyOf()를 쓰는 것을 보게 되었다. 나는 페어에게 List.copyOf()와 Collections.unmodifiableList()의 차이가 무엇인지 질문을 하게 되면서 Collection 객체 복사에 대해서 약 1시간 동안 페어와 함께 공부를 하게 되었다. 그래서 페어와 공부했던 내용들을 까먹기 전에 기록해보려고 한다. ⚙️ Collection 복사 상황 1. 생성자의 인자로 받은 객체의 복사본을 만들어서 내부 필드를 초기화하고자 할 때 2. getter 메소드에서 내부의 객체를 반환할 때 이러한 2가지 상황에서 어떠한 객체 복사를 사용해야 할지 살펴보도록 하겠다! ✅ 방어적 복사 / 얕은 복사 / 깊은 복사 복..
우아한테크코스 5기 백엔드 1주차 회고(연극, 페어프로그래밍, 첫 코드 리뷰)
·
우아한테크코스 5기/회고
0. 들어가기 전 우선, 우테코 본 과정이 시작한지 거의 일주일이 지났다. 일주일이 정말 빠르게 지나간 것 같다. 그동안 뭔가 많은 일이 있었는데, 기록하지 않으면 나중에 사라질 것 같아서 회고? 느낌으로 남겨보고자 한다! 미션에 대한 내용보단 느낀점, 감정들 위주로 적을 것 같다! (미션 내용까지 쓰기 귀찮은 건 정답..) 뭔가 사진이나 영상을 남겨 놓은 것이 없어서 대충 글로만 쭉 끄적일 것 같다,, 1. 온보딩 조 (연극 조) 나는 우테코를 들어오기 전에 일단 합격에 급급해서 시험에 관한 내용들만 찾아보고 우테코 본 과정에 대해서는 잘 모르고 들어왔었는데 대뜸 OT에서 갑자기 연극을 하라고 시켜서 당황스러웠다,,, 하지만 덕분에 마음이 맞는 연극 조도 만들어져서 지금으로썬 정말 좋다! 연극은 다소 ..
[DB] 친구 테이블 ERD 설계, 친구 목록 조회 기능 구현(Querydsl 셀프 조인)
·
DB
처음 프로젝트 진행 시에 친구 테이블을 어떻게 설계해야 할지 감이 안 잡혔었다. 생각해보고, 구글링으로 여러 사례를 참고해서 아래와 같이 친구 테이블 ERD를 설계하였다. 🎯 Friend 테이블 중심 Column friend 테이블에서 중요하게 봐야할 Column은 'from_user_id'와 'to_user_id', 'are_we_friend' 이다. 나머지 컬럼들은 friend User의 정보들이라서 크게 고민해야 할 것은 없다. 1. from_user_id : 친구 요청을 보낸 User의 id 2. to_user_id : 친구 요청을 받은 User의 id (FK로, User 테이블의 PK) 3. are_we_friend : 서로 친구인지 판단하는 Column 따라서 앞으로 설명 시에 위의 3가지 컬..
[Spring] @Valid 여러 검증 어노테이션 검증 순서 설정 방법
·
Spring/기타
검증 관련한 컨트롤러 테스트 코드 작성 중, 검증 시 적절한 검증을 통해 에러 메시지까지 같아야 테스트가 통과하도록 코드를 짰었다. (ex - 빈 값 입력 시 @NotBlank에 설정한 message가 출력되도록) 하지만, 빈 값 입력 시 @NotBlank에 설정한 message가 아닌, @Pattern에서 설정한 message가 출력되어 테스트가 실패했었다. @Data @NoArgsConstructor @AllArgsConstructor public class UserSignUpRequestDto { @NotBlank(message = "이메일을 입력해주세요.") @Pattern(regexp = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]+$", message ..
BE_성하