본문 바로가기

Java/문법12

enum - 열거형 타입 enum 이란 ?: enum은 열거형 타입으로, 관련 있는 고정된 상수들을 하나로 묶을 수 있다. ADD, SUBTRACT, MULTIPLY, DIVIDE 등의 연산자들을 Operation이라는 enum으로 관리할 수 있다.코드 가독성, 유지보수성, 타입 안정성을 높여준다. 가독성Operation.ADD처럼 명확하게 표현됨타입 안정성잘못된 값은 컴파일 단계에서 오류 발생, 더 안전하다유지보수성연산 추가/수정이 쉽다 (e.g., 나중에 MOD, POWER 등 확장 가능)switch문 없이도 처리 가능apply() 같은 메서드를 enum 안에 정의해서 직접 계산 가능기호 매핑 편리"+" 등의 기호를 연산자와 연결해서 입력값 처리나 출력에 활용 가능 char는 그냥 자유롭게 문자 쓰는 메모장 같은 느낌이고,e.. 2025. 4. 18.
Optional - Null을 안전하게 다뤄보자 Null 이란?: 프로그래밍에서 값이 없음 또는 참조하지 않음 을 나타내는 키워드이 때, Optional을 활용하여 에러를 방지해주는데 Optional 이란?: Optional 객체는 값이 있을 수도 있고 없을 수도 있는 컨테이너라고 생각을 하자.Optional 객체를 메서드 반환 자료형에 선언해서 해당 메서드가 null 이 반환될 가능성을 명확하게 전달할 수 있다.Optional.ofNullable() 을 사용하여 null 이 반환될 수 있는 객체를 감싼다.활용할 때는 isPresent() 와 같은 Optional API 를 통해 안전하게 null 처리를 할 수 있다.isPresent() 활용 : Optional 내부의 값이 존재할 경우에 true를 반환import java.util.Optional;p.. 2025. 4. 18.
Thread - 여러 작업을 동시에 수행해보자 Thread 란?: 프로그램 내에서 '독립적'으로 실행되는 하나의 작업 단위싱글 쓰레드 는 한 번에 하나의 작업만 처리하지만 멀티쓰레드는 여러 작업을 동시에 처리할 수 있다.멀티 쓰레드를 활용하면 여러 작업을 병렬로 수행할 수 있어 처리 성능을 향상시킬 수 있다.Runnable 인터페이스를 활용해 쓰레드를 구현해야한다. (유지 보수성과 재사용성 향상, 확장 가능성)쓰레드 제어 로직: start(), join(), isAlive() public class Main { public static void main(String[] args) { MyRunnable task = new MyRunnable(); // 기존 클래스를 유지하면서 확장해서 활용 task.pri.. 2025. 4. 18.
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(.. 2025. 4. 18.
Lambda - 익명 클래스를 간결하게 표현해보자 우선 람다식을 사용하기 위해서는 함수형 인터페이스를 활용해야한다. 이는 아래에서 자세히 다뤄보자. 함수형 인터페이스(Functional Interface)란?: 오직 하나의 추상 메서드만 가지는 인터페이스 문서화: "이 인터페이스는 함수형으로 쓰기 위한 거다!" 하고 명확하게 선언검증: 추상 메서드가 2개 이상이면 컴파일 에러 발생해서 실수 방지@FunctionalInterface를 통해 선언 가능하다. 익명 클래스란?말 그대로 이름이 없는 클래스이다. 이게 무슨 의미일까?이는 별도의 클래스 파일을 만들지 않고 코드 내에서 '일회성'으로 정의해 사용하기 때문이다.인터페이스, 클래스(일반, 추상)의 구현과 상속을 활용해 익명 클래스를 구현할 수 있다.(여기서 이해가 잘 안된다면, 앞의 포스팅들 중에서 .. 2025. 4. 17.
Generic - 매개변수 타입을 미리 지정하지 않는 유연한 문법 Generic 이란?제네릭은 클래스, 메서드 등에 사용되는 타입 매개변수를 의미타입을 미리 지정하지 않고 사용 시점에 유연하게 결정할 수 있는 문법코드 재사용성(다양한 타입에서 동일한 코드로 코드 재사용 가능)타입 안정성(잘못된 타입 사용을 컴파일 시점에 방지)하지만 과도하게 사용하면 오히려 복잡해질 수 있으므로 주의! Generic 활용 예시public class GenericBox { // 제네릭 메서드 // 속성 private T item; // 생성자 public GenericBox(T item) { this.item = item; } // 기능 public T getItem() { return this.item; } // 일반.. 2025. 4. 17.
Collection - 자료구조를 쉽게 사용하는 집합 Collection 이란?자바는 여러 자료구조들을 쉽게 사용할 수 있도록 인터페이스와 구현체 (ArrayList, HachSet, HashMap 등을) 제공하는 집합이다.배열과 다르게 컬렉션은 길이를 동적으로 변경할 수 있다.이게 무슨 의미냐면, 배열은 처음 구현부터 배열 길이를 설정해주어야한다. 하지만, 나중에 수정을 할 때, 새로운 값을 배열에 추가를 하고싶다면, 배열 추가도 해야하고, 배열 길이도 수정을 해주어야한다. 이를 '정적' 이라고 표현한다. 오늘은 ArrayList, HachSet, HashMap를 하나하나씩 살펴볼 것이다.인터페이스특징구현체List순서 유지, 중복 허용ArrayListSet순서 없음, 중복 불가HashSetMap키-값 구조, 키 중복 불가HashMap ArrayList: .. 2025. 4. 17.
자바 예외(Exception) 및 예외 처리(try-catch) 예외(Exception) 란? 예외는 프로그램 실행 중 예상하지 못한 상황이 발생하는 것을 의미 (ex. 0으로 나누기)이 때, throw new 키워드를 통해 예외를 발생시키고, 예외 처리(try-catch)를 통해 제어할 수 있다.throw new 는 '의도적인 예외'라고 생각하면 된다. (ex. age 그리고 예외 구조에는 체크 예외와 언체크 예외가 존재한다.언체크 예외는 컴파일러가 예외 처리를 강제하지 않는 예외이다.끝내 예외가 처리되지 않으면 프로그램이 비정상적으로 종료된다.RuntimeException 클래스를 상속받는 모든 예외를 UncheckedException이라고 한다. 또한,Exception 클래스를 '직접' 상속받는 모든 예외를 CheckedException이라고 한다. Ru.. 2025. 4. 17.
객체지향 이해하기 class 클래스 { 1. 속성 - 변수 선언으로 표현할 수 있다. 2. 생성자 - 조립 설명서 특징 : 클래스와 이름이 같다. 반환 타입이 존재하지 않는다. 여러 개가 존재할 수 있다. 3. 기능 (메서드 부분)} JVM Method 영역Method 영역에 저장된 데이터는 프로그램 전체에서 공용으로 활용 가능static 으로 선언된 변수와 메서드들이 이 공간에 위치하게 됩이 공간에 저장된 데이터는 공용으로 사용 가능Heap 영역new 키워드로 생성된 객체는 Heap 영역에 저장 (객체 데이터)프로그램 실행 흐름에서 Stack 영역의 변수에 Heap 영역의 메모리 주소값이 저장Stack 영역메서드가 호.. 2025. 4. 15.
메서드 활용 우선, 아래에서 int sum(int value1, int value2) 가 보이는데,여기서 헷갈릴 수 있는 점을 짚고 넘어가려고한다. int sum = a + b; 이런 코드를 한 번쯤은 작성한 적이 있을 것이다.하지만, 여기서 sum은 '변수명' 으로 사용되고 sum()은 '메서드'로써 사용된다.(매개변수1, 매개변수2)를 담을 수 있는 메서드라는 것. 여기서 궁금증이 생겼다. public static void main(String[] args){ }이 안에 int sum(int value1, int value2) 를 넣어서 사용하면 안되는 것인가? 왜 public class Calculator 안에 적어줘야했을까? 에 대해 생각해보려고한다. 우선, 지금 당장은 코드가 짧아서 개발자들이 코드를 읽.. 2025. 4. 14.
스코프, 형변환 간단 정리 스코프: 지역 변수와 범위변수는 선언된 위치에 따라 지역 변수, 멤버 변수 등으로 나뉩니다. 여기서 지역 변수는 특정 지역, 즉 변수가 선언된 코드 블록({}) 내에서만 사용 가능한 변수를 의미합니다. 지역 변수는 선언된 블록 안에서 생존하며, 블록을 벗어나면 제거되어 접근할 수 없습니다.변수의 접근 가능한 범위를 스코프(Scope)라고 합니다. 스코프가 넓은 변수는 코드 전체에서 접근 가능하지만, 스코프가 좁은 변수는 특정 블록 내에서만 접근할 수 있습니다.예를 들어, main() 메서드 내에서 선언된 변수 m은 main() 메서드 전체에서 접근 가능하지만, if() 블록 내에서 선언된 변수 x는 if() 블록 내에서만 접근 가능합니다.package scope;public class Scope1 { p.. 2025. 4. 11.
자바 연산자, 조건문, 반복문 간단 명령어 정리 산술 연산자산술 연산자는 숫자를 계산하는 데 사용되며, 기본적인 수학 연산을 수행합니다. 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%) 연산자가 있습니다. int형끼리 계산하면 결과도 int형이 되므로, 소수점 이하를 포함하려면 형변환이 필요합니다. (ex. double)예제:5 / 2 = 2 (int형 나눗셈)5 % 2 = 1 (나머지 연산)주의: 숫자를 0으로 나누는 것은 허용되지 않으며, 예외가 발생합니다.문자열 연산자자바에서는 문자열에 + 연산자를 사용하여 문자열을 연결할 수 있습니다. 문자열과 다른 타입의 데이터를 더하면, 자바는 자동으로 해당 데이터를 문자열로 변환한 후 연결합니다.증감 연산자증감 연산자(++, --)는 변수의 값을 1만큼 증가시키거나 감소시키는 연산자입니다... 2025. 4. 11.