Java & Spring 44

람다 표현식

1. 람다 표현식 등장 배경자바는 전통적으로 객체지향 언어이다. 클래스 -> 객체 -> 메서드 호출 즉, 동작 하나를 전달하려면 객체가 반드시 필요했었음. 하지만 현대 프로그래밍에서는 다음과 같은 요구가 커졌음이 동작만 넘기고 싶다굳이 클래스가 필요할까?함수를 값처럼 넘길 수는 없나? 2. 람다 표현식이란?람다는 익명 함수라고 설명하지만 이는 정확하지 않음. 람다는 메서드를 구현한 객체를 간결하게 표현하는 문법이다. 자바에는 여전히 함수 타입이 없고, 람다는 객체로 동작한다 !! 3. 람다 표현식 기본 문법(매개변수) -> {실행문}// 예시 (a,b) -> {a + b}// 이 코드와 완전 동일 new Comparator() { @Override public int compare(Intege..

List, Set, Map

1. Collection 계열과 Map 계열은 출발부터 다르다List, Set -> Collection 인터페이스 계열Map -> Collection이 아님!이 차이가 사용 방식 자체를 결정한다. Iterable 하다는 말은 순회가 가능하다!! 2. Iterable = 순회 가능 (List, Set은 가능)List, Set 자료는 요소를 하나씩 꺼내서 반복 처리할 수 있다. for (String value : list) { System.out.println(value);}Iterable 인터페이스를 구현하고 있기 때문에 List, Set은 for, each로 돌릴 수 있다. 3. Map은 for-each가 안됨Map은 Iterable 하지 않다! Map은 구조 자체가 key-valueCollecti..

JCF가 왜 필요할까?

1. 왜 컬렉션이 필요했을까?배열의 문제점크기가 고정됨중간 삽입/삭제가 너무 번거롭다기능이 없어 정렬, 검색을 직접 구현해야 한다int[] arr = new int[3];// 크기를 늘리고 싶으면 -> 새로운 배열에 값을 복사해줘야 함...-> 이러한 불편함을 해결하기 위해 등장한 것이 컬렉션 프레임워크이다! 2. Java Collection Framework(JCF)란?데이터를 저장하고 관리하는 표준화된 자료구조 + 인터페이스 + 구현체 모음이다. 핵심 목표는 자료구조를 직접 만들지 말고, 상황에 맞는 컬렉션을 선택해서 쓰자!! 3. List - 순서 O, 중복 O특징 저장 순서 유지중복 허용인덱스로 접근 가능ArrayList, LinkedListList list = new ArrayList();lis..

예외 처리 문법

