java란?
JVM (Java Virtual Machine)의 정의와 구성 JVM은 '자바 가상 머신'이라는 의미로, 자바를 실행 가능하게 하는 가상의 기기를 의미한다. 바이트 코드: Java 프로그램이 변환된 코드로, 운영체제가 직접 읽을 수 있게 java 컴파일러에 의해 변환된다. 컴파일러: .java 소스 코드를 .class 파일 (바이트 코드)로 변환한다...
변수 및 기본형 변수 타입 소개 변수는 프로그래밍에서 데이터를 저장하기 위한 메모리 공간을 의미한다. 자바에는 여러 타입의 기본형 변수가 있으며, 각 변수 타입에 따라 저장할 수 있는 데이터의 종류와 크기가 다르다. 숫자와 문자 숫자와 문자는 프로그래밍에서 자주 사용되는 기본 데이터 타입이다. 숫자는 연산이 가능하며, 문자는 알파벳, 숫자, 특수문자 ...
Sol Sol은 사용자가 좋아하는 요리와 그 요리의 레시피를 입력받아 출력하는 간단한 자바 프로그램이다. 입력 규칙: 좋아하는 요리의 제목을 입력한다. 해당 요리에 대한 별점을 1~5 사이의 소수점을 포함한 실수로 입력한다. 요리 레시피를 한 문장씩 총 10문장을 입력한다. 출력 규칙: 요리 제목을 [ ]로 감싼다. 요리의 별점을 소수점을 제외하고 출력...
사용자로부터 저장할 자료구조명을 입력받는다. (List / Set / Map 중 하나)사용자가 좋아하는 요리 제목을 입력받는다.이후, 사용자가 좋아하는 요리 레시피를 한 문장씩 입력받는다.입력을 마칠 때는 "끝" 문자를 입력한다.출력 내용입력이 종료되면, 저장한 자료구
Java를 활용한 숫자 야구 게임 구현 1. 게임 설명 숫자 야구는 컴퓨터가 무작위로 3개의 서로 다른 숫자를 선택하고, 사용자가 그 숫자를 맞추는 게임이다. 사용자는 숫자와 위치를 맞출 때까지 여러 번 시도할 수 있다. 맞춘 횟수에 따라 성적이 주어진다. 2. 규칙 스트라이크(S): 숫자와 위치가 모두 일치할 경우 볼(B): 숫자는 일치하지만 위치...
1. 객체란? 객체는 현실 세계에 존재하는 모든 물체나 개념을 소프트웨어 세계로 표현한 것이다. 객체는 그 자체로 하나의 역할을 수행하며, 상태와 행동을 가진다. 2. 객체의 구성 속성(필드): 객체의 상태나 특징을 표현한다. 예: 사람의 이름, 나이, 키 등 행위(메서드): 객체가 할 수 있는 작업이나 기능을 표현한다. 예: 사람이 걷다, 뛰다, 먹다 ...
생성자 (Constructor) 정의: 클래스 이름과 동일한 이름의 메서드로, 객체 생성 시 자동으로 한 번 호출된다. 객체의 초기화 작업을 주로 담당한다. 특징: 반환 값이 없다. 오버로딩이 가능하다. 즉, 같은 이름의 생성자를 여러 개 선언할 수 있다. 기본 생성자: 사용자가 생성자를 하나도 선언하지 않았을 때, 컴파일러에 의해 자동으로 추...
1. 클래스 선언 클래스는 설계도이다. 클래스 이름과 접근 제어자를 정의한다. 2. 필드 정의 객체의 상태를 나타내는 변수다. 접근 제어자로 외부의 접근을 제한한다. 3. 생성자 정의 생성자는 객체 생성 시 초기화 작업을 담당한다. 생성자 이름은 클래스 이름과 동일해야 하며, 반환 타입을 가지지 않는다. 4. 메서드 정의 객체의 동작을 나타낸다. 필...
객체의 속성: 필드 필드는 객체의 데이터 저장 역할을 한다. 필드의 분류 고유한 데이터 상태 데이터 객체 데이터 필드의 초기값과 초기화 사용자 정의 클래스는 초기값을 제공하지 않으면 기본 값으로 초기화한다. 초깃값 제공 방법: 필드타입 필드명 = 값; 필드에 접근 외부에서: 내부에서: 메서드 내에서 필드 speed에 바로 접근한다. 객체의 행...
생성자 생성자는 객체 생성 시 호출되며 객체를 초기화한다. 기본 생성자: 매개변수 없는 생성자. 컴파일러는 자동으로 기본 생성자를 추가한다. 해당 클래스의 접근제어자를 따르게 생성된다. 생성자의 주된 역활: 객체 초기화. 필드 초기화나 초기값 대입 가능. 사용자 정의 생성자를 만들 경우, 기본 생성자는 자동으로 제공되지 않는다. 생성자 ...
접근 제어자는 클래스와 클래스의 멤버의 가시성을 조절한다. 클래스와 멤버(필드와 메서드)의 가시성을 제어하여 데이터를 보호하거나 캡슐화에 사용된다. 접근 제어자 종류: public: 아무 제한 없이 모든 곳에서 접근 가능하다. protected: 같은 패키지나 다른 패키지의 상속받은 자식 클래스에서만 접근 가능하다. default: 같은 패키지에서만 접...
패키지(Package): 클래스를 구조적으로 관리하기 위한 단위이다. 도트(.)를 사용하여 계층 구조로 표현한다. 클래스 식별 및 관리 목적이다. import: 다른 패키지의 클래스를 현재 클래스에서 사용하려면 해당 클래스를 명시적으로 지정한다. import 키워드를 통해 다른 패키지의 클래스나 인터페이스를 참조할 수 있다. 패키지와 import는 클...
상속의 정의: 객체 지향 프로그래밍의 핵심 요소 중 하나이다. 자식 클래스가 부모 클래스의 필드와 메서드를 사용할 수 있게 해준다. 상속의 목적: 적은 코드로 새 클래스를 작성하게 해준다. 코드 재사용을 통한 중복 제거가 가능하다. 공통 코드의 중앙 관리를 통해 추
정의: 부모 클래스에서 상속받은 메서드의 내용을 자식 클래스에서 재정의하는 것이다. 오버라이딩의 조건: 부모 클래스와 메서드의 선언부가 일치해야 한다. 접근 제어자는 부모 클래스의 메서드보다 좁은 범위로 변경할 수 없다. 예외는 부모 클래스의 메서드보다 많이 선언할 수 없다. super 키워드: 부모 클래스의 멤버에 접근하기 위해 사용되는 키워드이다....
정의: 객체가 여러 형태를 가질 수 있는 성질을 의미한다. 참조 변수의 타입 변환: 자동 타입 변환: 자식 객체를 부모 타입의 변수로 참조할 때 발생한다. 부모타입 변수 = 자식타입객체; 자식 객체는 부모 객체의 멤버를 상속받으므로, 부모 타입으로 자동 변환된다. 강제 타입 변환: 자식타입 변수 = (자식타입) 부모타입객...
정의: 추상 클래스는 미완성된 클래스로서, 구체적이지 않은 추상적인 메서드(추상 메서드)를 포함할 수 있다. 선언: 특징: 추상 메서드를 포함할 수 있다. 자식 클래스에 의해서만 완성될 수 있다. 공통적인 필드나 메서드를 추출하여 생성될 수 있다. 추상 메서드: 메서드의 선언만 있고 구현이 없는 메서드이다. {} 블록이 없다. 추상 클래스 상속: ...
1. 인터페이스의 역할: 인터페이스는 서로 다른 클래스 간의 규약(약속)을 정의한다. 인터페이스를 구현한 클래스는 해당 인터페이스에 정의된 규약(메서드)을 반드시 구현해야 한다. 특징: 메서드들의 명세만을 포함한다. 구현 클래스는 인터페이스에 정의된 모든 메서드를 구현해야 한다. 다형성을 적용할 수 있다. 선언: 구성: 멤버 변수: 반드시 publi...
2.1. Default method: 디폴트 메서드는 Java 8에서 도입되었으며, 인터페이스 내에서 메서드의 기본 구현을 제공하는 방식이다. 특징: default 키워드를 사용하여 정의한다. 인터페이스를 구현한 클래스는 디폴트 메서드를 오버라이드 할 수 있으나, 필수는 아니다. 이유: 인터페이스에 새로운 메서드를 추가할 경우, 그 인터페이스를 이미 ...
다형성의 핵심은 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 의미한다. 인터페이스의 다형성은 그 의미를 효과적으로 실현한다. * 구현 객체의 자동 타입 변환*: 인터페이스 변수에 구현 클래스의 객체를 대입하면 해당 인터페이스 타입으로 자동 변환된다. 이렇게 변환된 인터페이스 변수는 인터페이스의 메서드만 호출할 수 있다. * 강제...
계산기 구현 Step1 ~ Step2: Calculator 클래스 내에서 switch 문을 사용하여 사칙연산 구현. Step3: 각 연산(AddOperation, SubstractOperation 등) 별도 클래스로 분리. Calculator 클래스는 해당 연산 클래스들을 주입 받아 사용. Step4: Calculator 클래스는 단일 Abstrac...
예외 처리 흐름: 예외 정의 방식 예외 발생 가능성 알림 사용자가 예외 발생 가능성 인지 및 예외 핸들링 방식 오류 vs 예외: 문제 상황에 대한 정의 시작. 회복 가능 여부로 문제 상황 구분. Java에서 문제 상황 대응: 오류: 주로 회복 불가능. 시스템 레벨이나 환경적 원인으로 발생. 코드 문제로 발생 가능. 대응: 발생한 에러 확...
예외처리 동작 흐름: OurClass 객체 생성. thisMethodIsDangerous 메서드 호출 시도. OurBadException 예외 발생 시 해당 예외를 catch 블록에서 처리. OurBadException의 getMessage 메서드 호출로 예외 메시지 출력. finally 블록 실행: "예외 handling 완료" 출력. 위의 ...
3. 예외 클래스 checked Exception & Unchecked Exception checked Exception: 사전에 예외처리 해야하는 예외. 처리를 안 할 경우 컴파일 시 오류 발생. Unchecked Exception: 사전에 알지 못했던 예외.
정의: Java에서 타입을 유연하게 다루게 해주는 프로그래밍 방법. 목적: 코드 중복 및 불필요한 코드를 줄이면서도 타입 안정성을 보장. 타입 변수 이름: 'T'는 컨벤션으로 쓰이며, 협업 시 이해하기 쉽게 만든다. 제네릭 제한: 객체의 static 멤버에 사용할 수 없다. 제네릭 배열을 생성할 수 없다. 제네릭 문법: 여러 타입 변수 사용 ...
Collection (컬렉션) 정의: Java의 컬렉션 프레임워크는 다양한 자료구조의 개념을 표현하는 인터페이스와 그 구체화된 클래스로 구성된다. 특징: 인터페이스는 자료구조의 기본 연산을 정의하며, 클래스는 해당 연산을 구현한다. Wrapper 객체 정의: 원시 타입 값을 객체로 감싸주는 클래스들. 목적: 원시 타입 값이 객체로서의 기능을 필요로 할 ...
프로세스: 동작 중인 프로그램의 실행 단위쓰레드: 프로세스 내에서 실행되는 작은 실행 단위 \- 싱글 쓰레드: 혼자서 실행멀티 쓰레드: 여러 개가 함께 실행쓰레드 생성은 프로세스 내에서 실행 요청이 발생할 때 발생하며, 생성된 쓰레드는 프로세스의 메모리(heap)와
Java 프로그램이 JVM(Java Virtual Machine)에서 실행될 때, 가장 먼저 Java Main 쓰레드가 생성되어 시작됩니다. 이 Java Main 쓰레드는 프로세스 실행과 동시에 반드시 생성되며, 실행된다.장점:성능 향상: 작업을 병렬로 수행하여 전체적
1차 시도 시간 초과로 인한 실패좀 더 최적화된 알고리즘이 필요2차 시도 2번째 for 문읜 numbers대신 i 사용여전히 실패 다른 알고리즘 필요 최적화된 알고리즘 사용성공
정렬과 필터링ArrayList<LevelOneDataResponseDto> 객체에 값을 할당하려고 했다.정렬은 stream을 이용하려고 했다.객체의 일부만 전달하기 위해 filter나 map을 사용하는 방법을 고려했다.Filtered Data
collect() 메서드는 스트림의 최종 연산 중 하나이다. 이 메서드의 주요 목적은 스트림의 요소들을 특정 결과 컨테이너에 수집하는 것이다.Collectors.joining()은 java.util.stream.Collectors 클래스에 포함된 정적 메서드로서, 문자
map은 기본 데이터 유형의 스트림, 예를 들면 IntStream, LongStream, DoubleStream 등을 변환할 때 주로 사용된다.변환 후 반환되는 스트림도 기본 데이터 유형의 스트림이다.mapToObj는 기본 데이터 유형의 스트림을 객체 스트림, 즉 St
Spring 프로젝트의 문서화는 중요하지만 수작업으로 하기에는 너무 비효율적이다. 그러던 중 기술 매니저님의 권유로 알게된 JavaDoc이란 것에 대해 알게 되었다.JavaDoc을 이용해 Spring Level 3의 일부를 문서화해보도록 하겠다.먼저 전체를 문서화하지
RESTful 웹 서비스는 웹의 기본 아키텍처 원칙에 따라 설계된 서비스이다. 여기서 "REST"는 "Representational State Transfer"의 약자로 웹 서비스 디자인에서 널리 사용되는 아키텍처 스타일을 나타낸다.자원 지향적RESTful 웹 서비스는
내부 구조: ArrayList는 배열을 기반으로 한다.특징빠른 요소 접근: 인덱스를 통한 요소 접근이 O(1)의 시간 복잡도를 가진다.끝에서의 빠른 추가/삭제: 리스트의 끝에서의 추가/삭제 작업은 O(1)의 시간 복잡도를 가진다.중간 요소 추가/삭제 느림: 중간 요소의
Mockito는 Java에서 널리 사용되는 모킹 프레임워크이다.유닛 테스트를 작성할 때 종종 외부 서비스나 데이터베이스와 같은 의존성을 가진 메서드의 동작을 대체하거나 검증하고 싶을 때 Mockito를 사용한다. Mockito의 verify 메서드는 테스트 중에 특정
Java에서의 테스트 단위 테스트 (Unit Test) 주로 사용되는 계층: 모든 계층 (Controller, Service, Repository, 등등 ) 상황 로직의 정확성을 검증하고자 할 때 외부 시스템에 의존하지 않
Mocking은 테스트 시, 외부 의존성이나 실제 객체를 가짜 객체(mock)로 대체하여 코드의 특정 부분만을 검증하는 방법이다.Mockito 같은 라이브러리는 이를 쉽게 구현할 수 있게 도와준다.속도실제 시스템과의 상호작용 없이 빠르게 테스트 실행 가능의존성 분리테스
어제 만든 코드에 대한 테스트 코드 작성UserWebController는 주어진 경로에 대해 특정 뷰 페이지를 리턴하는 역할을 한다.테스트를 작성하는 목적은 주로 해당 메소드가 예상대로 작동하는지 확인하는 것이다. 따러서 여기선 각 메소드가 호출되었을 때 해당하는 문자
가변인자는 메서드에 전달하고자 하는 인자 수가 정해지지 않았을때 사용하는 기능이다.자바에서는 주로 ...을 통해 사용할 수 있다.가변인자로 받으면 해당 메서드 안에서 배열로서 동작한다.한 메서드에는 반드시 하나의 가변 인자만을 가질 수 있다.반드시 마지막의 매개변수에
도메인 모델 패턴과 트랜잭션 스크립트 패턴은 엔터프라이즈 애플리케이션 아키텍처에서 자주 사용되는 두 가지 중요한 패턴이다. 둘 다 비즈니스 로직을 처리하는 방식에 관한 패턴이지만 그 방법과 사용 사례에는 명확한 차이점이 있다. 큰 규모의 기업에서 사용하는 애플리케이션을
객체 지향 프로그래밍에서 엔티티는 주로 도메인 모델을 설계할 때 중요한 역할을 한다. 엔티티는 애플리케이션의 핵심 비즈니스 로직을 나타내는 객체로 일반적으로 데이터베이스의 테이블과 1:1로 매칭되는 경우가 많다.ORM 프레임워크에서는 이러한 엔티티 객체가 직접 데이터베
페이징 반영기본 requestParam은 0으로 설정하고 ( 처음 페이지 접근 했을때 )그 이후 페이지 이동 시에는 html을 이용해서 페이지 정보를 받아서 해당 페이지의 정보 만을 가지고 온다.
데이터베이스 쿼리 최적화에서 자주 마주치는 문제 중 하나는 바로 'N+1 문제'입니다. 이 문제는 특히 객체 관계 매핑(ORM)을 사용할 때 종종 발생하며, 데이터베이스의 성능 저하를 가져올 수 있습니다.N+1 문제는 한 번의 쿼리로 N개의 연관된 데이터를 가져온 후,
해시 테이블은 데이터를 효율적으로 관리하고 빠르게 검색할 수 있도록 돕는 중요한 자료구조입니다.해시 테이블은 '키(Key)'와 '값(Value)'의 쌍으로 데이터를 저장하는 자료구조입니다. 이때, 각 키는 해시 함수를 통해 고유한 인덱스로 변환되어, 해당 인덱스에 값이
Java 개발을 하다 보면 가끔 다음과 같은 오류 메시지를 만나게 됩니다:이 오류는 디버거가 특정 포트(여기서는 62034)를 사용하려 하지만, 해당 포트가 이미 사용 중이라는 것을 의미합니다. 보통 이런 경우 포트를 사용 중인 프로세스를 찾아 종료하거나, 애플리케이션