JAVA/Language(50)
-
[Java][Optional] Optional 클래스를 통한 Null 처리
1. Optional 클래스의 개념 1.1 NPE(NullPointerException)란 무엇인가? NPE란 null을 가리키고 있는 객체가 객체의 멤버를 참조하려고 할때 발생하는 예외입니다. 다음 예시는 null값을 가지는 문자열 객체가 메서드를 호출하려고 하는 예시입니다. public boolean isHello(String text){ return text.equals("hello"); } text는 null이기 때문에 NullPointerException 예외가 발생합니다. 위와 같은 경우를 막기 위해서 조건문을 통해서 null인지 검사를 하고 호출할 수 있습니다. public boolean isHello(String text){ if(text != null){ return text.equals..
2022.11.28 -
[java][lambda] 람다식(Lambda Expression)
1. 람다식이란 무엇인가? 람다식(Lambda Expression)이란 메서드를 하나의 '식(expression)'으로 표현한 것입니다. 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, 람다식을 '익명 함수(anonymous function)'이라고도 합니다. 예를 들어 1~5사이의 랜덤한 수를 반환하는 메서드를 정의한다면 다음과 같이 정의할 수 있을 것입니다. int method(){ return (in)(Math.random()*5)+1; } 위와 같은 메서드 정의를 다음과 같이 람다식으로 표현할 수 있습니다. () -> (int)(Math.random() * 5) + 1) 람다식의 특징 클래스의 생성 없이 람다식 자체만으로 메서드의 역할을 수행할 수 있음 람다식은 메서드의 매개변수..
2022.08.23 -
[Java][enums] 열거형(enums)
2.1 열거형이란 무엇인가? 열거형은 서로 관련된 상수를 편리하게 선언하기 위해서 자바에서 지원하는 타입입니다. //before class Card{ static final int CLOVER = 0; static final int HEART = 1; static final int DIAMOND = 2; static final int SPADE = 3; static final int TWO = 0; static final int THREE = 1; static final int FOUR = 2; final int kind; find int num; } //after class Card{ enum Kind {CLOVER, HEAR, DIAMOND, SPADE} // 열거형 Kind를 정의 enum Valu..
2022.08.03 -
[Java][Generics] 지네릭스(Generics)
1. 지네릭스란 무엇인가? 지네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크(comptile-time type check)를 해주는 기능입니다. 지네릭스의 장점 타입 안정성을 제공합니다. 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해집니다. 예를 들어 ArrayList 컬렉션 클래스에 타입을 지정하여 해당 클래스 타입의 인스턴스만을 담을 수 있습니다. ArrayList list = new ArrayList(); list.add("a"); list.add("b"); list.add("c"); 2. 지네릭 클래스의 선언 어떤 클래스를 지네릭 클래스로 변경하고자 한다면 다음과 같이 선언할 수 있습니다. class Box{ // 지네릭 타입 T를 선언 T item; ..
2022.07.22 -
[Java][Thread] 쓰레드의 동기화 #4 fork & join 프레임워크
fork & join 프레임워크 JDK 1.7 하나의 작업을 작은 단위로 나눠서 여러 쓰레드가 동시에 처리하는 것을 쉽게 만들어줍니다. 1. fork & join 프레임워크 종류 RecursiveAction 반환값이 없는 작업을 구현할 때 사용 RecursiveTask 반환값이 있는 작업을 구현할 때 사용 RecursiveAction 추상 클래스 형식 public abstract class RecursiveAction extends ForkJoinTask{ ... protected abstract void compute(); // 상속을 통해 이 메서드를 구현해야함 ... } RecursiveTask 추상 클래스 형식 public abstract class RecursiveTask extends Fork..
2022.07.05 -
[Java][Thread] 쓰레드의 동기화 #3 volatile
1. volatile의 필요성 멀티 코어 프로세서 환경에서 쓰레드를 사용하는 경우 각각의 코어에는 별도의 캐시를 가지고 있습니다. 그리고 쓰레드를 수행하는 CPU 코어는 메모리에서 읽어온 값을 캐시에 저장하고 캐시에서 값을 읽어서 작업을 수행합니다. 다시 같은 값을 읽어올 때는 먼저 캐시에 있는지 확인을 한 다음에 없을 때만 메모리에서 읽어오게 됩니다. 때문에 메모리에 저장된 변수의 값이 변경이 되었는데도 캐시에 저장된 값이 갱신되지 않아서 메모리에 저장된 값이 다른 경우가 발생합니다. 다음 예제는 쓰레드 3개의 이름을 출력하는 예제입니다. 주목할 점은 쓰레드 인스턴스의 메소드를 사용하지 않고 변수를 이용해서 중지했다가 다시 수행한다는 점입니다. public class Driver { public sta..
2022.07.05