자바 (98) 썸네일형 리스트형 람다 표현식과 this 키워드에 관하여 @FunctionalInterface interface MyFunction { R apply(T t); } 위와 같은 함수형 인터페이스가 있을 때 익명클래스를 작성하여 인터페이스의 인스턴스를 얻을 수 있다. MyFunction plus30 = new MyFunction() { @Override public Integer apply(Integer t) { return t + 30; } }; 물론 람다표현식으로도 바꿀 수 있다. MyFunction plus30 = i -> i + 30; 보통의 많은 자료에서, 익명클래스를 람다표현식으로 바꿔가며 설명을 이어간다. 어그런데 혹시, 혹시. 람다를 익명클래스로 바꿀 수는...? 그럴 수 있다. 물론. 하지만 함수형 인터페이스 내에는 default 메소드 또한 다수.. 자바 Stream API 자바 1.8에 도입된 Stream API에 대해 알아보자. 다음은 Stream 인터페이스에 적힌 주석의 첫 문장으로, 스트림의 정의를 확인할 수 있다. A sequence of elements supporting sequential and parallel aggregate operations. 번역(야매)을 하자면 원소의 순차적이고 병렬적인 연산을 종합지원하는 시퀀스다. 여기서 시퀀스는 사전적 의미를 따르는거 같고, 원소라 함은 컬렉션, 배열, 파일, 정규표현식 패턴 패처, 난수 생성기, 다른스트림을 예로 들수 있다.(이펙티브자바3) 다음은 우리 팀 멤버의 나이를 담은 ArrayList이다. List teamMemberAge = new ArrayList(); teamMemberAge.add(48); te.. [자바] 옵저버패턴 : java.util.Observer, Observable 이전 포스팅 https://dev-jones.tistory.com/154 [자바] Observer 패턴 '관찰자' 관찰하는 객체를 'Observer' 인터페이스를 구현하도록 하고, 관찰하려는 객체는 'Observable'을 상속한다. 다음예제는 난수를 만들고 이를 'Observer'가 관찰하고, 그 수를 출력하도록 한다. packa dev-jones.tistory.com 에서는 Observer 인터페이스를 직접 구현해 사용했었다. 이번에 소개할 내용은 이미 존재하는 java.util.Observer 인터페이스와 java.util.Observable 클래스를 직접 이용하여 똑같은 예제를 다른 코드로 작성하였다. Observable클래스의 setChanged메소드와 발생한 난수가 notifyObservers.. [자바] Chain of Responsibility 패턴 다수의 객체를 사슬(chain)처럼 연결해두고, 그 객체의 사슬을 차례로 돌아다니며 목적한 객체를 결정하는 방법을 생각할 수 있다. 이를 Chain of Responsibility 패턴이라 한다. 예제는 '트러블이 발생해서 누군가 처리해야하는 상황'이다. package chainofresponsibility; /** * 발생한 트러블을 표현하는 클래스 * @author dev-jones * */ public class Trouble { private int number;// 발생한 트러블 번호 public Trouble(int number) { this.number = number; } public int getNumber() { return number; } @Override public String .. [자바] Template Method 패턴 package templateomethod; public abstract class AbstractDisplay { public abstract void open(); public abstract void print(); public abstract void close(); public final void display() { open(); for (int i = 0; i < 5; i++) { print(); } close(); } } package templateomethod; public class CharDisplay extends AbstractDisplay { private char ch; public CharDisplay(char ch) { this.ch = ch; } @Override pub.. InputStream과 InputStreamReader package main06; import java.io.IOException; import java.io.InputStream; public class Main { public static void main(String[] args) { InputStream in = System.in; while(true) { try { int i = in.read(); System.out.println(i); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } 결과: 다음은 InputStreamReader의 예제이다. package main06; import java.io.IOException; import j.. [자바] Proxy 패턴 package proxy; public interface Printable { public void setPrinterName(String name); public String getPrintName(); public void print(String str); } package proxy; public class Printer implements Printable { private String name; public Printer() { heavyJob("Printer의 인스턴스 생성 중"); } public Printer(String name) { this.name = name; heavyJob("Printer의 인스턴스(" + name + ") 생성 중"); } @Override public void.. [자바] Abstract Factory 패턴 추상적인 공장에서 추상적인 부품을 조합해 추상적인 제품을 만든다라.. 바로 예제부터 살펴보자. 예제는 계층구조를 가진 Link 페이지를 HTML 파일로 만들기 이다. 추상 부품 package abstractfactory.factory; /** * Link와 Tray의 상위 클래스 * @author dev-jones * */ public abstract class Item { protected String caption; public Item(String caption) { this.caption = caption; } public abstract String makeHTML(); } package abstractfactory.factory; /** * HTML의 하이퍼링크를 추상적으로 표현한 클래스 * .. [자바] bridge 패턴 bridge. 다리라는 뜻이다. 둘 사이의 이어진 무언가란 뜻인데, 이 둘의 컨셉을 이해하는게 중요하다. 그게 뭐냐면 1. 기능의 클래스 계층 2. 구현의 클래스 계층 어떤 클래스가 있을 때, 이 클래스에 새로운 기능(메소드)을 추가하고 싶을 때 우리는 이 클래스를 상속하는 하위 클래스를 작성할 수 있다. 이때 부모자식간의 계층이 생겼는데 * 상위 클래스는 기본적인 기능을 가지고 있다. * 하위 클래스에서 새로운 기능을 추가한다. 와 같은 특징을 가지고 있다. 이와 같은 클래스 계층을 '기능의 클래스 계층'이라고 한다. 또 다른 새로운 기능을 추가하려면 자식의 자식, 하위클래스를 하나도 더 생성함으로써 계층이 더욱 깊어졌다할수 있다. 템플릿 메소드 패턴처럼 어떤 인터페이스와 그것을 구현한 구현클래스의 관.. [자바] composite 패턴 디렉토리(directory) 통산 윈도우에서는 폴더라고 부르는 이것은 '상자 안의 상자', 즉 디렉토리 안에 디렉토리나 파일을 가지고 있는 재귀적인 형태의 구조를 띄고 있다. 디렉토리 안에 넣을 수 있는 것, 디렉토리와 파일을 아울러 '디렉토리 엔트리(directory entry)'라고 한다. 디렉토리 안의 내용을 조사한다할때, 그것이 하위디렉토리인지, 파일인지 모르지만 통상 디렉토리 엔트리를 조사한다고 말할 수 있다. 이는 마치 그릇과 내용물의 같은 취급으로 표현할 수 있다. 마치 그릇 안에 내용물을 넣을 수 있고 더 작은 그릇을 넣을 수 있듯이... 이와 같이 그릇과 내용물을 동일시 해서 재귀적인 구조를 만들기 위한 디자인패턴을 "composite 패턴"이라고 한다. 그럼이제 파일과 디렉토리를 도식적.. 이전 1 2 3 4 5 6 ··· 10 다음