본문 바로가기

전체글10

Java에서 Enum 의 비교는 '==' 인가? 'equals' 인가? 자바에서 Enum은 클래스의 인스턴스가 JVM 내에 하나만 존재한다는 것이 100% 보장되는 싱글톤을 만드는 가장 좋은 방법입니다. (JLS, 8.9 Enum Types) 그렇다면 Enum 비교시 equals 메서드 대신 간단히 == 비교를 사용하면 어떨까요? 1. == 비교는 NullPointerException을 발생시키지 않습니다. enum Color { BLACK, WHITE }; Color nothing = null; if (nothing == Color.BLACK); // runs fine if (nothing.equals(Color.BLACK)); // throws NullPointerException equals 메서드를 사용해 비교하면 런타임에 NullPointerException가 발생.. 2022. 3. 20.
자바와 다중상속 문제 다른 객체지향언어인 C++에서는 여러 조상 클래스로부터 상속받는 것이 가능한 '다중상속(multiple inheritance)' 을 허용하지만 자바에서는 오직 단일 상속만을 허용합니다. 사실 다중상속 문제는 수년동안 논쟁의 여지가 있는 문제로 다루어져 왔습니다. 지금부터 다중 상속의 가장 대표적인 문제로 꼽히는 다이아몬드 문제(Diamond Problem) 을 통해서 그 이유에 대해 살펴보겠습니다. The diamond problem 다음과 같이 추상 메서드를 가진 Sample 추상 클래스가 있습니다. public abstract class Sample { public abstract void demo(); } 여기서Sample 클래스를 상속받아 demo 메서드를 구현하는 두 개의 클래스가 있습니다. p.. 2022. 1. 8.
자바8 람다식의 등장 자바8에서 함수형 인터페이스, 람다와 같은 개념이 추가되면서 함수 객체를 더 쉽게 만들 수 있게 되었습니다. 간단한 프로그램을 기존 자바 코드로 해결하면서 발생하는 문제를 자바8에서 새롭게 추가된 개념들을 이용해 어떻게 개선할 수 있는지 비교해볼 예정입니다. 예제 1. 과일 재고 프로그램 과일 재고 목록을 관리하는 애플리케이션을 만들어보겠습니다. 최초 요구사항은 "녹색 사과를 모두 찾고싶다" 입니다. 코드는 다음과 같습니다. public static List filterGreenApples(List inventory) { List result = new ArrayList(); for (Apple apple : inventory) { if ("green".equals(apple.getColor())) { .. 2022. 1. 2.
동기화(synchronization)와 Thread Safe 제대로 이해하기 싱글스레드 프로세스의 경우 프로세스 내에서 단 하나의 스레드만 작업하기 때문에 프로세스의 자원을 가지고 작업하는데 별문제가 없지만, 멀티스레드 프로세스의 경우 여러 스레드가 같은 프로세스 내의 자원을 공유해서 작업하기 때문에 서로의 작업에 영향을 주게 됩니다. 한 스레드가 진행 중인 작업을 다른 스레드가 간섭하지 못하도록 막는 것을 '스레드의 동기화(synchronization)'라고 합니다. 자바의 synchronized 키워드를 이용하면 해당 메서드나 블록을 한번에 한 스레드씩 수행하도록 보장합니다. 다시 말해서 스레드의 배타적 실행을 보장합니다. 여기까지는 알고 있었던 동기화에 대한 개념이었습니다. 그러나 이펙티브 자바(Effective Java)의 아이템 78을 읽다보면 이런 내용이 나옵니다. 동.. 2021. 12. 26.
반응형