1. try-catch-finally 기본 형태try { // 예외 발생 가능 영역} catch (Exception e) { // 특정 예외 처리} finally { // 항상 실행} 예제 1 : 파일 읽기 try { FileInputStream fis = new FileInputStream("data.txt"); // 파일 처리} catch (FileNotFoundException e) { System.out.println("파일을 찾을 수 없습니다.");} finally { System.out.println("파일 처리 종료");} 2. try-with-resources try (FileInputStream fis = new FileInputStream("data..

Java & Spring/Java 2026.01.07

예외 개념과 자바 예외 구조

1. 예외(Exception)란 무엇인가예외란 프로그램 실행 중 발생하는, 정상적인 흐름을 방해하는 상황이다예외는 컴파일 오류가 아니다예외는 런타임 중 발생예외는 예측 가능하며, 통제 대상이다int result = 10;컴파일은 정상, 실행 시 오류 발생, 프로그램이 즉시 종료되므로 예외처리가 없으면 프로그램은 복구 기회 없이 종료된다. 2. 예외 처리가 필요한 이유프로그램 강제 종류 방지 : 일부 기능 실패가 전체 시스템 실패는 아니기에 흐름을 제어 가능오류 원인 명확화 : 단순 조건보다 의미가 명확하고, 원인 추적이 가능하다책임 분리 : 오류 발생과 오류 처리를 분리해 가독성이 향ㅅㅇ됨예외는 실패가 아닌 의도를 가진 신호라고 볼 수 있다 3. 자바의 예외 계층 구조ErrorsJVM 레벨의 치명적인 문..

Java & Spring/Java 2026.01.07

Enum의 개념과 사용

1. Enum이란 무엇인가Enum은 서로 관련 있는 상수들을 하나의 타입으로 묶어서 표현하는 자바의 타입입니다. 즉, Enum은 단순한 상수 모음이 아닌 타입 그 자체이다. public enum OrderStatus { READY, PAID, SHIPPED, DONE} 2. Enum이 필요한 이유기존 상수 방식의 문제점public static final int READY = 0;public static final int PAID = 1;의미를 알기 어렵다 (매직 넘버)잘못된 값이 들어와도 컴파일 오류가 발생하지 않는다유지 보수가 어려움Enum이 해결타입 안정성 : 정해진 값만 사용할 수 있다의미 있는 코드 : 숫자 대신 의미가 드러나는 이름 사용컴파일 타임 오류 검출OrderStatus status..

Java & Spring/Java 2026.01.07

내부 클래스(Inner Class)

1. 내부 클래스란?내부 클래스는 클래스 내부에 선언된 클래스이다. class Outer { class Inner { }}외부 클래스와 논리적으로 강하게 묶인 클래스외부 클래스의 멤버에 접근 가능코드 구조를 더 명확하게 표현 가능2. 내부 클래스의 종류일반 내부 클래스 (Inner Class)static 내부 클래스 (Static Nested Class)지역 내부 클래스 (Local Inner Class)익명 내부 클래스 (Annonymous Inner Class)3. 일반 내부 클래스 (Inner Class)일반 내부 클래스는 외부 클래스의 인스턴스에 속하는 클래스이다.특징외부 클래스 객체가 있어야 생성 가능외부 클래스의 모든 멤버 접근 가능 (private 포함)class Outer { ..

Java & Spring/Java 2026.01.07

추상화

1. 추상화란?추상화는 객체들의 공통적인 특징만 뽑아내는 것이다. 구현의 세부 내용보다는, 공통된 역할과 책임에 집중한다. 즉, 어떻게 동작하는지는 감추고, 무엇을 할 수 있는지만 드러낸다.추상화는 객체 지향 설계에서 구조를 단순화하고, 확장을 가능하게 만드는 출발점이다. 2. abstract 키워드abstract는 미완성 상태를 표현하는 키워드이다. 클래스, 메서드에 사용 가능하다. abstract 메서드구현부({})가 없다하위 클래스에서 반드시 구현해야 한다abstract class Animal { abstract void sound();} abstract 클래스 추상클래스는 0개 이상의 추상 메서드를 포함할 수 있는 클래스이다.abstract 키워드객체 생성 불가추상 메서드 + 일반 메서드 모..

Java & Spring/Java 2026.01.07

SOLID 원칙

객체 지향 설계를 위한 다섯가지 핵심 원칙이다. 코드의 유지보수성, 확장성, 결합도 감소를 목표로 한다. 면접 단골 질문이니 잘 기억해두자!!SRP - 단일 책임 원칙OCP - 개방/폐쇄 원칙LSP - 리스코프 치환 원칙ISP - 인터페이스 분리 원칙DIP - 의존성 역전 원칙1. SRP - 단일 책임 원책하나의 클래스는 하나의 책임만 가져야 한다. //위반 예시class UserService { void saveUser() { // 사용자 저장 } void sendEmail() { // 이메일 전송 }}//적용 예시class UserService { void saveUser() { // 사용자 저장 }}class EmailServic..

Java & Spring/Java 2026.01.06

다형성 (Polymorphism)

1. 다형성이란?다형성이란 하나의 타입으로 여러 형태의 객체를 다룰 수 있는 성질을 의미한다. 즉, 부모 타입의 참조 변수로 서로 다른 자식객체를 참조할 수 있고, 같은 메서드 호출이 객체에 따라 다르게 동작한다.코드의 결합도 감소구현 교체 용이확장에 유리한 구조2. Upcasting업캐스팅은 자식 객체를 부모 타입으로 참조하는 것이다.자동 형변환매우 안전class Animal { void sound() {}}class Dog extends Animal { void sound() { System.out.println("멍멍"); }}Animal animal = new Dog(); // 업캐스팅animal.sound();출력멍멍 특징업캐스팅 상태에서는 부모 클래스에 정의된 멤버..

Java & Spring/Java 2026.01.06