Java Pro 팁: 프로그래밍을 강화하는 드문 트릭
Double Brace 초기화에서 선택적 클래스 등에 이르기까지 Java 코드를 개선하는 희귀하고 강력한 기술을 발견하십시오.
이 기사에서는 Java의 잠재력을 최대한 활용하고 우아하고 효율적인 코드를 작성하는 데 도움이 되는 몇 가지 드물고 강력한 팁과 요령을 살펴보겠습니다.
기능적 인터페이스 및 메서드 참조에서 스트림 API 및 선택적 클래스에 이르기까지 종종 간과되지만 프로그래밍 경험을 크게 향상시킬 수 있는 Java의 일부 고급 기능을 다룰 것입니다.
이제 자바의 모든 기능에 뛰어들어 최대한 활용해 봅시다!
더블 브레이스 초기화
이 기술을 사용하면 클래스의 인스턴스를 만들고 단일 문을 사용하여 해당 값을 초기화할 수 있습니다. 여기에는 익명의 내부 클래스를 만들고 인스턴스 초기화 블록을 사용하여 인스턴스 변수를 초기화하는 작업이 포함됩니다.
Map<String, String> myMap = new HashMap<String, String>() {{
put("key1", "value1");
put("key2", "value2");
}};
이 기능은 Java 7에서 도입되었으며 가독성을 높이기 위해 밑줄을 사용하여 숫자 리터럴에서 숫자 그룹을 구분할 수 있습니다.
int million = 1_000_000;
long creditCardNumber = 1234_5678_9012_3456L;
double pi = 3.14_15_92_65;
이 기능은 Java 7에서 도입되었으며 try 블록의 끝에서 스트림, 파일 및 데이터베이스 연결과 같은 리소스를 자동으로 닫을 수 있으므로 finally 블록이 필요하지 않습니다.
try (FileInputStream fis = new FileInputStream("myfile.txt");
BufferedInputStream bis = new BufferedInputStream(fis)) {
// code that uses fis and bis
} catch (IOException e) {
// handle exception
}
Java에서 enum을 사용하여 Singleton 디자인 패턴을 구현할 수 있습니다. 열거형 값은 열거형에 처음 액세스할 때 한 번만 인스턴스화되므로 스레드로부터 안전합니다.
public enum Singleton {
INSTANCE;
// methods and instance variables
}
람다 식은 Java 8에서 도입되었으며 스트림 및 컬렉션과 같은 기능적 프로그래밍 구성을 위해 보다 간결하고 읽기 쉬운 코드를 작성할 수 있습니다.
List<String> names = Arrays.asList("John", "Mary", "Bob");
names.forEach(name -> System.out.println(name));
기능적 인터페이스는 추상 메서드가 하나만 있고 람다 식을 정의하는 데 사용되는 인터페이스입니다. 주석을 사용하여 @FunctionalInterface인터페이스가 기능적 인터페이스인지 확인하고 그렇지 않은 경우 컴파일 타임 오류를 얻을 수 있습니다.
@FunctionalInterface
public interface MyInterface {
void doSomething();
}
메서드 참조를 사용하면 메서드를 호출하지 않고 참조할 수 있습니다. ::연산자를 사용하여 메서드 참조를 만들 수 있습니다. 메서드 참조에는 정적, 인스턴스, 생성자 및 임의 인스턴스의 네 가지 유형이 있습니다.
List<String> names = Arrays.asList("John", "Mary", "Bob");
names.forEach(System.out::println);
Stream API는 기능적인 방식으로 데이터 컬렉션을 처리할 수 있도록 하는 Java 8에 도입된 강력한 기능입니다. 필터링, 매핑, 축소 및 수집과 같은 다양한 작업을 사용하여 데이터를 처리할 수 있습니다.
List<String> names = Arrays.asList("John", "Mary", "Bob");
long count = names.stream()
.filter(name -> name.length() < 4)
.count();
Optional 클래스는 존재하거나 존재하지 않을 수 있는 값을 나타내는 데 사용됩니다. isPresent(), get()및 같은 메서드를 사용하여 orElse()선택적 객체로 작업할 수 있습니다.
Optional<String> name = Optional.ofNullable(getName());
if (name.isPresent()) {
System.out.println("Hello, " + name.get());
} else {
System.out.println("Hello, stranger");
}
다이아몬드 연산자를 사용하면 컨텍스트에서 형식을 유추할 수 있는 한 제네릭 클래스의 새 인스턴스를 만들 때 형식 인수를 생략할 수 있습니다.
Map<String, List<String>> myMap = new HashMap<>();
계속 탐색하고, 계속 배우고, 계속 코딩하세요!
Twitter 및 Instagram 계정 에서 프로그래밍 여정과 개발 경험을 자주 공유합니다.
읽어 주셔서 감사합니다 :)

![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































