Java 9

[Java] 객체 생성과 싱글톤 패턴 - 왜 필요한가?

자바에서 객체를 생성하고 사용하는 기본적인 방법은 new 키워드를 사용한다. 근데 이대로도 괜찮은가 라는 생각이 있음 아래는 기본적으로 new 키워드로 객체 생성하는 코드이다. 객체 속성 정의 Car 클래스, 실행public class Car { String modelName; String color; public Car(String modelName, String color) { this.modelName = modelName; this.color = color; }}public class Main { public static void main(String[] args) { Car car1 = new Car("현대자동차1", "..

Java 2025.07.29

JDK, JRE, JVM 그게 뭔데

오늘은 JDK, JRE, JVM에 대해 정리해봤다자바 공부하다 보면 맨날 헷갈리는 단골 질문"JDK, JRE, JVM 이게 뭔데?"오늘은 이 셋의 관계랑, 바이트코드가 뭔지도 같이 정리해봤다. JDK (Java Development Kit) -> 범위가 가장 큰 놈이다.말 그대로 자바 개발 도구 모음 세트개발자가 작성한 소스코드를 .java로 만들고, .class로 컴파일하고, 디버깅하고 실행까지 다 해볼 수 있다.실제로 개발할 땐 이걸 설치해야 하고 JDK에 JRE, JVM 다 포함됨예) javac(컴파일러), jdb(디버거), jar(압축 툴) 등등 개발자 도구가 다 들어있음 JRE (Java Runtime Environment)개발 도구는 빠진 대신, 자바 프로그램을 실행할 수 있는 환경JRE는 ..

Java 2025.07.18

[Java] LinkedList 구현 및 Array와 차이점

자료구조와 알고리즘을 학습하며 LinkedList를 자주 접하게 되었다. LinkedList는 배열과 비슷한 구조로 자주 비교되곤 하는데, 이번에 배열과 LinkedList가 어떤 부분에서 다른지 확인해보려 한다. 앞으로 설명할 예시 데이터 형태는 int이다. Array / 배열 배열은 인덱스를 사용하여 요소에 직접 접근이 가능하다. 이 말은 인덱스를 알고 있으면 상수 시간 O(1)에 해당 요소에 접근할 수 있다는 뜻이다. 모든 요소는 메모리에 연속되어 저장된다. 첫 번째 요소의 인덱스(주소)를 알면 다른 요소에도 빠르게 접근이 가능하다. 배열은 생성시 크기가 고정된다. 계속해서 값을 추가하는 등의 작업이 있다면 효율적이지 않고 더 큰 배열을 만들어야 한다. 장점 조회 및 검색에 빠르다. 단점 삽입과 삭..

Java 2023.09.20

[Java - Hash] HashTable / HashCollision(해시 충돌)

HashTable 일반적인 List나 배열의 경우 연속된 데이터를 조회할 때 인덱스를 기반으로 검색한다. // 아래와 같은 int 배열이 있을 때 숫자 3은 index 값으로 2를 갖게된다. // 숫자3을 출력하기 위해 = arr[2]를 사용할 수 있다. ; int[] arr = {5,1,3}; HashTable의 경우 한 쌍의 Entry인 Key : Value 로 저장하는데, 위의 arr배열을 Hash로 저장하면 아래와 같다. HashTable table = new HashTable(); [{0 : 5}, {1 : 1}, {2 : 3}] 각 요소를 출력하기 위해 아래와 같은 함수를 사용할 수 있다. table.get() Hash Function HashTable에 데이터를 추가하거나 조회할 때, Has..

Java 2023.09.04

[Java] 직접 구현해보는 Stack

먼저 Stack에대해 간단히 설명하자면 아래와 같고 코드로 직접 구현해봤다. 스택 후입선출(LIFO / Last-In-First-Out): 최근 추가된 요소가 먼저 제거되고 먼저 추가된 요소가 나중에 제거된다. 이해하기 쉬운 예시로 식당에 줄을 서있는데 늦게 온 사람이 먼저 들어가는 것 이라고 생각하면 된다. push : 스택에 data 넣음. pop : 스택 맨 위의 data 제거. -> 가장 마지막에 push 한 data가 가장 먼저 pop 된다. peek : pop과 유사하게 맨 위의 data 반환 -> 스택에서 제거되지 않음. top : 가장 마지막에 추가된 data의 위치 (가장 맨위) 오버플로우 (Overflow) 자료가 스택 크기를 넘어 더 이상 push가 안될 때 언더플로우 (Underfl..

Java 2023.09.03

[Java] REST API 간단 이해

REST RESTful REST API RESTful API 개발을 시작하고 많이 보고 들어본 단어들이다. REST가 공통된 위 단어들이 무엇을 뜻하는지 보겠다. REST (Representational State Transfer) CRUD(Create, Read, Update, Delete) 작업을 HTTP 프로토콜을 통해 API를 설계하기 위한 아키텍처 스타일이다 Stateless(무상태성)이 특징으로 각 요청은 서버에서 어떤 상태도 저장하지 않아야 함. 모든 정보는 각 요청 안에 포함되어야 한다 사용자가 로그인한 상태에서 API를 호출한다고 했을 때, 이 요청을 누가 요청했는지에 대한 정보 (토큰, 세션 정보)를 포함해야 함(요청을 처리하기 위한 모든 필요한 요소) RESTful REST 원칙을 따..

Java 2023.08.04

[Java] DTO DAO 한번에 이해하기

DTO(Data Transfer Object): 데이터를 전송하는 객체 DAO(Data Access Object): 데이터에대한 접근을 추상화하고 캡슐화하는 객체 클라이언트가 서버에 어떻게 요청하고 서버는 어떻게 처리하여 내보내는지 회원가입을 예로 이해해 보겠음. 1. 회원가입 화면에서 클라이언트는 아이디나 비밀번호를 유저에게 입력받고 입력받은 값을 서버로 보낸다(Json형식) 2. 데이터를 requestDto로 받는다 3. 회원가입 컨트롤러에서 위의 requestDto를 매개변수로 받아 서비스 로직으로 보낸다 4. 서비스 로직에서는 requestDto 내부의 값들이 실제 db에 있는지 확인 후 가입 진행 - 실제 db에 requestDto 값들이 있는지 확인하기 위해 dao가 필요.(jpa를 사용한다면..

Java 2023.07.30

[Java] 문자열 String, Buffer, Builder

Java를 공부하며 문자열은 String만 있는 줄 알았고 String만 사용했다. 하지만 종종 StringBuilder, StringBuffer가 보이는데 흔히 String은 불변이고 나머지는 가변이라고 한다. String 이란? 변경할 수 없으며(불변) 고정된 문자를 저장하는 데 사용 a는 "안녕" 이다. a는 "안녕하세요" 이다. -> String은 불변인데 a가 바뀐 것 아닌가? 먼저 눈에 보이는 문자열 a의 값은 바뀐게 맞다. 그러나 위에서 말하는 불변이란 주소값을 가리킨다. 즉, 처음의 참조변수 a는 "안녕" 이라는 값을 가리키는 주소값을 갖게된다. 그리고 새로운 두 번째 참조변수 a는 "안녕하세요"를 새롭게 가리키는 주소값을 갖게되며 기존의 a값인 "안녕"과 해당하는 주소값은 더이상 사용하지..

Java 2023.07.23

객체지향적 설계를 위한 5가지 SOLID 원칙

단일 책임 원칙 위반 증상 기능 변경이 발생했을 때 연쇄적으로 코드를 수정해야 합니다. 기능이 너무 복잡해서 재사용하기 어렵습니다. 메서드의 크기가 비대해 집니다 해결 방법 기능별로 클래스를 구현한다. 상속을 통해 각 클래스들을 이용한다. public class AddOperation { public int operate(int firstNumber, int secondNumber){ return firstNumber + secondNumber; } }// 덧셈 클래스 구현 public class SubstractOperation { public int operate(int firstNumber, int secondNumber){ return firstNumber - secondNumber; } }// ..

Java 2023.02.24