전체 글78 [Java] 메서드 참조(Method Reference) 메서드 참조란 이미 정의되어 있는 메서드를 사용해 람다식을 대신하는 것을 의미한다. 메서드 참조의 유형은 정적 메서드 참조, 인스턴스 메서드 참조, 생성자 참조로 크게 3가지가 있다. 인스턴스 메서드 참조는 참조를 통한 인스턴스 메서드 참조와 클래스 이름을 통한 인스턴스 메서드 참조로 구분할 수 있다. 정적(static) 메서드 참조 List list = new ArrayList(Arrays.asList(1, 3, 5, 7, 9)); // public static void reverse(List list) Consumer c = l -> Collections.reverse(l);// 람다식 c.accept(list) Consumer c = Collections::reverse;// 메서드 참조 c.acc.. 2022. 9. 15. Data Structure and Algorithm Introduction Data Structure Data Structure는 데이터를 효율적으로 저장하고 관리하기 위한 특별한 포맷이다. Array, File, Linked list, Stack, Queue, Tree, Graph 등이 있다. 자료 구조는 element의 구조에 따라 두 종류로 분류된다. Linear data structure(선형 자료구조) element 들이 sequential order로 접근되지만 모든 elemnt가 순차적으로 저장되지는 않는다. ex) linked list, stack, queue Non-linear data structure(비선형 자료구조) elment 들이 non-linear order로 저장/접근된다. ex) tree and graph Abstract Data Types(ADT.. 2022. 9. 14. [Java] 기본 함수형 인터페이스(Functional Interface) Java8에서 미리 정의해 놓은 함수형 인터페이스들을 알아보자. 다음 인터페이스들은 java.util.function에 정의되어있다. Predicate Predicate 인터페이스 내에는 boolean test(T t) 라는 추상 메서드가 존재한다. boolean test(T t)는 전달된 인자를 판단해 true 또는 false를 반환해야 하는 상황에서 사용한다. public static int sum(Predicate p, List lst) { int s = 0; for(int n : lst) { if(p.test(n)) s += n; } return s; } public static void main(String[] args) { List list = Arrays.asList(1, 5, 7, 9, 1.. 2022. 9. 13. [Java] 익명 클래스(Anonymous Class)와 람다식(Lambda Expression) 익명클래스(Anonymous Class) interface Printable { void print(); } class Printer implements Printable { public void print(String s) { System.out.println(s); } } class Example { public static void main(String[] args) { Printable prn = new Printer(); prn.print("hi"); } } 위 코드에서 Printer 클래스를 보자. Printer 클래스의 정의와 Printer 인스턴스의 생성이 분리되어 있다. 하지만 '익명 클래스'의 형태를 사용하면 클래스의 정의와 인스턴스 생성을 하나로 묶을 수 있다. class Exampl.. 2022. 9. 13. [Java] 네스티드 클래스(Nested Class)와 내부 클래스(Inner Class) class Outer { class Nested { ... } // 네스티드 클래스 } 클래스 내에 정의된 클래스를 네스티드 클래스(Nested Class)라고 하고, 이를 감싸는 클래스를 외부 클래스(Outer Class)라고 한다. 네스티드 클래스는 static 선언 여부를 기준으로 Static 네스티드 클래스와 Non-static 네스티드 클래스로 나뉜다. Static 네스티드 클래스(Static Nested Class) class Outer { private static int num = 0; static class Nested1 { void add(int n) { num += n; } } static class Nested2 { int get() { return num; } } } Outer.N.. 2022. 9. 13. [Java] 어노테이션(Annotation) 어노테이션 JAVA 5에서 추가된 어노테이션은 자바 컴파일러에게 메세지를 전달하는 목적의 메모이다. 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공하고, 빌드나 배치 시 코드를 자동 생성할 수 있도록 정보를 제공하며, 실행 시 기능을 실행하도록 정보를 제공한다. 표준 어노테이션 자바에서 제공하는 몇 가지 어노테이션 중 대표적인 3가지만 확인하자. @Override 상위 클래스의 메서드 오버라이딩 또는 인터페이스에 선언된 추상 메서드의 구현임을 나타낸다. 잘못된 메서드 오버라이딩 시 컴파일 오류가 발생한다. @Deprecated 문제의 발생 소지가 있거나 개선된 기능의 다른 것으로 대체되어 더 이상 필요 없게 되었음을 표시한다. @Deprecated 를 사용한 메서드 호출 시 컴파일 오류가 발생.. 2022. 9. 13. [JAVA] 매개변수의 가변 인자(Variable Argument) 선언 ... 이 삽입된 메서드의 선언을 가변 인자 선언이라고 한다. public static void showAll(String... vargs) { ... } showAll("Box"); showAll("Box", "Toy", "Apple"); 메서드 매개변수에 가변 인자 선언을 하면, 전달되는 인자의 수에 제한을 두지 않을 수 있다. vargs는 배열을 참조하기 때문에 length에 접근하여 그 길이를 확인할 수 있다. 자바 컴파일러는 앞에 선언한 가변 인자 선언 및 메서드 호출문을 다음과 같이 수정하여 컴파일을 완료한다. public static void showAll(String[] vargs) { ... } showAll(new String{"Box"}); showAll(new String{"Box".. 2022. 9. 12. [Java] 열거형(Enumeration Type) 열거형(Enum)은 Java 5 에서 추가된 자료형으로 의미가 부여된 이름을 갖는 상수의 선언에 목적이 있다. Java 5 이전의 상수 선언과 문제점 interface Animal { int DOG = 1; int CAT = 2; } 인터페이스 내에 선언된 변수는 public, static, final이 선언된 것으로 간주된다. 이러한 상수의 선언은 큰 문제를 하나 가지고 있다. interface Person { int MAN = 1; int WOMAN = 2; } public static void who(int man) { swtich(man) { ... } } Who(Person.MAN);// 정상적인 호출 who(Animal.DOG);// 비정상적인 호출 => 오류 발생 안함 잘못된 상수를 집어 넣.. 2022. 9. 12. [Java] 컬렉션 프레임워크 - 컬렉션 기반 알고리즘 정렬 List 인터페이스를 구현한 클래스들은 정렬된 상태로 유지하지 않는다. public static 2022. 9. 12. 이전 1 ··· 3 4 5 6 7 8 9 다음