3. 데코레이터 패턴
데코레이터 패턴동적으로 객체에 부가적인 책임을 더하는 패턴.상속으로 확장하는 것이 아닌, 객체들의 결합으로 역할을 확장한다.특히 원본 코드에 영향을 주지 않고 기능을 추가할 수 있다!!!하지만 각 데코레이터마다 클래스를 만들어줘야 한다. 그래서 같은 기능을 서로 다른 여러 클래스에 적용하려면 매번 새로운 클래스를 만들어 줘야 한다.(이를 해결하기 위한 동적
데코레이터 패턴동적으로 객체에 부가적인 책임을 더하는 패턴.상속으로 확장하는 것이 아닌, 객체들의 결합으로 역할을 확장한다.특히 원본 코드에 영향을 주지 않고 기능을 추가할 수 있다!!!하지만 각 데코레이터마다 클래스를 만들어줘야 한다. 그래서 같은 기능을 서로 다른 여러 클래스에 적용하려면 매번 새로운 클래스를 만들어 줘야 한다.(이를 해결하기 위한 동적
옵저버 패턴하나의 객체(서브젝트)가 변할 때, 자동으로 다른 여러 객체들(오브젝트)에게 영향을 동적으로 반영하는 일대다 관계 패턴이때 여러 오브젝트가 추가 될 수 있어야 한다. 배울 내용 요약 1. 서로 상호작용하는 객체들은 느슨하게 연결되어야 한다. 예제로 알아보자. NBA사무국에서는 선수들의 정보를 관리하고 있다.NBA방송국 NBC, TNT에서는
전략 패턴변경 가능하고 독립적인 알고리즘의 구성으로 만든 패턴 특징 특정한 계열의 알고리즘을 정의 각 알고리즘을 캡슐화 이 알고리즘들을 해당 계열 안에서 상호 교체 가능 배울 내용 요약 1. 다양하게 변화할 법한 내용은 캡슐화하자.2. 구현이 아닌 인터페이스로 프로그래밍하자.3. 상속보다는 구성(IS-A, HAS-A, 구현을 구분하라) IS-A
병렬 스트림컬렉션에 parallelStream을 호출하면 병렬 스트림이 생성된다.병렬 스트림이란 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림이다.병렬 스트림을 이용하면 모든 멀티코어 프로세서가 각각의 청크를 처리하도록 할당할 수 있다. 예시만약 n을 입력받아 1부터 n까지 합계를 구하는 메서드를 구현한다고 하자. 1234
인스턴스클래스는 객체의 속성을 정의하고 기능을 구현하여 만들어놓은 코드 상태. 이 클래스를 기반으로 new 키워드를 사용하여 인스턴스를 생성. 힙 메모리생성된 인스턴스는 **동적 메모리(heap memory)**에 할당된다. c/cpp에서는 프로그래머가 직접 사용한 메모리를 해제해줘야 하지만 자바는 garbage collector가 주기적으로 사용
함수 호출과 메모리1234567891011public static int add(int num1, int num2){ int result; result = num1 + num2; return result;}public static void main(String[] args){ int n1 = 20; i
컬렉터란 무엇인가?일단 예시를 하나 보자. 123456789101112131415//통화별로 트랜잭션을 그룹화한 코드(명령형 버전)Map<Currency, List<Transaction>> transactionsByCurrencies = new HashMap<>();for (Transaction transaction : tr
숫자형 스트림reduce 메서드로 스트림 요소의 합을 구하는 사례를 보자 123int calories = menu.stream() .map(Dish::getCalories) .reduce(0, Integer::sum); 이런 경우, reduce에 박싱비용이 포함되어 있다. 합계를 계산하기
a. 필터링스트림 요소를 선택하는 방법을 필터링이라고 한다.프레디케이트 필터링과 고유 요소만 필터링하는 방법에 대해 알아보자! 프레디케이트로 필터링하기프레디케이트를 인수로 받아 프레디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환하는 방식을 말한다.대표적으로 filter method가 있다. 예시로 보자! 123List<Dish> veget
a. 스트림이 뭘까?스트림은 자바 8 API에 새로 추가된 기능이다. 스트림을 이용하면 선언형(데이터를 처리하는 임시 구현 코드 대신 질의로 표현이 가능)으로 컬렉션 데이터를 처리할 수 있다. 쉽게 말하면, 스트림은 데이터 컬렉션 반복을 멋지게 처리하는 기능이라고 생각하자. 또한 스트림을 사용하면 멀티스레드 코드를 쓰지 않고도 투명하게 데이터를 병럴로 처리
a. 람다란 무엇인가?람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이다! 익명 : 람다 표현식에는 이름이 없다. 함수 : 람다는 메서드와 달리 특정 클래스에 종속되지 않으므로 함수라 부른다. 전달 : 메서드 인수로 전달하거나 변수로 저장할 수 있다. 간결성 : 익명 클래스보다 간결하다. 커스텀 Comparator 객체 구현 예시로 람다
‘녹색 사과를 모두 찾고 싶어요… 아니다! 150그람 이상인 사과를 모두 찾고 싶어요…. 생각해보니 150그람 이상이면서 녹색인 사과를 모두 찾아야 될 것 같네요..’ 이렇게 시시각각 변화는 사용자의 요구 사항을 최소 비용으로 대응하기 위해서는 어떻게 해야할까? a. 동적 파라미터화란…동적 파라미터화란 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록을