티스토리

newwisdom's log
검색하기

블로그 홈

newwisdom's log

newwisdom.tistory.com/m

갓 태어난 블로그

구독자
22
방명록 방문하기
반응형

주요 글 목록

  • JCF [10분 테코톡] ⚾️ 제이온의 JCF을 들으며 정리한 글입니다. JCF란? Java Collections Framework 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합 데이터를 저장하는 자료구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해놓은 것 도입 배경 JCF가 도입되기 이전에는 데이터를 그룹핑하는 방법으로는 Array, Vector, Hashtable 등이 있었다. 이 컬렉션들의 사용 목적이 같더라도 각각의 컬렉션에서 사용하는 문법이 다른 문제가 있었다. 때문에 공통 인터페이스가 필요하다고 판단하였고, 이로인해 탄생한 것이 JCF이다. JCF의 계층 구조 크게 Collection 인터페이스와 Map 인터페이스로 나눌 수 있다. Collecti.. 공감수 0 댓글수 0 2021. 12. 8.
  • DB Replication [10분 테코톡] ✌️ 영이의 Replication을 들으며 정리한 글입니다.. Replication이란? 한 서버에서 다른 서버로 데이터를 동기화하는 것 원본 데이터를 가지는 서버를 Source 서버 복제된 데이터를 가지는 서버를 Replica 서버 Why? 부하를 줄이기 위해서 (Scale-out) 갑자기 늘어나는 트래픽을 대응하는데 유연한 구조 데이터 백업 레플리카를 안하더라도 백업을 해야함 백업 과정은 실제 실행중인 쿼리들에 영향을 줄 수 있음 레플리카 서버에서 데이터 백업을 실행하여 소스 서버에서 백업 시 발생하는 문제 해결 데이터 분석 분석용 쿼리는 대량의 데이터를 조회하고, 쿼리 자체가 무거운 경우가 많음 소스 서버에서 하게 되면 문제가 될 수 있으니, 레플리카 서버에서 분석용 쿼리만 전용으.. 공감수 0 댓글수 0 2021. 11. 20.
  • [우아한 테크코스 3기] 웹 백엔드 지원 과정부터 프리코스까지 후기 2020년 12월 15일 작성했던 글 감사하게도 우형에서 주관하는 우아한 테크코스 웹백엔드 과정 1차에 선발이 되었고, 우테코에 지원하는 과정과 프리코스를 진행하며 느끼고 배운 것들을 기록해보려 한다. 내가 우테코에 대해 적은 글들이 정답은 아니지만, 혹시나 다음 우테코에 지원하려는 사람들이 이 글을 보게 된다면, 우아한 테크코스 프리코스를 참가한 사람은 이런 것을 느꼈구나!로 재밌게 봐주면 좋겠다 😀 지원의 서막 어느날. jojoldu님의 주니어 개발자 채용 정보에서 우아한 형제들에서 주관하는 소프트웨어 장인 양성 프로그램 우아한 테크코스 를 보게 되었다. 사이트를 쭉 보면서 이 프로그램이 어떤 프로그램이며, 어떤 교육 과정을 가지고 있는지 쭉 보게되었다. 출처 : 우아한 테크코스 웹 사이트 미션 기반.. 공감수 10 댓글수 0 2021. 10. 6.
  • 인덱싱 [10분 테코톡] 🍫 찰리의 인덱싱을 들으며 정리한 글입니다. Index란? 보통 배열의 위치를 인덱스라고 한다. 결국 데이터가 있는 위치를 특징할 수 있는 정보 ! 단어의 뜻 색인 - 어떤 것을 뒤져서 찾아내거나 필요한 정보를 밝힘 데이터베이스의 Index 사용 목적 대용량 데이터에서 원하는 데이터를 빠르게 조회하기 위해서이다. 결국 SELECT 쿼리의 대용량 데이터 조회 시 조회문 조회 속도를 향상시키기 위함이다. 하지만 INSERT, UPDATE, DELETE 시 성능을 조금 희생해야 한다. 혹은 대용량이 아니면 조회 시 성능 향상이 없나 ? 있긴 하지만 큰 효과는 볼 수 없을 것이다. Index의 작성 / 삭제 Index도 하나의 데이터베이스 객체이다. Oracle, DB2 등에서는 스키마 객체,.. 공감수 0 댓글수 0 2021. 10. 5.
  • Level 4. MVC 프레임워크 구현하기 - 정리 서블릿이란 Java로 HTTP 요청 및 응답을 처리하기 위한 표준이다. Jakarta Servlet defines a server-side API for handling HTTP requests and responses. 서블릿 표준은 인터페이스로 제공되며 이 구현은 서블릿 컨테이너 구현체인 Tomcat, Jetty, Undertow가 제공한다. Web Server vs WAS 짧게 말하자면, Web Server는 주로 정적인 컨텐츠를 처리하고, WAS는 주로 요청에 따라 응갑이 달라지는 동적인 컨텐츠를 처리한다. WAS는 일부 웹서버의 기능과 웹 컨테이너로 함께 구성된다. 앞 단의 웹 서버는 요청을 받아 웹 컨테이너로 넘겨주며, 웹 컨테이너는 이를 처리 후 다시 웹 서버로 전달한다. 자바에서는 이를 서.. 공감수 0 댓글수 0 2021. 9. 28.
  • 제네릭 [10분 테코톡] 🌱 시드의 제네릭을 들으며 정리한 글입니다. 제네릭이란? 클래스나 메서드에서 사용할 내부 데이터 타입을 외부에서 지정하는 기법 제네릭 클래스 클래스 선언에 타입 매개변수가 쓰이면, 이를 제네릭 클래스라고 한다. 정의 class Box { private T ob; public void set(T o) { ob = o; } public T get() { return ob; } } 클래스이름 옆에 꺽쇠 괄호와 타입 매개변수를 지정해주면 된다. Box aBox = new Box(); Box의 타입 매개변수를 외부에서 지정한 것이다. 클래스 내부에서 사용하는 타입은 지정한 타입이 된다. 하지만 실제로 지정한 타입으로 변경되는 것은 아니다. (타입 이레이져) 제네릭을 사용하는 이유 class Ap.. 공감수 0 댓글수 0 2021. 9. 25.
  • Level 4. HTTP 서버 구현하기 - 정리 1, 2 단계 - HTTP 서버 구현하기 & 리팩터링 HTTP HTTP 메시지는 ASCII로 인코딩된 텍스트 정보이며 여러 줄로 되어 있음 HTTP 프로토콜 초기 버전과 HTTP/1.1에서는 클라이언트와 서버 사이의 연결을 통해 공개적으로 전달되었음 사람이 읽을 수 있었던 메시지는 HTTP/2에서는 최적화와 성능 향상을 위해 HTTP 프레임으로 나누어짐 HTTP 메시지는 주로 소프트웨어, 브라우저, 프록시, 또는 웹 서버가 작성 HTTP Request 구조 요청 메시지는 다음과 같은 메시지로 날아온다. GET /index.html HTTP/1.1 Host: localhost:8080 Connection: keep-alive Accept: */* 먼저 내가 미션에서 만든 HTTP Request 객체의 구조.. 공감수 3 댓글수 0 2021. 9. 5.
  • Servlet과 Spring 2021-06-23글 [10분 테코톡] 🐶 코기의 Servlet vs Spring을 들으며 정리한 글입니다. 서블릿이란 처음 웹 서버는 정적인 페이지만 만들 수 있었음 웹서버에 프로그램을 붙여 동적인 페이지를 생성하기 시작 서블릿이 이 프로그램 중 하나 서블릿은 동적인 페이지를 만드는 프로그램 중 하나이다. 서블릿으로 요청을 처리하는 방법 서블릿은 이런 HTTP 요청과 응답을 좀 더 쉽게 다룰 수 있는 메서드(기능)을 제공 개발자들이 집중해야하는 비즈니스 로직에 집중할 수 있음 service() : 요청을 처리할 때 수행하는 메서드 개발자가 처리하고 싶은doXxx()를 재정의해주자! 서비스 메서드만 재정의해서 처리 방법을 지정 서블릿 컨테이너와 서블릿이 호출되는 과정 서블릿 컨테이너는 서블릿을 관리하는 .. 공감수 0 댓글수 0 2021. 8. 6.
  • CORS 2021-06-16글 [10분 테코톡] 🌳 나봄의 CORS을 들으며 정리한 글입니다. 배경 지식 SOP(Same Origin Policy) 다른 출처의 리소스를 사용하는 것에 제한하는 보안 방식 왜 SOP? CSRF Attack 때문! 사용자는 인증 토큰을 가지고 있는 상태 해커가 만든 주소로 이동하는데, 여기다 해커는 악의적인 스크립트를 심음 해커는 인증 토큰을 가지고 악의적인 스크립트를 실행할 수 있음 만약 송금이나 민감한 정보를 건드릴 시 굉장히 위험 여기서 SOP가 위력을 발휘 웹사이트 입장에서는 자신과 다른 출처를 가지기 때문에 위 요청은 받을 수 없다고 판단 출처(Origin)란? Protocol, Host, Port 세가지가 같아야 같은 출처라고 판단 참고로 인터넷 익스플로어는 출처판단에 P.. 공감수 0 댓글수 0 2021. 8. 6.
  • Level2. atdd-subway-fare 정리 2021-06-16글 요금 정책 로그인 사용자와 비로그인 사용자를 구별하여 요금 정책을 적용 PathController에서는 토큰이 없어도 예외가 아니었고 MemberController에서는 토큰이 없으면 예외였기에 Resolver에서는 각각에 맞는 처리를 해주어야 했음 맨 처음 페어랑 기능만 돌아가게 구현했을 때는 기존에 있는 로그인된 사용자에 대한 인가 과정을 거치는 Resolver를 재사용하도록 구현 이러기 위해서는 이 각각에 맞는 처리를 일간 Controller로 옮겨야 했음 AuthenticationPrincipalArgumentResolver @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContai.. 공감수 0 댓글수 0 2021. 8. 6.
  • Level2. atdd-subway-path 정리 2021-06-11글 STEP1, 2 JwtTokenProvider jwt 토큰 생성, 토큰 검증, 토큰에서 인증 정보 추출하는 유틸 클래스 AuthorizationExtractor HTTP의 Authorization Header에서 Bearer 타입인 경우 Access Token을 추출하는 유틸 클래스 AuthenticationPrincipalConfig @Configuration public class AuthenticationPrincipalConfig implements WebMvcConfigurer { private final AuthService authService; public AuthenticationPrincipalConfig(AuthService authService) { this.a.. 공감수 0 댓글수 0 2021. 8. 6.
  • Level2. atdd-subway-map 정리 2021-06-11글 중복되는 테스트 메서드 중복되는 테스트 메서드는 추출하자 테스트코드도 유지보수의 대상이며 하나의 문서이기 때문에 가독성을 고려하자 private ExtractableResponse addSection(String content) { return RestAssured.given().log().all() .body(content) .contentType(MediaType.APPLICATION_JSON_VALUE) .when() .post("/lines/{id}/sections", 1L) .then().log().all() .extract(); } 예외 처리는 Service에서 DAO에서 예외를 체크해주고 있었음 DAO는 말그대로 DB에 어세스하는 역할만 할 뿐 이 결과에 대한 예외는 서.. 공감수 0 댓글수 0 2021. 8. 6.
  • Level2. jwp-chess 정리 2021-06-09글 @ControllerAdvice 전역 예외를 처리하는데 사용 정리 @ControllerAdvice, @RestControllerAdvice REST API REST API 설계 방법을 찾아보고 고민하여 반영 정리 REST API 디자인 Profile 실제 애플리케이션에서 사용하는 DB는 Mysql 그대로 냅두고 테스트에서는 h2를 사용하여 h2 의 장점을 극대화해서 사용하도록 리팩또 테스트 DB를 따로 설정하기 위해 열심히 찾아보다가 application-properties를 활용하는 방안 학습 처음에는 application-{환경}-properties로 각각 파일을 만들어주었음 아래와 같은 리뷰를 받고 test.resource에 application-properties를 만들어줌 .. 공감수 0 댓글수 0 2021. 8. 6.
  • Cache 2021-05-31글 [10분 테코톡] 🐻큰곰의 Cache을 들으며 정리한 글입니다. 메모리 계층 구조 데이터를 저장하는 공간의 속도와 용량은 반비례 빠를수록 가격이 올라간다. 용량이 큰 저장장치는 속도가 느림 둘 다 잡기엔 비용이 너무 많이 듦 파레토의 법칙 원인 중 상위 20%가 전체 결과의 80%를 만든다. 많이 쓰는 20%가 80%의 효율을 차지한다. 데이터 지역성의 원리 자주 쓰는 데이터는 시간적 혹은 공간적으로 한 곳에 몰려있을 가능성이 높음 시간 지역성 for문에 조건 변수를 선언하면 해당 변수는 for문이 끝나기 전까지 계속 쓰일 확률이 높음 공간 지역성 for문에서 어떤 배열에 접근했을 때 해당 배열이 위치한 메모리 공간의 내용은 for문이 끝나기 전까지 계속 쓰일 확률이 높음 순차 지역.. 공감수 0 댓글수 0 2021. 8. 6.
  • 📋 테스트로 배우는 Spring Auth 강의 2021-05-28글 피드백 강의 인증 헤더 로그인을 통해 토큰을 발급 받은 후 헤더에 Authorization에 토큰을 실어보낸다. 왜 굳이 이 헤더에 토큰을 넣어 보낼까? HTTP 인증 HTTP 프로토콜의 정의이기 때문이다. 클라이언트가 "/" 요청을 보낸다. 서버는 접근을 할 수 있는지 확인하고, 없으면 401을 보낸다. 여기서는 basic이라는 방식으로 토큰을 검증하고 있다. 잘못되었으니 다시 요청해! HTTP 인증 스킴 Basic base64를 이용해 인코딩된 사용자의 id/pw 쌍의 인증 정보를 전달 안전을 위해 HTTPS(TLS) 연결 위에서 발생되어야 함 Bearer bearer token이라는 보안 토큰을 활용하는 인증 스킴 Outh2.0에서 사용하기 위해 만들어짐 JWT Json Web.. 공감수 0 댓글수 0 2021. 8. 6.
  • MVC 패턴 2021-05-26글 [10분 테코톡] 🧀 제리의 MVC 패턴, [10분 테코톡] 👩🏻‍💻👨🏻‍💻해리&션의 MVC 패턴을 들으며 정리한 글입니다. MVC 패턴 디자인 패턴 Model View Controller 3가지로 구분한 패턴 유지보수가 편해지는 코드 구성 방식 웹 애플리케이션 아키텍쳐의 역사 (JSP로 구성한) 웹 애플리케이션의 아키텍쳐 : 모델1 구성 : JSP + JavaBeand(Service) 뷰와 로직이 섞임 장점 : 구조가 단순 단점 : 출력과 로직 코드가 섞여 유지보수가 어렵다. (JSP로 구성한) 웹 애플리케이션의 아키텍쳐 : 모델2 구성 : JavaBean(Service) + JSP + 서블릿 MVC 구조 장점 : 뷰와 로직이 분리되어 유지보수가 쉽다. 단점 : 복잡하므로 작은 프.. 공감수 0 댓글수 0 2021. 8. 6.
  • DTO와 VO 2021-05-26글 [10분 테코톡] 🎼라흐의 DTO vs VO을 들으며 정리한 글입니다. DTO Data Transfer Object (데이터 전송 객체) 계층 간 데이터 교환을 위해 사용하는 객체 로직을 갖고 있지 않은 순수한 데이터 객체 데이터를 전송하는 바구니 getter/setter 메서드만을 가짐 VO value Object (값 객체) 값 그 자체를 표현하는 객체 서로 다른 이름을 가진 VO의 인스턴스가 모든 속성 값이 같다면 같은 객체 equals / hashCode를 오버라이드 필수 객체의 불변성을 보장 로직을 포함할 수 있음 DTO VS VO 웹 개발에서 사용하는 VO는 사실 DTO이다. 혼동의 원인은..? 이 책에서 getter와 setter가 있고, 데이터 전송을 위해 사용하는 객.. 공감수 0 댓글수 0 2021. 8. 6.
  • 📋 테스트로 배우는 Spring Configuration 강의 2021-05-25글 배경 지식 강의 스프링 컨테이너와 스프링빈 컨테이너 스프링 컨테이너에 빈을 등록하기 위해서는 Configuration이 필요하다. XML Annotation 기반의 configuration java bean configuration XML로 Configuration 설정하는 예시 userRepository와 userService를 빈으로 등록함 ApplicationContext context = new ClassPathXmlApplicationContext("application-config.xml"); String[] beanDefinitionNames = context.getBeanDefinitionNames(); ClassPathXmlApplicationContext로 해당 X.. 공감수 0 댓글수 0 2021. 8. 6.
  • 전략패턴 2021-05-24 글 [10분 테코톡] 📣 완태의 전략패턴을 들으며 정리한 글입니다. if - else의 문제점 example public double calculate(boolean isFirstGuest, boolean isLastGuest, List items) { double sum = 0; for (Item item : items) { if (isFirstGuest) { sum += item.getPrice() * 0.9; } else if (!item.isFresh()) { sum += item.getPrice() * 0.8; } else if (isFirstGuest) { sum += item.getPrice() * 0.8; } else { sum += item.getPrice(); } }.. 공감수 0 댓글수 0 2021. 8. 6.
  • Forward Proxy, Reverse Proxy, Load Balancer 2021-05-21글 [10분 테코톡] 🐿 제이미의 Forward Proxy, Reverse Proxy, Load Balancer을 들으며 정리한 글입니다. (Network) Proxy 정의 : 남을 대신하여 일을 처리함 (대리) Proxy Server 대신 처리하는 서버 클라이언트와 서버간의 중계 서버로, 통신을 대리 수행하는 서버 캐시/보안/트래픽 분산 등 여러 장점을 가질 수 있음 종류 Forward Proxy Reverse Proxy Forward Proxy 일반적으로 말하는 Proxy 예제 인터넷 속도를 향상 시키기 위해 proxy 설정 IP 추적을 방지하기 위해 Proxy 설정 클라이언트와 인터넷 사이에 위히 특징 캐싱 클라이언트가 요청한 내용을 캐싱 동일한 요청에 대한 응답 값을 캐싱함 장점.. 공감수 0 댓글수 0 2021. 8. 6.
  • 📋 배포 1단계 퀴즈 답 2021-05-01글 브라우저에서 google.com를 요청할 때 통신 과정이 어떻게 이루어질까요? 1. 주소창에 google.com를 입력하고 Enter를 누른다. 2. 웹 브라우저가 다음과 같은 구문으로 URL을 해석한다. scheme:[//[user:password@]host[:port]][/]path[?query][#fragment] scheme : 접근할 방법을 정의해 둔 프로토콜 이름 프로토콜 구분자인 : 와, IP 혹은 도메인 네임 정보가 필요한 프로토콜이면 // 프로코콜마다 특화된 정보 3. URL이 문법에 맞으면 Host 부분을 인코딩한다. 4. HSTS (HTTP Strict Transport Sercurity) 목록을 로드해서 확인한다. 있으면 첫 요청을 HTTPS, 없으면 HTTP .. 공감수 0 댓글수 0 2021. 8. 6.
  • 📋 배포 인프라 강의 1 - Public Cloud, 통신 확인하기 2021-04-27글 Public Cloud란? Cloud 클라우드는 인터넷을 은유적으로 표현하는 말. 어디에든 있고 어떤 형태로든 변할 수 있다. 정확히는 인터넷을 통해 원격으로 접근할 수 있는 모든 것을 의미한다. (메일, 드라이브 등) Cloud Computing? 서버, 데이터베이스, 네트워킹 등 컴퓨팅 리소스를 인터넷을 통해 관리하는 것 클라우드를 사용하는 이유? 관심사의 분리 서비스를 만들려고 할 때 서비스의 본질에 대해 집중을 하기 위해서 사용한다. 우리의 서비스는 저장소에 있는 데이터를 서버에서 원하는 형태로 가공해 네트워크를 통해 사용자에게 전달한다. 우리는 데이터, 서버, 네트워크를 어떻게 관리할지만 관심을 두었다. 그렇다면 실제 서비스 할때를 생각해보자. 서비스할 경우 고려할 점 데이.. 공감수 0 댓글수 0 2021. 8. 6.
  • 📋 Spring Core 막 적은 강의 노트 2021-04-20글 객체의 의존 관리는 스프링이 한다. 스프링은 개발자를 대신해서 객체들을 생성하고 관리하는 일을 한다. ChessService에서 ChessDao 의존하기 변경에 취약하다 의존 관계를 개발자가 직접 관리하려면 복잡하다. 스프링 컨테이너가 관리해준다. 컨테이너 담아놓는 용기 스프링에서는 스프링이 활용할 객체들을 담아놓은 용기를 말한다. Bean으로 등록하는 기준? 프로그램 별로 공통적으로 쓸 수 있는 대상 레이어에 대한 객체들을 재사용할 수 있는데 이들을 빈으로 관리한다. 상태가 없는 객체를 빈으로 등록한다. -> 빈으로 등록 하려면 상태가 없어야 한다. 설정의 메타 데이터(Configuration Metadata)를 이용해 스프링 컨테이너에 담아놓는다. 컨테이너에 담으면 빈으로 등록된.. 공감수 0 댓글수 0 2021. 8. 6.
  • [코드리뷰 정리] Level 1. 체스 미션 - Service Layer, DAO와 Repository 2021-04-10글 MVC와 Service 이번 미션에서 DB를 적용하면서 MVC 패턴에 추가로 Service 레이어를 도입하였다. 또한 DAO와 데이터 전달을 위한 DTO를 처음 사용했는데, DTO를 정리하고 DAO에 대해서도 새롭게 배운 부분이 많아 정리 ✍️ 휴의 코멘트에 답변을 달다가 나의 코멘트 내용을 정정해주면서 같이 주신 참고자료가 있는데, 서비스 계층과 비즈니스 로직이라는 개념이 다르다는 것을 제대로 인지하지 못하고 있었던 것 같다. 때문에 휴가 주신 MVC 패턴과 Service 레이어에 관한 글을 읽고 간단히 정리해본다. 각 계층에 대한 개념은 조금씩 상이하니 일단 블로그 글은 서비스 계측과 비즈니스 로직에 대한 참고 정도만 한 수준에서 정리하고 다음 레벨에서 상세히 잡아가는 것이 좋겠.. 공감수 0 댓글수 0 2021. 8. 6.
  • [코드리뷰 정리] Level 1. 체스 미션 - JDBC 2021-04-10글 JDBC (Java DataBase Connectivity) JDBC는 DB에 접근할 수 있도록 Java에서 제공하는 API로, 모든 Java의 Data Access 기술의 근간이다. 모든 Persistence Framework는 내부적으로 JDBC API를 이용한다. JDBC를 통한 DB 연결 1. 드라이버 로드 try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { System.err.println(" !! JDBC Driver load 오류: " + e.getMessage()); e.printStackTrace(); } 제공되는 클래스를 인스턴스화해서 내부적으로 저장해 메모리에 드.. 공감수 0 댓글수 0 2021. 8. 6.
  • [코드리뷰 정리] Level 1. 체스 미션 -DTO 이번 체스 미션에서는 웹 적용을 하면서 새롭게 배운 개념들이 너무 많았다. 때문에 이번 미션을 진행하면서 새로 배운 개념들과, 휴가 주신 피드백을 정리하는 방안으로 기록해야겠다 ✍️ step1에서의 DTO 사실 DTO의 개념은 대략 알고 있으나, 전 미션까지는 DTO의 필요성을 잘 못느끼고 있어서 사용하지는 않았었다. 이때 같은 경우는 현재 기물들을 나타내는 Pices 객체들만이 존재할 뿐인데 View에서는 64개의 position에 대한 정보를 출력하기 위해 Pieces의 메소드를 통해pieces.findByPosition(CACHE.get(xy)); 로 도메인에 대한 의존성이 생기고 있었다. 그래서 이를 제거하기 위해 휴의 리뷰대로 DTO를 만들어 View에 필요한 데이터들을 전달해주기로 하고 이 방.. 공감수 0 댓글수 0 2021. 8. 6.
  • 📝 객체지향 설계 강의 노트 2021-03-23글 랜덤넘버는 구현체이니까 Number로 받자 이러면 모두가 움직이는데 ? 의존성 주입 DI 스프링 프레임 워크는 DI를 구현하도록 강제되어 있다. 의존성 주입을 위해서는 스프링을 써야한다는 말이 있는데 그렇지 않다. 스프링 프레임 워크를 쓰지 않은 채로 DI를 해본 적이 있습니까 ? 생성자 의존성 주입 ❓ randomNumbers를 객체의 변수로 두고있는데, move()의 인수로 넘겨받는 것은 어떨까요? -> 상관 없음 move 메서드를 사용할 때마다 객체를 생성해야하니 인자가 많아졌을 떄는 생성자를 전달하는 것이 좋을 수도.. ❓ 의존성 주입을 위한 setter는 괜찮나요 ? -> 어떤 객체냐에 따라 다른데, 지금은 Cars의 상태 데이터를 가지고 있는 현제 예시에서는 final로 .. 공감수 0 댓글수 0 2021. 8. 6.
  • 📝 엘레강트 오브젝트 뽀개기 1 강의 정리 2021-03-20글 강의를 들으며 정리하기 ✍️ 엘레강트 오브젝트 문자열과 원시값을 포장해라 반환 값은 모두 일급 컬렉션 인자의 값으로 null을 절대 허용하지 마세요 public Iterable find(String mask) { if (mask == null) { // . } else { // . } } null을 체크하는 로직을 구현하는 것은 객체를 무시하는 것이다. mask 객체를 존중했다면 조건의 존재 여부를 객체 스스로 결정하게 했을 것이다. 이를 위해 원시 값과 문자열을 포장하면 null을 허용하지 않을 수 있다. 이 부분이 randomNumber를 무시하는 것이 아닌가. randomNumber를 객체로 만든다. (원시값 포장). 객체에게 메시지를 보내도록 리팩토링한다. 테스트 가능하게 오.. 공감수 1 댓글수 0 2021. 8. 6.
  • [코드 리뷰 정리] Level 1. 블랙잭 2021-03-15글 Controller에 있는 도메인 로직 게임 진행을 위해 Controller에 많은 역할을 구현했었다. 위 피드백을 받고 BlackjackGame이라는 객체를 만들어 게임의 진행을 하도록 구현했다. 각각의 플레이어들의 게임을 진행에 Input과 Output이 연결되어 있어서 처음 리팩토링에서는 BlackjackGame에서 플레이어들을 꺼내오고, 플레이어 하나 하나마다 게임을 진행하게 되었다. BlackjackController 일부 private void askWantToHit(Player player, BlackjackGame blackjackGame) { while (isAbleToAskHit(player, blackjackGame) && Answer.of(InputView.in.. 공감수 0 댓글수 1 2021. 8. 6.
  • [코드 리뷰 정리] Level1. 로또 2021-03-01글 1단계 피드백 객체인 Controller LottoFactory를 인스턴스 변수로 두지 않았던 이유는 Controller는 객체가 아니라 데이터를 가지면 안된다고 생각하고 있었다. 당연히 Domain만 객체라고 생각했었다. (모르는건 부끄러운게 아니다 🥲) 하지만 생각해보니 Controller도 도메인과 뷰를 이어주는 동시에, 객체를 생성하는 책임이 있다. 인스턴스 변수로 가지고 있게 된다면 getLottoTickets 메소드에서 매번 객체를 생성할 필요가 없다. 일단 이 코드에서 중요한 점은 어차피 지금 로또를 생성하는 책임을 컨트롤러에서 하고 있었으니 "불필요한 객체 생성을 방지하도록 인스턴스 변수로만들어서 재활용하자"가 목적이다. 반영한 커밋 반복되는 상수 처리 미션 데드라인을.. 공감수 0 댓글수 0 2021. 8. 6.
    반응형
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.