체스 미션에서 전략패턴을 도입하면서 다음과 같은 클래스 상속 구조를 갖추게되었다. https://xxeol.tistory.com/22 [체스 미션] 상속 대신 전략패턴 도입하기 나는 체스 미션의 설계를 아주 많이 갈아엎었다.. 대공사가 정말 많았다. 한 4-5번 정도? (이 과정은 다른 포스팅에서 기록해두려고 한다.) 오늘은 상속으로 이루어져있던 코드를 전략패턴을 도입 xxeol.tistory.com 여기서 한 가지 문제점이 있다. public class Piece { protected final Color color; protected final PieceType type; public Piece(Color color, PieceType type) { validateColor(color); this.c..
나는 체스 미션의 설계를 아주 많이 갈아엎었다.. 대공사가 정말 많았다. 한 4-5번 정도? (이 과정은 다른 포스팅에서 기록해두려고 한다.) 오늘은 상속으로 이루어져있던 코드를 전략패턴을 도입해 조합으로 바꾼 대공사에 대해 설명하고자 한다. 기존의 코드(step1)에서, 나는 Piece라는 추상 클래스를 상속하는 방법으로 각 기물들을 구현했다. Piece라는 추상클래스가 있고, 기물별로 구현체가 존재했다. 하지만 해당 코드에서 한가지 찜찜한 점이 있었다. public class Bishop extends Piece { /***/ @Override public PieceType getType() { return PieceType.BISHOP; } } 그것은 바로 위와 같이 getType 함수를 통해 해당..
사용자가 입력한 이름 순서대로 플레이어의 카드를 보여줘야하는 요구사항이 있다. 해당 요구사항을 만족시키기 위해 어떤 코드를 작성할 수 있을까? 플레이어 리스트를 맵으로 변환하면 되지 않을까? public Map getPlayerToCard(List players) { return players.stream() .collect(Collectors.toMap(Player::getName, Player::getCards)); } 위와 같이 코드를 작성했고, 위의 코드에서는 stream으로 List를 순회하며 map으로 바꾸어준다. 우리는 당연히 요구사항에 맞는 결과값을 예상한다. 예상이 맞을까? 한 번 출력해 확인해보자. 아쉽게도 순서가 지켜지지 않았다. 그 이유는 무엇일까? Collectors.toMap 구..
일급 함수의 조건 다음 세 가지 조건을 충족하는 함수를 일급 함수라 한다. 변수(variable)에 담을 수 있다. 함수의 인자(parameter)로 전달할 수 있다. → 동작 파라미터화 함수의 반환값(return value)으로 전달할 수 있다. → 고차 함수 즉, 일급 함수는 객체처럼 사용 가능한 함수이다. java에서 일급 함수? 원래 java는 함수를 일급 객체로 취급하지 않았다. 즉, 함수를 파라미터로 넘기거나 반환 값으로 전달할 수 없었다. 하지만 java8 이후, java에서는 함수형 인터페이스 기능을 제공하기 시작하며 (인자로 함수를 전달하고, 반환값으로 함수를 전달할 수 있게됨) 함수를 일급 객체로 사용할 수 있게 되었고, 함수형 프로그래밍이 가능해졌고, 람다식을 통해 함수형을 표현할 수..