레이어드 아키텍처(Layered Architecture)가 무엇인지 알아보자. 소프트웨어 아키텍처란? 소프트웨어 아키텍처란, 소프트웨어 시스템의 전체적인 구조와 구성요소들 간의 상호작용을 설계하는 것을 말한다. 쉽게 말해, 건축물의 뼈대를 잡는 것과 같은 과정이다. 건축물의 구조와 종류는 굉장히 다양하다. (철근 콘크리트, 철골, 목조, …) 어떤 자재를 사용하고, 해당 자재들을 어떻게 조립하는지에 따라 건축물의 특성은 크게 달라진다. 이와 같이 소프트웨어 아키텍처는 시스템의 전체적인 동작을 결정하고, 시스템의 품질 성능(성능, 확장성, 유지보수성, 보안 등)에 직접적으로 영향을 미친다. 소프트웨어 아키텍처를 선택할 때는 다양한 요소(요구사항, 복잡성, 기술 스택, 경험, 비용 및 시간 등)들을 고려하여..
최범균님의 프로그래밍 초식 - 지네릭 변성(java) 를 보고 정리한 글입니다. (출처: https://youtu.be/PtM44sO-A6g) 제너릭 예시 - List 자바에서 우리가 가장 쉽게 접하고 있는 제너릭 예시는 List 이다. 다음은 List 내부 구현이다. public interface List extends Collection { boolean add(E e); E get(int index); /***/ } List는 제너릭을 활용하기 때문에, 우리는 다양한 타입의 List를 선언할 수 있다. List messages = new ArrayList(); List users = new ArrayList(); 제너릭을 활용하면, 잘못된 타입의 값을 넣는 실수를 컴파일 타임에 예방을 해준다. 아래..
사용자가 입력한 이름 순서대로 플레이어의 카드를 보여줘야하는 요구사항이 있다. 해당 요구사항을 만족시키기 위해 어떤 코드를 작성할 수 있을까? 플레이어 리스트를 맵으로 변환하면 되지 않을까? 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에서는 함수형 인터페이스 기능을 제공하기 시작하며 (인자로 함수를 전달하고, 반환값으로 함수를 전달할 수 있게됨) 함수를 일급 객체로 사용할 수 있게 되었고, 함수형 프로그래밍이 가능해졌고, 람다식을 통해 함수형을 표현할 수..