분류 전체보기 235

문자열

👣 개요 자바에서 문자열을 표현하는 객체들의 차이를 확인. String StringBuilder StringBuffer 저장 위치 Heap or String Pool Heap Heap Modifable Immutable Mutable Mutable Thread Safe O X O 여기서 Modifable이란? 예를 들어 "처갓집 (슈프림양념)치킨 먹고 싶다"라는 문자열이 있을 때, 해당 문자열을 "처갓집 (프라이드)치킨 먹고 싶다"라고 문자의 일부분만 변경 가능할 수 있냐는 것이다. String의 경우 일부 문자만 변경하고 싶어도 새로운 객체를 만들어서 할당해야 하기에 불필요한 메모리 할당을 유발한다. 하지만 동시에 Thread Safe하다는 특성을 가질 수 있다. 👣 String String 객체는 '..

Java 2023.07.17

Call By Value & Call By Reference

👣 개요 두 개념 모두 메소드를 실행하기 전에 메소드의 Parameter를 넘길 때의 방법에 대한 것이다. public static void transform(int func_digit, SomeThing func_instance) { func_digit = 10; func_instance.setId(10); } public static void main(String[] args) { SomeThing instance = new SomeThing(); instance.setId(5); int digit = 5; transform(digit, instance); System.out.println(digit); // output : 5 System.out.println(instance.getId()); //..

Java 2023.07.17

JDK, JRE, JVM

👣 JDK - [Java Development Kit] 자바 개발을 위해 필요한 프로그램들의 모음. JDK = JRE + [ JavaC : 자바 컴파일러, Javap : 바이트 코드를 소스 코드로 해석하는 디어셈블러, JavaDoc : 자바 소스로부터 HTML 형식의 API 도큐먼트 생성, Jar : 자바 클래스 파일을 압축한 자바 아카이브 파일(.jar) 생성, 관리, Jdb : 자바 응용프로그램의 실행 중 오류를 찾는 데 사용하는 디버거, ... ] 플랫폼에 독립적이라는 특징을 가지고 있다. 👣 JRE - [Java Runtime Environment] 자바 실행을 위해 필요한 프로그램들의 모음. 자바 개발자가 아닌 자바 프로그램 사용자가 필요로하는 프로그램이다. JRE = JVM + [ Java :..

Java 2023.07.17

Garbage Collector

👣 개념 가비지 컬렉터는 JVM에 구성요소로서 RunTime Data Area 내부의 Heap 영역에 할당된 메모리 영역을 해제하기 위해 존재하는 장치다. Stack 영역과 달리 Heap 영역의 메모리는 의도적인 메모리 해제 과정을 거치지 않으면 결국 사용하지 않음에도 불구하고 사용할 수 없는 메모리 공간으로 가득찬다. 이를 메모리 누수라고 한다. 이런 상황을 피하기 위해 C 언어에서는 개발자가 직접 해제하는 방식을 택하고 있는데 이는 비즈니스 코드 이외의 코드도 작성해야 하기에 이를 불필요한 Cost가 많이 소모된다. 자바의 경우 JVM의 Garbage Collector가 이런 과정을 자동화하게 된다. 👣 Stop The World GC는 사용자가 직접 상황 판단을 하는 것이 아니다 보니 성능에 문제를..

Java 2023.07.17

Java 코드 작성부터 실행까지

👣 개요 자바 코드를 작성하고 해당 코드를 실행시키는 과정에 대해 작성하는 게시물이다. 👣 Java Compiler 자바 소스 코드(1)는 그 자체로 컴퓨터가 이해할 수 없기 때문에 컴퓨터가 이해할 수 있는 형식(2)으로 변환해야 한다. // 자바 소스 파일(Swap.java) --- (1) class Swap { public static void main(String[] args) { int[] testCase1 = {1, 26}; // swap : 배열의 특정 인덱스쌍의 위치를 바꾸는 함수. swap(testCase1, 0, 1); // 결과물 출력. for (int item : testCase1) { System.out.println(item); } } public static void swap(i..

Java 2023.07.17

MySQL 스키마 일괄 생성

주의!! 해당 과정은 특정 버전에서만 작동할 수 있습니다. mysql --version # 출력 결과 # mysql Ver 8.0.33-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu)) 👣 schema.sql 작성 -- AGENT CREATE TABLE IF NOT EXISTS `AGENT` ( `ID` BIGINT PRIMARY KEY, `CREATED_AT` TIMESTAMP, `EMAIL` VARCHAR(255) UNIQUE NOT NULL, `PASSWORD` VARCHAR(255) NOT NULL, `NICKNAME` VARCHAR(255) UNIQUE NOT NULL, `PROFILE_IMAGE` VARCHAR(255), `INTRODUCTION` TEXT ..

데이터베이스 2023.07.13

MySQL 설치 - Ubuntu

👣 설치 유무 확인 mysql -u root -p 위 코드를 이용해서 mysql이 설치되어 있는지 확인하기. 👣 MySQL 설치하기 sudo apt-get update -y 1. 우선 위 방법으로 apt-get을 업데이트. sudo apt-get install mysql-server 2. mysql 프로그램 설치 더보기 나의 경우엔 설치 도중에 오류가 발생했었음. 이런 문제가 발생 시, 컴퓨터를 재부팅하고 다음과 같은 명령어로 해결함. sudo dpkg --configure -a 위 명령어를 입력하면 문제가 해결되고 mysql이 작동함. 👣 Root 계정 비밀 번호 바꾸기 sudo mysql -u root 1. mysql 프로그램에 접속함. 설치 오류로 인해 콘솔에서 초기 비밀번호를 부여받지 못해 sud..

데이터베이스 2023.07.13

Servlet에서 Spring Boot까지의 발전 양상

💬 웹 서버 구축 시, 어려움 문제점 1. Http의 복잡한 통신 규약 Http는 단순히 데이터만 주고 받을 뿐만 아니라 통신 규약을 지키기 위한 많은 헤더를 가지고 있고 자원을 요구하는 URI는 각종 정보를 포함하고 있기 때문에 직접 모든 규약에 맞게 설정하기 어렵다. HTTP 통신을 위한 복잡한 규약을 지켜서 Request를 해석하고 Response를 클라이언트에게 전달해야 한다는 제약이 있다. 문제점 2. 동적 페이지의 필요성 동적 페이지란? 미리 만들어진 웹 페이지가 아닌 상황에 유연하게 대처하기 위해 입력된 데이터를 기반으로 새로운 웹 페이지를 만드는 HTML 페이지. 💬 Servlet의 탄생. Java를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램. 웹프로그래밍에서 웹 프로그래밍에서 ..

Spring Boot 2023.07.12

힙 정렬

개요 최대 Heap 자료 구조를 이용해서 최대값을 pop하고 해당 값을 뒤부터 적재하며 정렬. 복잡도 최악 평균 최소 Big O 표기법 O(nlogn) O(nlogn) O(nlogn) 알고리즘 절차 모든 요소를 최대 heap 자료 구조로 만들 수 있도록 heapify 시킴. 최대 heap 에서 pop을 하고 마지막 요소와 swap함. 이 과정을 모든 요소가 정렬이 되도록 계속 반복함. 자바 코드 class Heap { public static void main(String[] args) { int[] testCase1 = {1, 26, 9, 67,653,452,2,3,46,87,356543}; heapSort(testCase1); for (int item : testCase1) { System.out.p..

병합 정렬

개요 우선 전체 요소를 각 부분 집합의 크기가 1개가 될 때까지 반절로 재귀적으로 쪼갠다. 그리고 쪼개진 부분 집합들을 역순으로 조립해나간다. 이 때, 조립은 2 개씩 진행하며 2개를 조립할 때 각 부분 집합을 큐로 취급하여 두 큐의 맨 앞 요소 중 가장 작은 값을 선택하고 pop하며 차곡차곡 조립한다. 이 과정을 재귀적으로 진행하면 결국 전체적으로 정렬이 된다. 복잡도 최악 평균 최소 Big O 표기법 O(nlogn) O(nlogn) O(nlogn) 알고리즘 절차 합병 정렬을 준비하기 위해 정렬할 배열[arr]와 크기가 똑같은 빈 배열[tmp]을 생성한다. 정가운데 요소를 기준으로 arr를 반으로 잘라내고 각 부분을 재귀적으로 합병 정렬한다. 이 때, 정렬은 후위 순회를 하며 진행한다. 실제 정렬 방법..