☕ Java

Optional 클래스 Optional클래스는 T타입의 객체를 포장해주는 일종의 래퍼 클래스이다. Optional 클래스는 if~else 구문을 대신할 수 있다. 조건에 따른 코드의 흐름이 나눠지는 것을 막을 수 있어 코드를 더 깔끔하게 구성할 수 있다. Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 단순하게 처리할 수 있다. 즉, 복잡한 조건문 없이도 null값으로 인해 발생하는 예외를 처리할 수 있게 된다. 💡 NullpointerException 예외 처리 클래스를 정의할 때 인스턴스 변수는 null이 되지 않게 유효한 값을 가지고 있도록 초기화 해주는 것이 좋지만, null을 허용해야 하는 경우도 있다. 이때 null 가능성에 대비하는 코드의 작성은 번거..
메소드 참조 메소드 참조는 람다식으로 줄어든 코드의 양을 조금 더 줄일 수 있게 한다. 따라서 메소드 참조가 유용한 상황에서는 람다식이 아닌 메소드 참조를 사용해 해결 할 수 있다. 메소드 참조의 유형은 다음과 같이 4가지로 정리할 수 있다. static 메소드 참조 참조변수를 통한 인스턴스 메소드 참조 클래스 이름을 통한 인스턴스 메소드 참조 생성자 참조 static 메소드 참조 자바 8부터 이미 정의되어 있는 메소드를 사용할 때 람다식을 작성할 필요 없이 메소드 정보만 전달할 수 있다. 대입연산자 오른편에 메소드에 대한 정보만 전달되면 전달된 인자를 그대로 넘겨주면서 해당 메소드를 호출하라는 의미이다. 클래스 이름 :: static 메소드 이름 Consumer c = l -> Collections.r..
자바에서 표준으로 정의하고 있는 함수형 인터페이스들에 대해 알아보자. 기본 함수형 인터페이스 함수형 인터페이스 추상 메소드 설명 Predicate boolean test(T t) 전달 인자를 근거로 참/거짓 반환 Supplier T get() 메소드 호출시 무언가를 반환 Consumer void accept(T t) 인자를 받아들이기만 함 Funtion R apply(T t) 입력/출력이 있음 (수학적으론 함수) * java.util.funtion 패키지에 정의되어 있음 Predicate 전달된 인자를 판단하여 true 또는 false를 반환해야 하는 상황에 사용할 수 있다. @FuntionalInterface public interface Predicate { boolean test(T t); } 더보..
람다 자바 8에서 소개된 문법이다. 람다를 사용하면 코드를 줄일 수 있으며, 가독성이 좋다. 예시를 통해 람다를 알아보자. interface Printable { void print(String s); } 전 포스팅에서 다뤘던 익명클래스를 사용해 위 Printable 인터페이스를 구현하는 인스턴스를 생성하기 위해 다음과 같이 코드를 작성했었다. 📌 익명 클래스 인스턴스 생성 Printable prn = new Printable() { @Override public void print(Stirng s) { System.out.println(s); } }; 이것을 람다를 기반으로 수정하면 다음과 같다. 📌 람다식의 두가지 표현 방법 Printable prn = (String s) -> { Sytem.out...
네스티드 클래스 클래스 내에 정의된 클래스를 네스티드(Nested) 클래스라 하고, 이를 감싸는 클래스를 외부(Outer) 클래스라 한다. class Outer { // 외부 클래스 class Nested {...} // 네스티드 클래스 } 💡 네스티드 클래스 종류 네스티드 클래스는 static의 선언 여부를 기준으로 Static 네스티드 클래스와 Non-static 네스티드 클래스로 나뉜다. Non-static 네스티드 클래스는 이너 클래스라고도 부르며 정의되는 위치나 특성에 따라 멤버 이너 클래스, 로컬 이너 클래스, 익명 이너 클래스로 나뉜다. (이너 생략 가능) Static 네스티드 클래스 Non-Static 네스티드 클래스 (이너 클래스) 멤버 클래스 로컬 클래스 익명 클래스 // Staitc ..
가변인자 가변인자를 선언할 때는 ...을 사용한다. 메소드의 매개변수를 선언할 때 가변 인자 선언을 하면, 전달되는 인자의 수에 제한을 두지 않을 수 있다. 가변인자를 선언한 메소드 호출이 이뤄지면, 배열을 생성하여 전달되는 인자들을 모두 담는다. public static void showAll(String... vargs) class Varargs { public static void showAll(String...vargs) { // 매개변수의 가변인자 선언 // vargs를 배열처럼 사용 System.out.println("LEN: " + vargs.length); for (String s : vargs) System.out.println(s + " "); System.out.println(); }..
인터페이스 기반 상수 정의 인터페이스 내에 선언된 변수는 public, static, final이 선언된 것으로 간주한다. 자바 5 이전에는 연관된 상수들을 하나의 인터페이스로 묶어서 선언하는 방법을 사용했다. 하지만 이러한 방식은 잘못된 메소드 호출임에도 에러를 발생시키지 않는다는 문제점이 있다. interface Animal { int DOG = 1; int CAT = 2; } interface Person { int MAN = 1; int WOMAN = 2; } class Const_Interface_NonSafe { public static void main(String[] args) { who(Person.MAN); // 정상적인 메소드 호출 who(Animal.DOG); // 비정상적인 메소드..
collections 클래스에는 다양한 알고리즘을 구현한 메소드들이 존재한다. 이중 일부를 공부해보려고 한다. 정렬 메소드 (sort) public static void sort(List list) List 인터페이스를 구현한 클래스들은 저장된 인스턴스를 정렬된 상태로 유지하지 않는다. 정렬을 원한다면 sort 메소드를 사용하면 된다. 코드 분석 public static void sort(List list) 제네릭 메소드로, 메소드 호출 시점에 T가 결정된다. 인자로 List의 인스턴스라면 모두 전달 가능하다. public static void sort (List list) 이때 T는 Comparable 인터페이스를 구현한 상태여야 한다. public class SortCollections { publi..
an2z
'☕ Java' 카테고리의 글 목록 (2 Page)