본문 바로가기

Java

Optional - Null을 안전하게 다뤄보자 Null 이란?: 프로그래밍에서 값이 없음 또는 참조하지 않음 을 나타내는 키워드이 때, Optional을 활용하여 에러를 방지해주는데 Optional 이란?: Optional 객체는 값이 있을 수도 있고 없을 수도 있는 컨테이너라고 생각을 하자.Optional 객체를 메서드 반환 자료형에 선언해서 해당 메서드가 null 이 반환될 가능성을 명확하게 전달할 수 있다.Optional.ofNullable() 을 사용하여 null 이 반환될 수 있는 객체를 감싼다.활용할 때는 isPresent() 와 같은 Optional API 를 통해 안전하게 null 처리를 할 수 있다.isPresent() 활용 : Optional 내부의 값이 존재할 경우에 true를 반환import java.util.Optional;p.. 더보기
Thread - 여러 작업을 동시에 수행해보자 Thread 란?: 프로그램 내에서 '독립적'으로 실행되는 하나의 작업 단위싱글 쓰레드 는 한 번에 하나의 작업만 처리하지만 멀티쓰레드는 여러 작업을 동시에 처리할 수 있다.멀티 쓰레드를 활용하면 여러 작업을 병렬로 수행할 수 있어 처리 성능을 향상시킬 수 있다.Runnable 인터페이스를 활용해 쓰레드를 구현해야한다. (유지 보수성과 재사용성 향상, 확장 가능성)쓰레드 제어 로직: start(), join(), isAlive() public class Main { public static void main(String[] args) { MyRunnable task = new MyRunnable(); // 기존 클래스를 유지하면서 확장해서 활용 task.pri.. 더보기
Stream - 데이터를 효율적으로 처리해보자 Stream 이란?: 데이터를 효율적으로 처리할 수 있는 흐름선언형 스타일로 가독성이 굉장히 뛰어나다.데이터 준비 → 중간 연산 → 최종 연산 순으로 처리 ( Stream -> map -> collect )스트림은 컬렉션(List, Set 등)과 함께 자주 활용람다식을 매개변수에 직접 활용한 예시 + 중간 연산 단계에서 .filter 사용public class Main { public static void main(String[] args) { // ArrayList 선언 List arrayList = new ArrayList(List.of(1, 2, 3, 4, 5)); // 람다식을 직접 활용 List ret5 = arrayList.stream(.. 더보기
Lambda - 익명 클래스를 간결하게 표현해보자 우선 람다식을 사용하기 위해서는 함수형 인터페이스를 활용해야한다. 이는 아래에서 자세히 다뤄보자. 함수형 인터페이스(Functional Interface)란?: 오직 하나의 추상 메서드만 가지는 인터페이스 문서화: "이 인터페이스는 함수형으로 쓰기 위한 거다!" 하고 명확하게 선언검증: 추상 메서드가 2개 이상이면 컴파일 에러 발생해서 실수 방지@FunctionalInterface를 통해 선언 가능하다. 익명 클래스란?말 그대로 이름이 없는 클래스이다. 이게 무슨 의미일까?이는 별도의 클래스 파일을 만들지 않고 코드 내에서 '일회성'으로 정의해 사용하기 때문이다.인터페이스, 클래스(일반, 추상)의 구현과 상속을 활용해 익명 클래스를 구현할 수 있다.(여기서 이해가 잘 안된다면, 앞의 포스팅들 중에서 .. 더보기
Generic - 매개변수 타입을 미리 지정하지 않는 유연한 문법 Generic 이란?제네릭은 클래스, 메서드 등에 사용되는 타입 매개변수를 의미타입을 미리 지정하지 않고 사용 시점에 유연하게 결정할 수 있는 문법코드 재사용성(다양한 타입에서 동일한 코드로 코드 재사용 가능)타입 안정성(잘못된 타입 사용을 컴파일 시점에 방지)하지만 과도하게 사용하면 오히려 복잡해질 수 있으므로 주의! Generic 활용 예시public class GenericBox { // 제네릭 메서드 // 속성 private T item; // 생성자 public GenericBox(T item) { this.item = item; } // 기능 public T getItem() { return this.item; } // 일반.. 더보기
Collection - 자료구조를 쉽게 사용하는 집합 Collection 이란?자바는 여러 자료구조들을 쉽게 사용할 수 있도록 인터페이스와 구현체 (ArrayList, HachSet, HashMap 등을) 제공하는 집합이다.배열과 다르게 컬렉션은 길이를 동적으로 변경할 수 있다.이게 무슨 의미냐면, 배열은 처음 구현부터 배열 길이를 설정해주어야한다. 하지만, 나중에 수정을 할 때, 새로운 값을 배열에 추가를 하고싶다면, 배열 추가도 해야하고, 배열 길이도 수정을 해주어야한다. 이를 '정적' 이라고 표현한다. 오늘은 ArrayList, HachSet, HashMap를 하나하나씩 살펴볼 것이다.인터페이스특징구현체List순서 유지, 중복 허용ArrayListSet순서 없음, 중복 불가HashSetMap키-값 구조, 키 중복 불가HashMap ArrayList: .. 더보기
자바 예외(Exception) 및 예외 처리(try-catch) 예외(Exception) 란? 예외는 프로그램 실행 중 예상하지 못한 상황이 발생하는 것을 의미 (ex. 0으로 나누기)이 때, throw new 키워드를 통해 예외를 발생시키고, 예외 처리(try-catch)를 통해 제어할 수 있다.throw new 는 '의도적인 예외'라고 생각하면 된다. (ex. age 그리고 예외 구조에는 체크 예외와 언체크 예외가 존재한다.언체크 예외는 컴파일러가 예외 처리를 강제하지 않는 예외이다.끝내 예외가 처리되지 않으면 프로그램이 비정상적으로 종료된다.RuntimeException 클래스를 상속받는 모든 예외를 UncheckedException이라고 한다. 또한,Exception 클래스를 '직접' 상속받는 모든 예외를 CheckedException이라고 한다. Ru.. 더보기
2단계 계산기 기능 정리 클래스는 메인 클래스로 사용될 App 클래스와 사칙연산 메서드와 삭제 메서드를 가진 Calculator 클래스로 나눠서 진행했다. public class Calculator {private List results = new ArrayList(); // 연산 결과들을 저장하는 컬렉션 타입 필드 public void calculate(int positiveInteger1, int positiveInteger2, char operator) { // App에서 입력받은 데이터 3개를 가져오는 기능 boolean possible = true; // boolean은 연산 처리와 오류 방지 로직을 깔끔하게 제어하기 위한 장치로써 사용했다. .. 더보기