본문 바로가기

Java

(9)
커뮤니티 피드(3) - 테스트 작성 1. UserInfoTest// org.communityfeed.user.domain// UserInfoTest.javaclass UserInfoTest { @Test void givenNameAndProfileImageUrl_whenCreated_thenThrowNothing() { // given String name = "test"; String profileImage = "profileImage"; // when // then assertDoesNotThrow(() -> new UserInfo(name, profileImage)); } @Test void givenBlankName..
커뮤니티 피드(2) - Post 도메인 개발 * 밑줄: 여기서 처리할 부분 1. 게시글 작성:사용자가 텍스트를 입력하고사용자가 공개 대상 (예: 모두 공개, 팔로워 전용)을 선택합니다.사용자가 게시물을 제출합니다.단, 게시물의 글자수는 5글자 이상 500자 이하여야 합니다.// org.communityfeed.post.domain// Post.javapublic class Post { // 게시글 아이디 private final Long id; // 작성자 private final User author; // 게시글 내용 private final PostContent content; // 공개 범위 private PostStatus status; public Post(Long id, User ..
단위 테스트와 테스트 더블 1. 테스트를 작성하는 이유기능 변경이 있을 때에 영향도 파악 가능리팩토링 때에 기능의 안정성기능의 의도를 명확하게 파악이 가능2. 테스트를 작성하지 않는 이유의도를 전혀 모르겠는 복잡한 테스트시간이 지나면서 80%의 테스트가 통과가 안 되는 코드변경할 때에 오히려 짐이 되는 테스트3. 단위 테스트와 인수테스트인수 테스트: 사용자 관점에서 요구사항을 만족하는지 검증 => 최종단계의 검증단위 테스트: 테스트 가능한 가장 작은 단위를 검증하는 테스트 4. 인수 테스트의 한계프로젝트를 설계 하는 단계에서 빠르게 시작하기 어려움라이브러리들을 추가해야 함템플릿을 제대로 만들고 하지 않는다면 유지보수가 상대적으로 어려움5. 단위 테스트의 조건객체 지향으로 작게 나눈 순수한 자바 객체를 테스트 6. Given-Whe..
커뮤니티 피드(1) - User 도메인 개발 * 밑줄: 여기서 처리할 부분1. 유저 생성유저는 id 를 통해 구분이 되어야 함 이름, 프로필 이미지를 입력 받으면 저장되어야 함단, 이름은 빈 값이 입력되면 안됨// org.communify.user.domain// User.javapublic class User { private final Long id; private final UserInfo userInfo; public User(Long id, UserInfo userInfo) { this.id = id; this.userInfo = userInfo; }}// UserInfo.javapublic class UserInfo { private final String name; private fina..
클린아키텍처 1. 클린아키텍처소프트웨어 시스템의 구조를 설계할 때에 지켜야 할 원칙과 방법을 정의한 개념 2. 왜 클린아키텍처?소프트웨어 아키텍트에 있어서 중요한 포인트 중 하나인 비용클린 아키텍처는 비용을 줄여줌선택지를 넓힘으로 유연하게 대응 가능선택지를 넓힘? 어떤 저장 방식을 선택하던, 어떤 프레임워크, 하드웨어를 선택하던 상관없다. 우선적으로 비즈니스 로직을 만들면 그 위에 이식할 수 있게 만든다3. 컴포넌트시스템의 구성 요소로 배포할 수 있는 가장 작은 단위 ex) java -> jar저수준 컴포넌트: 비지니스 로직보다 유저와 외부에 가까움 ex) 컨트롤러, 레포지토리고수준 컴포넌트: 비지니스 로직이 포함 ex) 서비스, 도메인 4. 의존성고수준 컴포넌트(도메인, 서비스)는 저수준 컴포넌트(컨트롤러, 레포지..
수강생 관리 프로그램 1. 일별 수업 정보 반환요일에 해당하는 수업들을 반환해야함요일 입력은 MONDAY, TUESDAY 와 같은 식으로 콘솔로 입력 받을 수 있어야 함단, 학생 상태가 비활성화 상태이면 수업을 반환해서는 안됨// CourseRepository.java...public final Map courseMap = new HashMap();...public List getCourseDayOfWeek(DayOfWekk dayOfWeek) { List courses = new ArrayList(); for (Course course: courseMap.values()) { // 해당 요일 && 활성화 된 사용자 if (course.isSameDay(dayOfWeek) && course.isAct..
객체지향 생활 체조 원칙 9가지 1. 한 메서드에 오직 한 단계의 들여 쓰기 설명: 메서드 내에서 중첩된 로직(조건문, 반복문 등)을 피하고, 단순하게 작성한다.목적: 메서드가 너무 복잡해지는 것을 방지하고 가독성을 높인다.실천: 중첩된 로직은 메서드로 분리한다.2. else 예약어를 쓰지 않는다.  설명: 조건문에서 else를 사용하지 말고, 조건이 맞지 않는 경우 바로 반환(return)하거나 예외를 던진다.목적: 코드의 흐름을 단순화하고 읽기 쉽도록 한다.// 나쁜 예if (condition) { doSomething();} else { doSomethingElse();}// 좋은 예if (condition) { doSomething(); return;}doSomethingElse();    3. 모든 원시값과 문자열을 포장한다...
1급 컬렉션 1. 1급 컬렉션?1급 컬렉션은 컬렉션(List, Set, Map 등)과 관련된 로직을 객체로 캡슐화한 설계 패턴. 단순히 컬렉션을 직접 사용하지 않고, 컬렉션을 감싸는 객체를 만들어 그 안에 데이터를 관리하고 관련된 로직을 함께 넣는 방식2. 1급 컬렉션 vs VO(Value Object)구분1급 컬렉션VO(Value Object)의미컬렉션을 감싸는 객체단일 값을 표현하는 객체구조컬렉션(List,Map,Set 등)을 내부에 포함단일 값(숫자, 문자열 등)을 내부에 포함목적컬렉션과 관련된 로직 캡슐화값 자체의 의미 부여 및 불변성 유지3. 특징컬렉션을 포함한 클래스컬렉션(List, Set, Map 등)을 감싸는 하나의 객체로 설계컬렉션 외에 다른 필드는 존재해선 안됨불변성 유지컬렉션은 final로 선언하..