본문 바로가기

Dev/Java5

[Design Pattern] Observer Pattern 헤드퍼스트 디자인 패턴 자바 책을 읽고 정리한 글입니다. 옵저버 패턴이란? 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 상태를 알리고 내용이 갱신되는 방식이다. 일대다(one-to-many)의 의존방식을 사용한다. 주제 : 상태 값을 가지고있는 객체 옵저버 : 상태가 변경되면 주제로부터 알림을 받는 객체 → 옵저버는 주제에 의존하며 주제의 상태가 바뀌면 옵저버에게 연락이 간다. 연락 방법에 따라 옵저버의 값이 갱신될 수 있다. 기상정보 애플리케이션 예시 개요 WeatherData객체를 사용하여 현재 날씨, 기상 통계, 기상 예측 세 항목을 디스플레이 장비에서 갱신하면서 보여주는 애플리케이션을 만들어보자. 조건 1. WeatherData객체 (주제) : 기상 스테이션으로부터 기상 정보 데이터를.. 2022. 7. 10.
Serialize & Deserialize in Java 자바에서의 직렬화 개념과 사용법을 간단하게 공부하고 정리한 글입니다. 직렬화가 필요한 이유? 데이터의 메모리 구조는 크게 2가지로 나뉜다. 1) 값 형식 데이터 : int, float, char 등 값 형식 데이터 -> 스택에 메모리가 쌓여서 직접 접근이 가능하다. 2) 참조 형식 데이터 : 배열, 클래스, 인터페이스 등 객체를 선언하면 힙에 메모리가 할당되고 스택에서 이 메모리를 참조한다. 값 형식의 데이터는 스택 메모리에 저장되기 때문에 바로바로 접근해서 가져오는 것이 가능하다. 참조 형식 데이터는 힙에 할당되어있는 메모리 번지 주소를 가지고 있는 것이라서 직접 접근이 안된다. 이때 직렬화를 하게 되면, 메모리의 주소 값이 가지는 데이터들을 값 형식(byte)으로 변환해줌으로써 직접 접근이 가능하게 .. 2022. 6. 26.
[모던자바인액션] 스트림API가 지원하는 다양한 연산 자바8과 자바9에 추가된 스트림API의 다양한 연산을 살펴보자 1. 필터링 필터링은 스트림의 요소를 선택하는 방법이다. 프레디케이트로 필터링 방법과 고유 요소만 필터링하는 방법이 있다. 1) 프레디케이트 필터링 프리디케이트(불리언을 반환하는 함수)를 인수로 받아서 프레디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환한다. List vegetarianMenu = menu.stream() .filter(Dish::isVegetarian) .collect(toList()); 2) 고유 요소 필터링 스트림은 고유 요소만 필터링하는 distinct 메서드를 지원한다. 리스트의 모든 짝수를 선택하고 중복을 필터링하는 예제이다. List numbers = Arrays.asList(1,2,1,3,3,2,4); n.. 2022. 2. 19.
[모던자바인액션] 컬렉션과 스트림의 차이점(Stream vs Collection) 스트림과 컬렉션 자바의 기존 컬렉션과 새로운 스트림은 순차적으로 값에 접근한다. DVD와 인터넷 스트리밍을 예로 비교해보자. DVD는 이미 영화가 저장되어서 판매된다. 이는 컬렉션에 비유할 수 있다. 반면 인터넷 스트리밍은 사용자가 시청하는 부분의 몇 프레임을 미리 내려받는다. 때문에 대부분의 값을 처리하지 않은 상태에서 미리 내려받은 프레임부터 재생이 가능하다. 이를 스트림으로 비유할 수 있다. 컬렉션 = DVD 자료구조가 포함하는 모든 값을 메모리에 저장한다. 컬렉션의 모든 요소는 컬렉션에 추가하기 전에 계산되어야 한다. 생산자 중심 → 팔기도 전에 창고를 가득 채움. 만약 소수를 저장하는 컬렉션을 만들 시에, 끝도 없이 모든 소수를 포함하려 할 것이므로 무한루프를 돌게 된다. 영화의 모든 프레임들이.. 2022. 1. 28.
[모던자바인액션] 람다식과 함수형 인터페이스 람다 표현식은 어디에, 어떻게 사용할까? -> 함수형 인터페이스라는 문맥에서 사용할 수 있다. 함수형 인터페이스 람다식은 익명 클래스의 객체와 동등하다. 그렇다면 람다식으로 정의된 익명 객체의 메서드는 어떻게 호출할 것인가? 타입 f = (int a, int b) -> a>b?a:b; 먼저 참조 변수 f에 익명 객체를 저장해 보았다. 그렇다면 참조변수 f의 타입은 어떤 것이 와야 할까? 일단 참조 변수이기 때문에 클래스 또는 인터페이스가 가능하며 람다식과 동등한 메서드가 정의되어있어야 한다. 예를 들어 아래와 같이 정의된 인터페이스가 있다고 가정하자. interface MyFunction{ public abstract int max(int a, int b); } MyFunction 인터페이스를 구현한 익.. 2022. 1. 12.
반응형