숫자는 ""(쌍따음표)가 필요없다.하지만 문자는 ""(쌍따음표)가 필요하다.표준 출력
프로그래밍은 위에서 아래로 읽는다.옳은 예안좋은 예변수 생성하기전 x를 입력하여 x 를 읽지 못합니다.
// 논리계열boolean b = true; // or false// 문자계열(사실 숫자가 저장됨, 왜냐하면 문자는 사실 숫자이다.)char c = 'a'; // 'a' 는 사실 97 이다.// 정수계열byte bt = 1;short s = 2;int i = 3;lon
재귀 DFS BFSDP 해시단순구현공부하기.
인텔이제이 세팅, 프로젝트 생성시마다 해야하는 세팅메뉴 => File => Settings => Build, Execution, Deployment => CompilerBuild project automatically : 체크사실 이 설정은 스프링부트 프로젝트에서만 하
변수 ex : int 나이;함수 : void 함수명(){};
abstract가 있으면 class 앞에도 abstract를 써줘야 합니다.
추상적인 형태로의 변형은 자동형변환구체적인 형태로의 변형은 수동형변환실수 : 범위가 크다.정수 : 구체적
abstract 를 붙은 클레스는 버튼이다. 라고 알려준다.
rerurn 값과 타입은 맞춰야한다.ex
this = 다른생성자에게 위임한다. - 떠넘긴다.int a = new int 5 고정크기의 자료구조<> 에 래퍼타입을 쓴다ArrayList list = new ArrayList<>();\-List = 유연한 크기의 자료구조 List에 넣을떄 al.ad
List : 데이터 넣을 땐 편하다. 자도 라벨링 List : 데이터 가져올 땐 불편하다. Map : 데이터 넣을 땐 불편하다. 수동 라벨링 Map : 데이터 가져올 땐 편하다
내부에서 사용 하면 private외부애서 사용해야하면 public 을 붙인다.
TDD : 테스트 주도 개발
테스트 단계 1\. Red : 실패하는 테스트 케이스 추가 단계2\. GREEN : 최대한 꼼수를 써서 테스트 케이스 통과3\. 리펙토링 : 코드 정렬
문자열에서, 해당 값이 공백(비어있음)인지 아닌지를 판별하기 위한 메서드에는 isEmpty() 와 isBlank() 가 있습니다.isEmpty() 는 문자열의 길이가 0인 경우, 즉 아무것도 없을 경우에 참을 반환합니다.isBlank() 는 문자열이 비어있거나(길이가
contains 란특정 값 또는 패턴이 주어진 문자열, 컬렉션, 또는 데이터 구조 안에 존재하는지 여부를 검사하는 데 사용됩니다
static1\. 객체 생성 없이 호출 가능: 정적 메소드 또는 변수는 클래스에 속하기 때문에 객체 인스턴스를 생성하지 않고 직접 호출할 수 있습니다.메모리 효율성: 정적 변수는 모든 객체 인스턴스에서 공유되므로 메모리 사용을 줄일 수 있습니다. 객체마다 별도의 변수
import java.util.Arrays; 라이브러리를 임포트해서 사용하는것.라이브러리를 사용한다.
자기 자신을 한 번 더 사용하는 함수 예시
인터페이스 안에는 추상메서드 뿐이다.implements 로 인터페이스를 상속한다.
@Getter == 자동으로 Getter 생성@Setter == 자동으로 Setter 생성@AllArgsConstructor == 자동으로 생성자 생성롬복 추가 방법 - build.gradle > dependencies > implementation 'or
Not blank가 있으면 valid는 꼭 써야한다.
POST /member/joiString join(@Valid WriteForm joinForm) {WriteForm 객체 생성HttpServletRequest reqpayloadusername : aapassword : bbbwriteForm.username = "a
저장위치 : 클라이언트의 쿠키통(도메인별로 나뉨)클라이언트 조작 가능성 : 가능(서버에서도 클라이언트 측 쿠키 조작 가능)특이사항 1 : 해당 도메인에 발송되는 모든 요청에 자동으로 실려서 전송됨저장위치 : WAS의 세션저장소(브라우저별로 나뉨)클라이언트 조작 가능성
로그인한 사람의 id와 이름을 저장. 현제 로그인 한 사람이 누구인가. \-> 세션에 저장
@Autowired객체를 주입하기 위해 사용하는 스프링의 애너테이션이다. @RequiredArgsConstructor롬복이 제공하는 애너테이션으로 final이 붙은 속성을 포함하는 생성자를 자동으로 생성하는 역할을 한다.
자주 사용하는 타임리프의 속성타임리프의 자주 사용하는 속성에는 다음 3가지 유형이 있다. 이 3가지 유형만 알아도 여러 기능을 충분히 만들 수 있다.분기문 속성분기문 속성은 다음과 같이 사용한다.th:if="${question != null}"위의 경우 question
redirect: - URL로 리다이렉트 (리다이렉트는 완전히 새로운 URL로 요청이 된다.)forward: - URL로 포워드 (포워드는 기존 요청 값들이 유지된 상태로 URL이 전환된다.)
Controller -> Service -> Repository
타임리프의 sec:authorize 속성sec:authorize="isAnonymous()" - 이 속성은 로그인 되지 않은 경우에만 해당 엘리먼트가 표시되게 한다.sec:authorize="isAuthenticated()" - 이 속성은 로그인 된 경우에만 해당 엘리
컴퓨터에 입력된 데이터를 프로그램에서 사용하기 위해메모리에 저장하는데, 이때 저장을 위해 참조된 메모리 공간을 변수라고 합니다.변수는 데이터를 저장하기 위한 메모리 공간을 의미합니다.변수의 구조 : 자료형 데이터 = 데이터;대소문자 구분길이 제한 없음숫자로 시작할 수
변수명 앞에 선언된 데이터 타입을 자료형이라고 합니다.자료형은 데이터의 종류와 메모리 크기를 결정합니다.기본 자료형을 객체 형태로 확장한 클래스 타입입니다.메모리 주소를 참조(Reference)하며, 더 많은 기능과 메서드를 제공합니다.예: Integer, Double
프로그램을 개발하다 보면 다른 자료형으로 변환이 필요한데 이를 형변환이라고 한다.대표적으로 정수형을 실수형으로 변환하거나 문자형으로 변환하는 작업.int -> floatchar -> int작은 크기의 자료형에서 큰 크기의 자료형으로 변환작은 크기에서 큰 크기로 변환하므
프로그램에서 연산을 위해 사용하는 기호를 연산자라고 합니다.우리가 수학 시간에 배운 +, -, ×, /와 비슷한 역할앞서 변수 초기화에서 사용했던 =(대입 연산자)도 연산자의 한 종류사칙연산을 위해 사용하는 연산자→ +, -, \*, /, %값을 변수에 초기화하기 위한
조건문은 특정 조건이 참인지 거짓인지에 따라 다른 동작을 실행하는 구문입니다.주로 if, else if, else 구문을 사용합니다.조건을 만족하는 경우에만 실행됩니다.조건이 거짓이면 아무 것도 실행되지 않으며, 이때는 else를 생략할 수 있습니다.else if를 사
중복된 코드를 특정 횟수만큼 반복할 때 사용합니다.초기값, 조건식, 증감식으로 구성되어 반복 횟수가 명확할 때 유용합니다.조건이 true인 동안 계속 반복하는 반복문입니다.반복 횟수가 정해지지 않았을 때 주로 사용합니다.조건이 항상 참이 되어 끊임없이 반복되는 상황을
배열 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 배열(Array)라고 한다 배열은 연속된 메모리 공간에 값을 저장하는 자료구조 이다. 배열을 활용하면 같은 자료형의 연속된 변수를 배열하나의 변수로 묶어서 관리할 수 있다. 배열의 선언과 생성 배열을 사용하려면
일차원 배열을 여러 개 모아 구성한 배열을 이차원 배열이라고 합니다.게임 지도, 좌석 배치도 등의 구현에 유용하게 사용됩니다.배열 안에 또 다른 배열이 포함된 중첩 구조입니다.행(row)과 열(column)로 이루어진 표 형태의 구조를 가집니다.이차원 배열은 \[]\[
순차적인 처리가 중심이 되는 프로그래밍 방식입니다.문제를 일련의 절차(프로시저)로 나누어 해결합니다.대표 언어: C, FORTRAN, COBOL, Pascal, Basic프로그램 흐름 파악이 용이초보자에게 이해하기 쉬움컴퓨터의 처리 구조와 유사실행 속도가 빠름코드 재사
클래스가 필요한 이유 데이터 관리의 효율성 코드의 재사용성 데이터 보호 (캡슐화) 코드의 구조화 데이터 관리의 효율성 관련된 데이터를 하나의 단위로 관리할 수 있습니다. 여러 데이터를 체계적으로 구조화할 수 있습니다. 데이터 접근과 수정이 용이합니다. 코드의 재사용
현실 세계의 예시: 부모의 특징을 자식이 물려받는 것상속은 부모 클래스의 기능을 자식 클래스가 물려받아 재사용 및 확장하는 개념객체지향의 핵심 기법으로 코드의 재사용성과 유지보수성 향상상속을 통해 계층적 구조 설계 가능자식 클래스에서 부모 클래스의 멤버(필드, 메소드)
다형성은 하나의 객체가 여러 가지 타입을 가질 수 있는 성질을 말함실생활 예시: 하나의 TV 리모컨으로 여러 브랜드의 TV를 조작할 수 있음부모 타입의 참조 변수로 자식 객체를 참조할 수 있음코드의 유연성 증가코드의 재사용성 향상유지보수 용이기본 자료형: 작은 자료형을
추상이란 객체의 공통된 특징이나 속성을 추출하는 개념복잡한 구조를 단순화하여 핵심만 표현하는 과정실생활 예시: 자동차 운전 (내부 엔진 원리를 몰라도 운전 가능) 리모컨 (내부 동작을 몰라도 버튼으로 조작 가능)abstract 키워드를 사용하여 정의내부에 다음 요소
객체의 동작을 표준화 하는 기법을 인터페이스라고 한다.추상 메소드와 상수만 가질 수 있음 (default)."어떤 동작을 해야 하는지"를 정의하고 구현 클래스에서 세부 로직을 구현한다.개발에 필요한 기본 틀 제공개발자들 간의 일관성 있는 개발 가능하나의 인터페이스로 다
Error Error는 시스템 레벨에서 발생하는 심각한 문제를 말합니다. 프로그램이 복구될 수 없는 심각한 문제 개발자가 처리할 수 없는 문제 주요 Error OutOfMemoryError JVM에 할당된 메모리가 부족할 때 메모리 누수나 과도한 메모리 사용시
예외 처리의 개념 프로그램 실행 중 발생할 수 있는 예외에 대비하는 코드를 예외 처리(Exception Handling)이라고 합니다. 예외 처리를 통해 프로그램의 비정상 종료를 막고 정상적인 실행 상태를 유지할 수 있음 예외 상황에 대한 적절한 처리를 통해 프로그램의
스트림(Stream)은 데이터를 운반하는 통로 물이 흐르는 것처럼 데이터가 한쪽 방향으로만 흐른다. 입력과 출력을 동시에 할 수 없다. (단방향) FIFO (First In First Out) 구조로, 먼저 들어온 데이터가 먼저 나간다. (선입선출)입력 스트림 :

데이터나 객체를 저장하는 구조를 의미함 List, Set, Map 등의 다양한 형태가 존재함구조, 틀 이라는 의미를 가지고 있음 특정 문제를 해결하기 위한 기본적인 설계나 뼈대를 제공하는 시스템자바 언어 기반으로 데이터 구조와 관련된 다양한 작업을 쉽게 처리할 수
ArrayList는 배열을 기반하기 때문에 각 요소들은 연속적인 메모리 공간에 배치됨따라서, 중간에 요소를 삽입하거나 삭제하는 경우에는 배열의 크기와 요소의 이동이 필수적임LinkedList는 연결 리스트를 기반으로 각 요소들은 노드로 구성되고 이전 노드와 다음 노드를
Set 인터페이스를 구현한 클래스 중 하나로, 중복을 허용하지 않는 데이터 집합을 관리하는 컬렉션HashMap을 기반으로 동작요소의 순서를 보장하지 않음해싱을 사용하여 효율적인 데이터 저장과 검색이 가능null 저장 가능Set 인터페이스를 구현한 클래스 중 하나로, 중
hashCode()를 기반으로 버킷을 탐색하고, equals()를 기반으로 동일한 요소가 존재하는지 확인 hashCode()와 equals()를 올바로 정의하지 않으면 버킷을 찾는 과정과 중복을 판별하는 과정을 제대로 처리되지 않음방법 1. for-each문 사용방법
키와 값의 쌍(key-value pair)으로 데이터를 다룰 때 주로 사용하는 인터페이스입니다.Collection 인터페이스의 하위 인터페이스가 아님동일한 Key에 대해서는 하나의 값만 허용 (중복 Key 불가)Key의 순서는 자료구조에 따라 다를 수 있음 (있을 수도

발생 시점과 예외 처리를 강제하는 여부에 따라 차이가 있을 수 있음finally 블록은 예외 발생 여부와 관계없이 항상 실행되는 블록try-catch 문을 사용할 때 반드시 실행되어야 하는 코드가 존재할 때 사용try 문에는 예외가 발생하지 않으면 catch문은 실행되

질문 1. 사용자 정의 예외를 만드는 방법과 활용 사례를 설명하세요. 질문2. try-with-resources는 기존의 finally 블록과 비교했을때 어떤 장점이 있는가 ? 질문 3. throws와 throw키워드의 차이점은?
질문1. Thread를 생성하는 방법 2가지와 차이점은 ? 1.Thread 상속 다른 클래스를 상속할 수 없음 (extends Thread) 유연성이 낮음 실무에서 잘 사용하지 않음 2. Runnable구현 다른 클래스를 상속하면서 동시에 사용
멀티스레드 환경에서 여러 스레드가 공유 자원(변수, 객체, 파일 등)에 동시에 접근할 때, 데이터의 일관성을 유지하고 Race Condition을 방지하는 기술멀티 스레드 환경에서는 여러 스레드가 동시에 같은 자원에 접근할 수 있음동기화가 되지 않으면, 여러 스레드가
내부적으로 객체의 "monitor lock"을 사용하여 동기화를 보장함Monitor는 특정 객체 또는 클래스에 대한 고유 락(lock)을 관리하는 역할을 함java에서 모든 객체(Object)는 기본적으로 하나의 모니터 락을 가지고 있음synchronized 가 사용되
ThreadLocal은 각 스레드가 독립적으로 데이터를 저장하고 관리할 수 있도록 해주는 Java 클래스입니다.즉, 각 스레드마다 개별적인 변수 공간을 제공하여 공유 자원 없이도 안전하게 데이터를 유지할 수 있습니다.✅ 스레드마다 독립적인 저장 공간 제공 → 동기화 문
멀티 스레드 환경에서의 동시성 문제여러 스레드가 공유 자원(e.g., static 변수, 인스턴스 변수 등)에 접근하면 데이터 충돌이 발생Race condition (경쟁 상태), 데이터 불일치, deadlock (교착 상태) 등의 문제가 발생할 수 있음ThreadLo
ExecutorService는 Java에서 스레드를 직접 생성하고 관리하는 번거로움 없이, 효율적으로 스레드를 실행할 수 있도록 해주는 인터페이스입니다.개발자가 직접 Thread를 만들지 않고도 멀티스레딩 작업을 수행할 수 있습니다.스레드 풀(Thread Pool) 을
1.일정 개수의 스레드가 미리 생성됨 (FixedThreadPool(5) -> 5개의 스레드 유지)2\. 사용자가 작업을 요청하면, 대기 중인 스레드가 실행됨3\. 작업이 끝난 스레드는 다시 풀로 반환되어 재사용됨4\. 스레드 개수가 부족하면 새로운 작업은 대기 큐에
Java8에서 도입된 Stream API는 데이터 컬렉션 (List, Set,Map)을 함수형 방식으로 처리하는 도구기본적으로 stream()을 사용하면 데이터 흐름을 선언적으로 조작할 수 있음for-loop 없이 간결한 코드로 데이터 변환, 필터링, 매핑 가능불변성
질문 1. 병렬 스트림 (Parallel Stream)을 사용할 때 발생할 수 있는 문제점은? 질문 2. ForkJoinPool은 무엇인가? 질문 3. 병렬 스트림과 ExecutorService의 차이는?
동기 프로그래망 : 하나의 작업이 완료될 때까지 대기 후 다음 작업을 실행작업이 오래 걸릴 경우 전체가 지연됨cpu 효율이 낮음 (대기 시간 발생)연속된 계산,단순 로직에 적절함비동기 프로그래밍 : 여러 작업을 동시에 실행하고, 결과가 필요할 때만 기다림빠른 응답 가능
ExecutorService.submit()을 사용해 비동기 작업 실행get() 호출 시 결과를 기다리며 블로킹됨콜백 체이닝이나 작업 병렬 조합을 지원하지 않음예외 처리는 일반적인 try-catch 방식으로 처리해야 함supplyAsync()를 통해 비동기 작업 실행t

주로 Java 8 이하 버전에서 사용되는 전통적인 구조, 전체 메모리가 크게 Heap 영역과 Non-Heap 영역으로 나뉘며, Heap은 다시 Young / Old 세대로 나뉘게 된다.Young Generation (영 세대) Eden: 객체가 처음 생성되는 공간입니
Java는 꾸준한 발전을 통해 다양한 기능과 개선사항을 도입해왔습니다.이 글에서는 Java 8부터 21까지의 핵심 기능을 한두 가지씩 요약하여 정리합니다.✅ 람다 표현식, Stream API 도입→ 선언형 방식의 데이터 처리 가능✅ JPMS (Java Platform
배열이 빠르다 메모리가 고정되어서 배열은 인덱스 크기조정 리스트는 Node데이터 가 이루어져있고 크기가 항상 동적이다. 리스트가 유리조회를 많이하는 프로젝트에서는 ArrayList를 사용하였고삽입,삭제가 많이하는 프로젝트에서는 LinkedList를 사용하였다.