목록2025/05 (10)
devseop08 님의 블로그
5.1 필터링5.1.1 프레디케이트로 필터링스트림 인터페이스는 filter 메서드를 지원한다.filter 메서드는 프레디케이트를 인수로 받아서 프레디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환한다.List vegetarianMenu = menu.stream() .filter(Dish::isVegitarian) .collect(toList());5.1.2 고유 요소 필터링스트림은 고유 요소로 이루어진 스트림을 반환하는 distinct 메서드도 지원한다.고유 여부는 스트림에서 만든 hashCode, equals로 결정된다.List numbers = Array.asList(1, 2, 1, 3..
4.1 스트림이란 무엇인가?스트림은 자바 8 API에 새로 추가된 기능이다.스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다, 즉 데이터를 처리하는 임시 구현 코드 대신 질의로 표현할 수 있다는 것이다.스트림을 이용하면 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다.다음 예제는 저칼로리의 요리명을 반환하고 칼로리를 기준으로 요리를 정렬하는 자바 7 코드다.List lowCaloricDishes = new ArrayList();for (Dish dish : menu){ if(dish.getCalories() (){ public int compare(Dish dish, Dish dish2){ return Integer.compare(dish1, ..
1.1 자바 역사의 흐름자바 8 등장 이전까진, 멀티 코어를 사용하는 병렬 실행 환경을 잘 활용하지 못했다.하나의 코어 외의 나머지 코어를 활용하려면 쓰레드를 사용해야 한다고 했지만, 쓰레드를 사용하면 관리가 어렵고 많은 문제를 야기했다.자바는 이러한 병렬 실행 환경을 쉽게 관리하고 에러가 덜 발생하는 방향으로 진화하려 노력했다.자바 8에서는 병렬 실행을 새롭고 단순한 방식으로 접근할 수 있는 방법을 제공한다.자바 9에서는 리액티브 프로그래밍이라는 병렬 실행 기법을 지원한다.RxJava(리액티브 스트림 툴킷)를 표준적인 방식으로 지원한다.자바 8은 자바 역사의 흐름에 있어서, 멀티코어 프로세서의 쉽고 효과적인 활용과 간결한 코드의 작성이라는 요구 사항을 기반으로 한다.이러한 요구 사항을 충족하고자 자바 ..
자바 8부터는 익명 클래스가 아닌 람다를 이용하여 동작 파라미터화를 쉽게 사용할 수 있게 되었다.동작 파라미터화는 계속해서 변화하고 추가되는 요구사항에 유연하게 대응하는 코드를 구현 할 수 있도록 도와준다.동작 파라미터화는 정의한 코드 블록을 다른 메서드로 전달할 수 있도록 한다. => 동작 파라미터화를 이용하면 더 유연하고 재사용할 수 있는 코드를 만들 수 있다.익명 클래스를 통해서도 동작 파라미터화를 구현할 수 있지만, 코드가 깔끔하지 않다.3.1. 람다란 무엇인가?람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것.람다 표현식에 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다.람다의 특징익명 : 보통의 메서드와 달리 이름이 없으므로 익명..
"유일하게 변하지 않는 것은 모든 것이 변한다는 사실 뿐이다."기능을 중심으로 구조를 종속시키는 접근법 = 범용적이지 않고 재사용 불가하고 변경에 취약한 모델을 만든다.구조를 중심으로 기능을 종속시키는 접근법 = 범용적이고 재사용 가능하고 변경에 유연하게 대처 가능한 모델을 만든다.객체지향은 자주 변경되는 기능이 아니라 안정적인 구조를 기반으로 시스템을 구조화한다.기능이 아니라 안정적인 구조를 기반으로 시스템을 분할하는 객체지향적인 접근법은 역할, 책임, 협력을 기반으로 시스템의 기능을 구현하는 책임-주도 설계의 본질을 이해하는 데도 도움이 될 것이다.기능 설계 대 구조 설계모든 소프트웨어 제품의 설계에는 두 가지 측면이 존재한다.하나는 기능 측면의 설계이고, 다른 하나는 구조 측면의 설계다.설계의 가장..
"의도는 '메시징'이다. 훌륭하고 성장 가능한 시스템을 만들기 위한 핵심은 모듈 내부의 속성과 행동이 어떤가보다는 모듈이 어떻게 커뮤니케이션하는가에 달려있다."자율적인 책임설계의 품질을 좌우하는 책임객체지향 공동체를 구성하는 기본 단위는 '자율적'인 객체다자율적인 객체란 스스로 정한 원칙에 따라 판단하고 스스로의 의지를 기반으로 행동하는 객체다.자율적인 객체란 스스로의 의지와 판단에 따라 책임을 수행하는 객체다.적절한 책임이 자율적인 객체를 낳고, 자율적인 객체들이 모여 유연하고 단순한 협력을 낳는다.협력에 참여하는 객체가 얼마나 자율적인지가 전체 애플리케이션의 품질을 결정한다.자신의 의지에 따라 책임을 수행할 수 있는 자유객체가 책임을 자율적으로 수행하기 위해서는 객체에게 할당되는 책임이 자율적이어야 ..
"우리 모두를 합친 것보다 현명한 것은 없다. "객체의 세계에서 협력이라는 문맥이 객체의 행동 방식을 결정한다. 중요한 것은 개별 객체가 아니라, 객체들 사이에 이뤄지는 협력이다. 협력이 자리를 잡으면, 저절로 전체의 행동이 드러나고 뒤이어 적절한 객체의 상태가 결정된다. 협력요청하고 응답하며 협력하는 사람들협력은 다수의 요청과 응답으로 구성되며 전체적으로 협력은 다수의 연쇄적인 요청과 응답의 흐름으로 구성된다. 책임책임의 분류협력에 참여하는 객체들은 목표를 달성하는 데 필요한 책임을 수행한다. 객체의 책임은 '객체가 무엇을 알고 있는가'와 '무엇을 할 수 있는가'로 구성된다.책임의 분류하는 것객체를 생성하거나 계산을 하는 등의 스스로 하는 것다른 객체의 행동을 시작시키는 것다른 객체의 활동을 제어하고 ..
"일단 컴퓨터를 조작하는 것이 추상화를 구축하고, 조작하고, 추론하는 것에 관한 모든 것이라는 것을 깨닫고 나면 (훌륭한) 컴퓨터 프로그램을 작성하기 위한 중요한 전제 조건은 추상화를 정확하게 다루는 능력이라는 것이 명확해진다."추상화를 통한 복잡성 극복진정한 의미에서 추상화란 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 놀라운 본질을 드러나게 하는 과정이라고 할 수 있다.추상화는 그 목적에 부합하는 것이어야 한다. 어떤 추상화도 의도된 목적이 아닌 다른 목적으로 사용된다면 오도될 수 있다.추상화어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다.복잡성을 다루기 위해 추상화는 두 가지 차원에서 이뤄진다.첫 ..