목록전체 글 (102)
영호
개요 레벨2 자동차 경주 미션을 진행하면서 201응답을 반환하는 상황이 있었다. 이 과정에서 ResponseEntity의 created는 왜 URI를 인자로 받는지 페어와 이야기 했었다. 당시에 추측만 하고 명확하게 답을 내지 못해서 따로 공부한 내용을 정리해보려고 한다. ResponseEntity.created(URI)구현코드 public static BodyBuilder created(URI location) { return status(HttpStatus.CREATED).location(location); } ResponseEntity클래스의 created메서드는 위와 같이 구현되어 있다. parameter에 URI가 있다. 도대체 저 URI가 뭐지? 당시 디투와 얘기 했을 때는 redirect를 ..
개요 Spring의 IoC container를 알아보기 위해 아래와 같은 개념들에 대해 정리한다. IoC란? Spring에서 IoC를 제공하기 위한 인터페이스 IoC컨테이너 안에서 bean을 관리하는 생명주기 IoC(Inversion of control) 위 단어를 해석하면 ‘제어의 역전’이다. 나는 여기서 제어라는 것은 의존성 관리를 의미한다고 생각한다. 객체지향 프로그래밍은 다양한 객체를 생성하고 객체끼리의 의존성을 관리하면서 객체를 사용하는 코드를 작성해 서비스를 구성한다. 만약 A객체에서 B객체의 기능을 사용할 필요가 있어서 A클래스 내부에서 B객체를 생성하는 코드를 작성하게 되면 A와 B는 강하게 결합된다. class ServiceA { public void doSomething() { } } ..
기존 JDBC의 문제점 반복 코드가 너무 많다. 여기서 반복하는 작업은 아래와 같다. DB연결을 위한 자원 명시하기 파라미터 바인딩 마지막에 자원 반납하기 이 부분은 try with resource로 어느정도 해결이 가능하다. 결과 바인딩 JDBC는 아래 코드 처럼 디비 연결, 파라미터 바인딩, 결과 변환 등등을 다른 쿼리를 날리는 메서드에서도 반복해야 한다. public List findAllGameRooms() { String selectQuery = "SELECT game_room_id, status FROM game_room"; try (Connection connection = dbConnection.getConnection()) { PreparedStatement preparedStatemen..
SimpleJdbcInsert란 기존 JdbcTemplate를 이용한 Insert보다 손쉽게 데이터를 저장하기 위해 제공하는 구현체다. 데이터 저장 후 primaryKey를 알고 싶은 경우 SimpleJdbcInsert를 이용해 keyHolder없이 구현할 수 있다. SimpleJdbcInsert와 JdbcTemplate제공 기능 차이 SimpleJdbcInsert SimpleJdbcInsert는 데이터를 저장하기 위한 기능만 제공하기 위해 SimpleJdbcInsertOperations를 구현하고 있다. execute() executeAndReturnKey() withTableName() 등등... JdbcTemplate JdbcTemplate은 데이터 저장뿐만 아니라 조회, 삭제, 업데이트 등의 기능..
개요 generic에서 왜 기본타입을 사용할 수 없는지 궁금해서 찾아본 내용입니다:) generic등장 이전 generic이 존재하지 않을 땐 아래 코드처럼 List를 사용할 수 있었습니다. List integerList = new ArrayList(); integerList.add(new Integer(1)); Integer integer = (Integer) integerList.get(0); 해당 List는 Object타입을 원소를 받을 수 있습니다. 즉, 기본 타입을 제외한 모든 참조타입을 원소로 넣을 수 있습니다. 이러한 방식의 문제점은 코드에서 바로 살펴볼 수 있습니다. get으로 원소에 접근할 때 명시적인 형변환 작업이 필요하다. 만약 String타입 원소를 넣었는데 Interger로 변환하..
우테코 5기 레벨1 체스미션을 진행하면서 커맨드 패턴을 적용한 과정을 정리해보겠습니다:) 왜 적용했나? 체스미션에는 다양한 명령어가 있다. 움직이는 MOVE, 게임을 시작하는 START, 게임 점수를 보여주는 STATUS등등이 있다. 1단계 컨트롤러를 구현하면서 시간이 없어서 명령어마다 분기문을 통해 수행되는 로직을 구현한 결과 매우 더러운 코드가 나왔다. private void play(ChessGame chessGame) { List userCommandInput = repeatBySupplier(inputView::requestUserCommandInGame); try { GameCommand command = GameCommand.from(userCommandInput); if (isExitCom..
개요우아한테크코스 체스미션 진행 중 빈 리스트를 반환해야 하는 일이 있었는데, 그동안 빈 리스트를 반환할 때 무심코 사용하던 코드들에 대해 어떤 차이가 있는지 궁금해서 찾아본 과정에 대해 작성해보겠습니다:) Collections.emptyList()처음에는 단순히 Collections에서 정적 팩토리 메서드를 이용해 빈 리스트를 생성해 반환해주나? 라는 생각으로 접근했습니다. Collections.emptyList()내부 구현을 봤더니 예상하지 못했던 코드가 있었습니다. EmptyList라는 클래스가 존재한다.EmptyList라는 클래스가 별도로 존재했고 이를 List타입으로 캐스팅해 반환해주고 있었습니다.EmptyList의 Collections의 메서드들에 대해 빈 리스트에 맞게 정의되어 있습니다. g..
개요 우아한테크코스 프롤로그 학습로드맵에 있는 다형성에 대해 공부한 내용을 정리해 보겠습니다 :) 다형성? 단어만 보면 "다양한 형태를 가질 수 있는 성질인가?"라는 생각이 먼저 들었습니다. 위키백과를 보면 다형성을 아래와 같이 설명하고 있습니다. 프로그램 언어의 각 요소들(상수, 변수, 식, 오브젝트, 함수, 메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다. 즉, 하나의 객체, 메서드에 다양한 타입들을 갈아 끼울 수 있는 객체지향의 특징이다. 이렇게 말만 보면 잘 이해가 가지 않으니 코드로 적용해 보겠습니다. 다형성을 구현하는 방법에는 오버로딩, 오버라이딩도 있지만 이 글에서는 인터페이스를 통한 다형성에 대해 살펴보겠습니다. 인터페이스를 통한 다형성 고스톱을 할 때, 패를..