우아한테크코스 우아한테크코스 레벨1 로또 미션 정리 책임의 측면에서 보면 검증에 대한 로직은 해당 검증이 필요한 도메인에 두는 것이 맞다고 생각하는데, 변환과 같은 부분은 별도로 둘 수 있지 않을까 하는 생각이 들었다. 따라서 해당 입력이 1과 45 사이의 숫자인가에 대한 검증은 LottoNumber 라고 하는 VO객체에서 이루어질 수 있지만, 해당 입력이 숫자인지를 검증하고 이를 변환해주는 역할은 view에서 할 수 있을 것이다. 아래와 같... 레벨1피드백로또우아한테크코스레벨1 우아한테크코스 레벨1 자동차 경주 미션 정리 내가 생각하기에 무분별하게 Setter를 두는 것은 해당 객체의 값을 의도하지 않은 곳에서 빈번하게 변경할 위험이 있기 때문에 자제하는 것이 좋다는 것을 생각했지만, Getter는 해당 객체의 인스턴스 변수 값을 변경하지 않기 때문에 필요한 곳에서 사용할 수 있도록 열어두어도 된다고 생각하였다. 어떤 인스턴스 변수(데이터)를 가지는 객체가 있다면 이 데이터에 대한 처리는 해당 객체의 책임이라... 자동차경주피드백레벨1우아한테크코스레벨1 우아한테크코스 레벨1 체스 미션 정리 아마 당시에 isXXX() 형태의 메소드는 어떤 기능을 수행하는 것이 아니라 '~~이니?'라고 묻는 메소드이기 때문에 제거해볼 수 있지 않을까 하는 생각에서 시작된 고민이었다고 생각된다. A. 해당 부분을 상태 안으로 넣음으로써 상태를 사용하는 곳, 즉 외부에서는 현재 어떤 상태인지를 알 필요없이 사용할 수 있게 된다. 즉 도메인에서 뷰에 의존하고 있다고 볼 수 있다. 따라서 Symbol 이... 체스피드백레벨1우아한테크코스레벨1 우아한테크코스 레벨1 블랙잭 미션 정리 DeckGenerateStrategy 인터페이스와 이를 구현하는 ShuffledDeckGenerateStrategy를 두어 덱 생성에 대한 책임을 해당 전략으로 분리할 수 있다. 예를 들어 위와 같은 코드의 경우, User 추상 클래스에 public abstract boolean isDealer();와 같은 추상메소드를 두고, 각각의 Dealer와 Player 구현체에서 그에 맞게끔 재정의 ... 블랙잭피드백레벨1우아한테크코스레벨1 우아한 테크코스 레벨1 돌아보기 이를 활용하면 전진 조건을 테스트 할 수 있습니다. 이를 통해 moveCar()메서드에 유연성을 부여 할 수 있습니다. 위와 같이 인터페이스를 잘 활용한다면 테스트가 까다로운 부분을 테스트 할 수 있고 동시에, 객체에 유연성을 부여 할 수 있습니다. 인스턴스 변수 선언을 통해 두가지 장점을 얻을 수 있습니다. 인스턴스 변수 선언을 통해 메서드 내부에서 인스턴스를 생성 하거나 파라미터로 필요한... 레벨1우아한테크코스레벨1 [우아한테크코스] 6주차 회고 블랙잭 미션 2단계 PR 을 늦게보내 아직 코드리뷰를 받지 않았지만 블랙잭 전체 피드백에 소개된 상태패턴 을 사용하였다. 블랙잭 1단계에서 플레이어(또는 딜러)가 가지는 정보가 이름, 카드, 게임 결과(승,무,패) 등이 있었고 요구사항중에 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다 가 있어서 게임 결과를 억지로 다른 클래스로 분리하였다. 어차피 모든 플레이어를 돌아가면서 확인 후... 우아한테크코스우아한테크코스 [우아한테크코스 #6] 추상화가 좋을지 판단해보자 처음에 이 두 개의 UI 영역을 하나의 클래스로 개발하였습니다. 새로운 비디오 리스트 UI 영역이 생긴다면 확장이 힘들것 같다 그래서 다음과 같이 VideoListComponent 클래스를 추상화하여 비디오 리스트 속성 별로 이를 확장하는 코드를 짜보았습니다. VideoListComponent : 이 클래스는 여러 비디오 리스트들이 공유하는 로직을 가지고 있습니다. 크게 마운트 이후 재 렌더... 우아한테크코스우아한테크코스 [우아한테크코스 #6] 네트워크 통신 테스트 요번 유튜브 미션은 다음과 같은 명세를 따릅니다. API URL을 인자로 받아 해당 API URL의 END_POINT들에만 요청을 보낼 수 있는 fetcher 모듈을 만들어 반환합니다. 이 코드들을 테스트 해봅시다 유튜브 API의 경우 일일 요청 횟수에 제한이 있기 때문에 직접 요청을 보내는 것이 아닌 유튜브 API가 반환하는 데이터와 동일한 구조를 가진 데이터를 반환하는 함수로 mockin... 우아한테크코스우아한테크코스 [우아한테크코스 #7] Browser History API를 통해 SPA처럼 라우팅을 적용해보자 SPA는 Single Page Application(싱글 페이지 어플리케이션)의 약자입니다. 말 그대로, 페이지가 1개인 어플리케이션이란 뜻입니다. Test Project의 기능 요구 사항 tab 버튼을 누르면 해당 탭에 맞는 화면이 나타난다. Test Project의 개발 환경 시작전 설정파일은 다음과 같습니다. STEP 1. 저는 천천히 나아가는걸 좋아합니다. pushState를 활용해보... 우아한테크코스우아한테크코스 프리코스 3주 과정을 되돌아보며 그렇게 Enum에 대한 리팩토링이 되었고, 아직 제 코드가 많이 어설프다는 것이 느껴지긴 하지만 이 리팩토링을 통해 함수를 15라인 이내로 미션의 요구사항을 지킬 수 있었습니다. 아직은 제가 글도 서투르고 정리에 익숙치 않아, 기록한 글들을 반복해서 다시 보면서 많은 사람들이 이해하고 도움이 될 수 있는 글이 되도록 보완할 계획입니다. 친구들과 프로젝트를 진행하면서 어떻게 하면 친구들이 조금... 우아한테크코스우아한테크코스 사용성을 고려해 객체를 설계하자 전략 패턴을 이용해 RouteEdge 객체에서 경로 검색 기준에 필요한 정보를 각기 다른 방식으로 가지고 올 수 있도록 코드를 구현한다면 조금 더 깔끔하게 구현할 수 있을 것이라 생각했다. 위와 같이 enum 클래스를 이용해 경로 검색 기준 별로 instance를 만들고, 각 instance가 전략 객체를 통해 자신에게 맞는 weight를 가져올 수 있게 리팩토링을 진행하였다. 만약 메서드의... 우아한테크코스JavaObject Oriented ProgrammingJava
우아한테크코스 레벨1 로또 미션 정리 책임의 측면에서 보면 검증에 대한 로직은 해당 검증이 필요한 도메인에 두는 것이 맞다고 생각하는데, 변환과 같은 부분은 별도로 둘 수 있지 않을까 하는 생각이 들었다. 따라서 해당 입력이 1과 45 사이의 숫자인가에 대한 검증은 LottoNumber 라고 하는 VO객체에서 이루어질 수 있지만, 해당 입력이 숫자인지를 검증하고 이를 변환해주는 역할은 view에서 할 수 있을 것이다. 아래와 같... 레벨1피드백로또우아한테크코스레벨1 우아한테크코스 레벨1 자동차 경주 미션 정리 내가 생각하기에 무분별하게 Setter를 두는 것은 해당 객체의 값을 의도하지 않은 곳에서 빈번하게 변경할 위험이 있기 때문에 자제하는 것이 좋다는 것을 생각했지만, Getter는 해당 객체의 인스턴스 변수 값을 변경하지 않기 때문에 필요한 곳에서 사용할 수 있도록 열어두어도 된다고 생각하였다. 어떤 인스턴스 변수(데이터)를 가지는 객체가 있다면 이 데이터에 대한 처리는 해당 객체의 책임이라... 자동차경주피드백레벨1우아한테크코스레벨1 우아한테크코스 레벨1 체스 미션 정리 아마 당시에 isXXX() 형태의 메소드는 어떤 기능을 수행하는 것이 아니라 '~~이니?'라고 묻는 메소드이기 때문에 제거해볼 수 있지 않을까 하는 생각에서 시작된 고민이었다고 생각된다. A. 해당 부분을 상태 안으로 넣음으로써 상태를 사용하는 곳, 즉 외부에서는 현재 어떤 상태인지를 알 필요없이 사용할 수 있게 된다. 즉 도메인에서 뷰에 의존하고 있다고 볼 수 있다. 따라서 Symbol 이... 체스피드백레벨1우아한테크코스레벨1 우아한테크코스 레벨1 블랙잭 미션 정리 DeckGenerateStrategy 인터페이스와 이를 구현하는 ShuffledDeckGenerateStrategy를 두어 덱 생성에 대한 책임을 해당 전략으로 분리할 수 있다. 예를 들어 위와 같은 코드의 경우, User 추상 클래스에 public abstract boolean isDealer();와 같은 추상메소드를 두고, 각각의 Dealer와 Player 구현체에서 그에 맞게끔 재정의 ... 블랙잭피드백레벨1우아한테크코스레벨1 우아한 테크코스 레벨1 돌아보기 이를 활용하면 전진 조건을 테스트 할 수 있습니다. 이를 통해 moveCar()메서드에 유연성을 부여 할 수 있습니다. 위와 같이 인터페이스를 잘 활용한다면 테스트가 까다로운 부분을 테스트 할 수 있고 동시에, 객체에 유연성을 부여 할 수 있습니다. 인스턴스 변수 선언을 통해 두가지 장점을 얻을 수 있습니다. 인스턴스 변수 선언을 통해 메서드 내부에서 인스턴스를 생성 하거나 파라미터로 필요한... 레벨1우아한테크코스레벨1 [우아한테크코스] 6주차 회고 블랙잭 미션 2단계 PR 을 늦게보내 아직 코드리뷰를 받지 않았지만 블랙잭 전체 피드백에 소개된 상태패턴 을 사용하였다. 블랙잭 1단계에서 플레이어(또는 딜러)가 가지는 정보가 이름, 카드, 게임 결과(승,무,패) 등이 있었고 요구사항중에 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다 가 있어서 게임 결과를 억지로 다른 클래스로 분리하였다. 어차피 모든 플레이어를 돌아가면서 확인 후... 우아한테크코스우아한테크코스 [우아한테크코스 #6] 추상화가 좋을지 판단해보자 처음에 이 두 개의 UI 영역을 하나의 클래스로 개발하였습니다. 새로운 비디오 리스트 UI 영역이 생긴다면 확장이 힘들것 같다 그래서 다음과 같이 VideoListComponent 클래스를 추상화하여 비디오 리스트 속성 별로 이를 확장하는 코드를 짜보았습니다. VideoListComponent : 이 클래스는 여러 비디오 리스트들이 공유하는 로직을 가지고 있습니다. 크게 마운트 이후 재 렌더... 우아한테크코스우아한테크코스 [우아한테크코스 #6] 네트워크 통신 테스트 요번 유튜브 미션은 다음과 같은 명세를 따릅니다. API URL을 인자로 받아 해당 API URL의 END_POINT들에만 요청을 보낼 수 있는 fetcher 모듈을 만들어 반환합니다. 이 코드들을 테스트 해봅시다 유튜브 API의 경우 일일 요청 횟수에 제한이 있기 때문에 직접 요청을 보내는 것이 아닌 유튜브 API가 반환하는 데이터와 동일한 구조를 가진 데이터를 반환하는 함수로 mockin... 우아한테크코스우아한테크코스 [우아한테크코스 #7] Browser History API를 통해 SPA처럼 라우팅을 적용해보자 SPA는 Single Page Application(싱글 페이지 어플리케이션)의 약자입니다. 말 그대로, 페이지가 1개인 어플리케이션이란 뜻입니다. Test Project의 기능 요구 사항 tab 버튼을 누르면 해당 탭에 맞는 화면이 나타난다. Test Project의 개발 환경 시작전 설정파일은 다음과 같습니다. STEP 1. 저는 천천히 나아가는걸 좋아합니다. pushState를 활용해보... 우아한테크코스우아한테크코스 프리코스 3주 과정을 되돌아보며 그렇게 Enum에 대한 리팩토링이 되었고, 아직 제 코드가 많이 어설프다는 것이 느껴지긴 하지만 이 리팩토링을 통해 함수를 15라인 이내로 미션의 요구사항을 지킬 수 있었습니다. 아직은 제가 글도 서투르고 정리에 익숙치 않아, 기록한 글들을 반복해서 다시 보면서 많은 사람들이 이해하고 도움이 될 수 있는 글이 되도록 보완할 계획입니다. 친구들과 프로젝트를 진행하면서 어떻게 하면 친구들이 조금... 우아한테크코스우아한테크코스 사용성을 고려해 객체를 설계하자 전략 패턴을 이용해 RouteEdge 객체에서 경로 검색 기준에 필요한 정보를 각기 다른 방식으로 가지고 올 수 있도록 코드를 구현한다면 조금 더 깔끔하게 구현할 수 있을 것이라 생각했다. 위와 같이 enum 클래스를 이용해 경로 검색 기준 별로 instance를 만들고, 각 instance가 전략 객체를 통해 자신에게 맞는 weight를 가져올 수 있게 리팩토링을 진행하였다. 만약 메서드의... 우아한테크코스JavaObject Oriented ProgrammingJava