본문 바로가기

객체지향

(8)
커뮤니티 피드(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) - 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로 선언하..
VO(Value Object) 1. VO?객체 지향 프로그래밍에서 자주 사용하는 설계. 값을 표현하기 위해 사용되는 객체로, 불변성을 가진다. 2. VO vs DTO구분VO(Value Object)DTO(Data Transfer Object)목적도메인 값을 표현, 불변 객체로 데이터의 의미를 부여데이터를 계층 간에 전달하기 위한 객체(Response 용도)특징불변성, 값 동등성 비교가변성을 가질 수 있음(Setter)사용 위치주로 도메인 모델서비스/컨트롤러 계층 간 데이터 전송 3. 특징1.equals & hash code 메서드를 재정의값이 동일한 두 개의 객체를 생성하고public class Animal { private String animalName; public Animal(String animalName) { ..