본문 바로가기

전체 글

(183)
함수형 인터페이스 정리 인터페이스명 추상 메소드 설명 Runnable void run() 기본적인 인터페이스, 매개변수와 반환값 없음 Supplier T get() 매개변수 없음, 제네릭타입 반환값 가짐 Consumer void accept() 제네릭 매개변수 하나, 반환값 없음(void) Predicate boolean test() 제네릭 매개변수 하나, Boolean 반환값 하나 Function R apply(T t) 제네릭 매개변수 하나와 다른 제네릭 반환값하나 Comparator int compare(T o1, T o2) 같은 제네릭 타입 매개변수 두개를 받고, Integer 반환값 하나 가짐, 객체간 비교를 위핸 compare를 위한 인터페이스 BiConsumer void accept(T t, U u) 서로다른 제네릭..
인터페이스 vs 추상 클래스 3주차 미션의 controller, service, 메뉴, 입출력부분을 구현하면서 느낀점은 반복적인 코드들이 많이 등장했다는 것이다.1주차 피드백에 반복은 모든 악의 근원이라는 말이 있었기에, 공통적인 메소드를 엮어내기 위해 인터페이스와 추상클래스의 개념을 도입하기 위해 고민했었다. 하지만 조금 미숙한 부분이 있었기에 이렇게 정리해보려 한다.이 역시 짧은시간 공부한 나의 알량한 지식으로 내린 결론이므로 이후 생각이 바뀔 수 있는 여지가 많다. 그냥 지금 저사람이 저런 생각을 가지고 있구나 라고 보면 되겠다. 1. 추상클래스 추상클래스는 아래의 형태로 만들 수 있다.abstract public class Controller { } 추상 클래스 내에서는public abstract void A();와 같은 형..
.gitignore git을 통해 관리될 필요가 없다고 느껴지면, .gitignore파일에 필요없는 파일의 형식을 지정해주어 커밋할 때 무시할 수 있게 된다. 나는 intellij, MacOs, Java를 이용하여 개발하고 있는데, 자바의 .class파일은 .java파일을 컴파일 시킨 파일로, 굳이 가지고 있을 필요가 없다. 또, intellij의 .idea, 이클립스의 metadata폴더는 개발자도구가 자동으로 생성하는 폴더로, 굳이 git으로 관리할 필요가 없다. 또 빌드를 통해 생성되는 jar, tar, zip, war등의 파일들과 .log의 로그파일, mac에서 사용되는 .DS_Store파일들도 git으로 관리될 필요가 없겠다. gitignore.io 라는 사이트에서 각 개발환경에 따라 자동으로 gitignore파일..
JAVA8) 스트림 API 1. 스트림 자바에서는 많은 양의 데이터를 저장하기 위해 배열, 컬렉션을 이용한다. 배열, 컬렉션의 데이터에 접근하기 위해서는 기존의 방법으로는 for문이나 iterator을 사용하여 접근했는데., JAVA8버전 부터 도입된 람다식과 람다식을 이용하는 스트림은 효율적으로 요소들에 접근하는 방식을 제공한다. 2. 스트림의 특징 스트림은 내부반복을 통해 작업을 수행한다. 생성된 스트림은 한번만 사용이 가능하다.(재사용할 수 없다) 원본 데이터를 읽기만 할 뿐, 변경하지 않는다. Lazy한 연산(지연 연산)을 통해 성능을 최적화한다. parallelStream()을 통해 병렬연산을 지원한다. 생성연산, 중개연산, 최종연산의 세가지 단계로 이루어진다. 3. 컬렉션 vs 스트림 컬렉션에 정의된 메소드 add, r..
JAVA8) 메소드 레퍼런스 람다 표현식에서 메서드 호출 1회로 코드가 끝나는 경우 메서드 레퍼런스를 이용하면 코드를 더 줄일 수 있다. docs.oracle.com/javase/8/docs/api/java/util/function/Function.html Function 라는 인터페이스가 있다. R을 파라미터로 입력받아 T로 반환하는 apply() 추상메소드가 있는 함수 인터페이스이다. Function func = str -> Integer.parseInt(str); 람다식을 사용하여 일급 객체로 만들면 이렇게 할 수 있다. System.out.println(func.apply("15")); Integer integer = func.apply("15"); 이렇게 출력하거나 값을 저장할 수 있을 것이다. 람다의 메서드 구현부분이 한..
JAVA8) 람다 표현식 람다 표현식의 특징 -> 를 이용한다. 익명 메서드처럼 이름이 없다. 메서드가 아닌 '함수'이다. 간단하다. (매개변수) -> (표현식) 의 형태를 가진다. (매개변수) -> { 표현식; 표현식; .. } 도 가능하다. 1. 일반 익명 메소드를 람다 표현식으로 바꾸기 아래의 함수형 인터페이스가 있다. public interface Movable { int move(int num); } 아래는 Car클래스에 구현하는 버젼이다. class Car implements Movable { @Override public int move(int num) { Return num = num * 2; } } 재 사용성이 없다면 우리는 익명 메소드를 이용하여 사용할 수 있다. public static void main(St..
JAVA8) 함수형 인터페이스 함수형 인터페이스는 하나의 abstract 메소드를 가지는 인터페이스이다. 앞선 함수형 프로그래밍의 특징 중 1급 객체라는 것이 있었다. 변수와 collection에 자료를 할당하고, 함수의 파라미터로 넘겨주고, 반환값으로 사용이 가능하다는 것. Java의 함수는 이런 역할을 할 수 없다. java에서 함수를 1급 객체처럼 다룰 수 있게 하기 위해 생긴 것이 함수형 인터페이스이다. interface Movable { void move(int num); } 이 인터페이스를 구현한 클래스로 만든 객체는 하나의 단 하나의 함수를 가진다. 이는 1:1관계가 되어 이 객체를 만드는 것은 이 함수를 사용한다는 말과 같게 됨으로써 1급 객체처럼 사용할 수 있다. 자바의 주요 함수형 인터페이스) Function : 하..
함수형 인터페이스 메소드 : 매개변수의 값과 필드의 값에 따라 반환하는 값이 다를 수 있다. 함수 : 매개변수의 값이 일정하면 반환값도 일정하다. public void draw() { Money money = Bank.login(); if (money != null) { process(money); } } 이 함수에서 draw() 외부의 login()이 반환하는 Bank의 상태는 함수의 입력이다. 그 값을 모른다면 draw() 함수가 어떻게 작동할지 알 수 없다. Bank.login()이 반환하는 값에 따라 draw()가 내놓는 결과값(출력)은 다를 것이다. 이를 Side-effec(부작용, 부수작용)이라 한다. “우리가 이 함수를 호출하려면 인수 목록에는 없지만 필요한 것들이 무엇이고, 반환 값에 반영되지 않으면서 하는..