Backend/Java 23

Kotlin "코틀린 완벽 가이드" 스터디 1주차

"코틀린 완벽 가이드" 책을 기준으로 공부한 내용을 정리합니다. https://m.yes24.com/Goods/Detail/107698728 기본적인 내용보다 새로 알게된 사실 위주로 정리합니다. 추가적으로 https://kotlinlang.org/docs/getting-started.html 공식 사이트도 같이 정리하려고 합니다. 기본 문법 자바에서는 원시타입을 감싸는 특별한 박싱 타입이 있지만, 코틀린은 필요할 때 암시적으로 박싱을 수행한다. //java int primitiveInt = 10; Integer boxedInt = Integer.valueOf(primitiveInt); // Boxing // 사실 Integer boxedInt = 10 도 가능 int unboxedInt = boxedI..

Backend/Java 2024.01.21

[Java] Stack, Deque, LinkedList

학습목표 - 자바가 제공하는 Stack, Deque, LinkedList 등을 학습하세요. Stack Vector의 상속을 받은 클래스로 LIFO(Last-In First-Out) 으로 나중에 들어온 데이터가 처음으로 빠져나가는 구조이다. 기본적으로 pop,push를 제공한다. 뿐만아니라 peek으로 top에 있는 데이터를 확인할 수 있다. empty로 스텍이 비어있는지 확인할 수 있다. search로 top으로부터 얼마나 멀리 있는지 확인할 수 있다. * 자바에서 일관적이고 권장하는 Stack 오퍼레이션 방식은 Deque인터페이스를 이용한 ArrayDeque이다. Deque stack = new ArrayDeque(); Deque 선형 자료구조 형태로 양쪽에서 삽입과 삭제가 가능한 형태이다. "Doub..

Backend/Java 2022.03.12

[Java] 자바 직렬화 / Serializable / 문제점 / 해결책

학습목표 자바 직렬화 Serializable 자바 직렬화 흐름 직렬화 객체의 상태를 영속화 하는 메커니즘 객체를 다른 환경에 저장했다가 나중에 재구성할 수 있게 만드는 과정 자바 직렬화 쉬운 분산 객체 생성 Byte Stream을 만드는 것 언제 쓰지? 객체 상태를 영속해야 할 필요가 있을 때 어딘가에 저장해야 할 때가 있을때 파일, 데이터베이스, 캐시 메모리 다른 vm으로 객체 정보를 전달해야할 때 바이트 스트림으로 전송해야 할 때 개체 그래프의 보완적인 재구성도 합니다. 경량의 지속성과 소켓, Java RMI 을 지원합니다. 기본적으로 인코딩을 통해 데이터를 보호하고, 자체 인코딩 구현을 할 수도 있습니다. 자바 직렬화 API 직결화된 데이터를 클래스의 필드와 독립적으로 지정할 수 있는 API를 제공..

Backend/Java 2022.02.23

[Java] HashTable / HashMap / 연결리스트의 중간노드 찾기 / LRU 캐시

학습목표 HashTable HashMap 연결리스트의 중간노드 찾기 LRU 캐시 HashTable Hash table 클래스로 구현되며, maps에 key, value로 매핑 된다. key, value 모두 non-null이다. 저장과 조회가 되기 위해서는 해당 오브젝트가 해당 키로 hashCode(), equel() 구현되어야 한다. 해시 테이블이 생성되며 동적으로 설정되는 변수가 2가지 있다. initial capacity load factor 두가지 변수를 임계값으로 이용해 버킷에 쓰는 원소들이 많아질 경우 링크드리스트 같은 형태를 띄게 되면 해시테이블로의 장점이 사라진다 그럴 때 load factor가 임계치에 다다르면 해시 테이블이 리프레시 되고 버킷 수(capacity)를 늘려 관리해준다. 처..

Backend/Java 2022.02.22

[Java] 재귀함수 / 일반재귀 vs 꼬리재귀 / 언어별 꼬리 재귀 최적화 / 연결리스트 꼬리재귀 코드

