Java Pro 팁: 프로그래밍을 강화하는 드문 트릭

Mar 13 2023
이중 중괄호 초기화부터 선택적 클래스 등에 이르기까지 Java 코드를 개선할 수 있는 희귀하고 강력한 기술을 발견하십시오. 그것은 우아하고 효율적입니다. 기능적 인터페이스 및 메서드 참조에서 스트림 API 및 선택적 클래스에 이르기까지 종종 간과되지만 프로그래밍 경험을 크게 향상시킬 수 있는 Java의 일부 고급 기능을 다룰 것입니다.

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 계정 에서 프로그래밍 여정과 개발 경험을 자주 공유합니다.

읽어 주셔서 감사합니다 :)