학습목표 재귀적인 문제 해결 방법 일반 재귀와 꼬리 재귀의 차이를 이해하는가? 여러분이 사용하는 프로그래밍 언어가 꼬리 재귀 최적화를 제공하는지 아니라면 왜 못하는지 학습하세요. 자바 / Nodejs / Golang 연결 리스트를 꼬리부터 머리까지 출력하는 코드를 작성하라. 재귀적인 문제 해결 방법 1) 반복되는 로직을 확인하여 작게 구분하여 재귀함수를 만든다 → 왠만한 반복문은 재귀함수로 작성 가능하다. 2) 종료조건을 명시한다. (f(0),f(1) 아 이게 종료조건이구나.) 장점 가독성이 좋음 코드가 짧음 각 단계의 변수 상태가 자동 저장됨. 코드 검증도 쉬움 단점 재귀적 문제 분석/설계가 안 직관적 맹목적인 믿음이 필요 스택 오버플로 발생 가능 함수 호출에 따른 과부하(모든 함수 호출에는 성능저하가..

Backend/Java 2022.02.20

[Java] 싱글스레드 / 멀티스레드 / 스레드의 IO 블록킹 /스레드 우선순위 / 스레드 그룹 / 데몬 스레드

학습목표 싱글스레드 멀티스레드 스레드의 IO 블록킹 스레드 우선순위 스레드 그룹 데몬 스레드 싱글스레드 예를 들어 main() 메소드가 동작하고 그곳에서 main 스레드가 한줄씩 동작한다. 실행 중인 스레드가 하나도 없을때 프로그램은 종료된다. main 스레드는 다른 스레드가 작업 종료와 관계없이 실행중인 것이 없으면 종료된다. join()을 활용해 다른 메서드가 종료될 때 까지 기다렸다가 작업을 진행할 수 있는 메소드가 있다. 멀티스레드 멀티스레드는 싱글스레드와 다르게 컨텍스트 스위칭 비용이 생겨난다. 그러나 싱글스레드보다 멀티스레드가 좋은 이유는 다음과 같다. 동시에 여러 작업을 할 수 있다. 작업을 좀 더 효율적으로 할 수 있다. -> 스레드의 IO 블락킹 스레드의 IO 블록킹 싱글스레드의 동작시에..

Backend/Java 2022.02.14

String / StringBuffer / StringBuilder / concat과 +, StringBuffer의 append의 차이

학습목표 String StringBuffer StringBuilder concat과 +, StringBuffer의 append의 차이 String 특징 java의 String 클래스로 예를 들어 "abc"라는 클래스를 만든다면 "abc"를 가지는 인스턴스로 implement된다. 가장 큰 특징은 "constant" 한 것이다. 생성되면 변경할 수 없다. immutable한 것이 특징이고. StringBuffer가 이런 특징을 해결할 수 있어서 mutable하다고 할 수 있다. 만약 new 를 통해서 String 클래스를 변경하고 싶을때, 변할 수 없다면 문자의 변경이 필요할 때마다 객체를 생성해야 한다. 이것은 메모리 낭비로 이어진다. 이런 이유 때문에 StringBuffer의 append()를 활용한다..

Backend/Java 2022.02.12

Java 인터페이스(Interface)

목표 자바의 인터페이스에 대해 학습하세요. 학습할 것 (필수) 인터페이스 정의하는 방법 인터페이스 구현하는 방법 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법 인터페이스 상속 인터페이스의 기본 메소드 (Default Method), 자바 8 인터페이스의 static 메소드, 자바 8 인터페이스의 private 메소드, 자바 9 인터페이스 정의하는 방법 자바의 인터페이스 - 인터페이스는 추상 메서드의 집합이다. (static,디폴트 메서드, 상수 도 포함되지만 중요하지 않음) - 자바에서의 인터페이스는 기본적으로 무언가를 규제하기 위한 것이다. 추상클래스는 일반클래스, 일반 메서드를 가질 수도 있다. but 인터페이스는 추상메서드만의 집합이다. 정의하는 방법 - 값이 들어갈 수 있고, 메소드는 실제 구..

Backend/Java 2021.03.06

Java - 패키지 (package/import/클래스패스/접근지시자)

목표 자바의 패키지에 대해 학습하세요. 학습할 것 (필수) package 키워드 import 키워드 클래스패스 CLASSPATH 환경변수 -classpath 옵션 접근지시자 패키지(package) - 서로 관련된 클래스의 묶음.(자바8 이후 약 4000개의 클래스) - 클래스는 클래스파일, 패키지는 폴더. 하위 패키지는 하위 폴더로 .단위로 내려간다. - 클래스의 실제 이름(full name)은 패키지를 포함.(java.lang.String) - rt.jar는 클래스들을 압축한 파일(JDK설치 경로 jre\lib에 위치. but 자바9부터 모듈개념이 들어가면서 rt.jar이 없어짐. (jar파일 압축파일로 ide에서 압축풀어서 볼 수 있음) 패키지의 선언 - 패키지는 소스파일의 첫번째 문장으로 단 한번 ..

Backend/Java 2021.03.05

멀티쓰레드 프로그래밍

목표 자바의 멀티쓰레드 프로그래밍에 대해 학습하세요. 학습할 것 (필수) Thread 클래스와 Runnable 인터페이스 쓰레드의 상태 쓰레드의 우선순위 Main 쓰레드 동기화 데드락 Thread 클래스와 Runnable 인터페이스 쓰레드를 정의하는 방법은 2가지 방법이 있습니다. Thread를 상속받는 방법과 Runnable의 인터페이스를 받아서 정의하는 방법이 있습니다. //Thread 클래스 상속 import java.util.Random; public class MyThread extends Thread { private static final Random random = new Random(); @Override public void run() { String threadName = Thread..

Backend/Java 2021.03.04