Backend 27

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

SpringBoot 1주차 스터디 - 어노테이션, 의존성 주입(Dependency Injection)

학습목표 외부 API 호출 하는 방법 어노테이션이 어떤 기능을 하는지 정리 @RestController @RequestMapping, @GetMapping, @Service, @Component @Configuration @SpringBootApplication Lombok : @Getter, @Setter, @Data, @Builder 스프링 프레임워크의 DI에 대해서, 면접 때 설명할 수 있는 수준으로 정리 외부 API 호출하는 방법 RestTemplate 을 사용할 수도 있고, 실무에서는 Feign Client 또는 WebClient를 많이 사용 합니다. 어노테이션이 어떤 기능을 하는지 정리 @RestController (@Controller + @ResponseBody) @Controller 일반..

Backend/SpringBoot 2022.03.29

[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

연산자

학습목표 비트연산자 쉬프트연산자 실수 오버플로우 논리 연산자 비트연산자 & 대응되는 비트가 모두 1이면 1을 반환함. (비트 AND 연산) | 대응되는 비트 중에서 하나라도 1이면 1을 반환함. (비트 OR 연산) ^ 대응되는 비트가 서로 다르면 1을 반환함. (비트 XOR 연산) &^ 비트 클리어 연산자. 특정 비트값을 열거할때 사용 ex. 10&^2 1단계 : ^연산을 수행합니다. 2 -> ^2 (1111 1101) 2단계 : & 연산을 수행합니다. 10 &^2 (0000 1000) ~ 비트를 1이면 0으로, 0이면 1로 반전시킴. (비트 NOT 연산) 쉬프트연산자 2) fmt.Printf("z:%08b z>>2:%08b z>>2: %d\n", uint8(z), uint8(z>>2), z>>2) fm..

Backend/Golang 2021.05.10

fmt 패키지를 이용한 텍스트 입출력

서론 초기 컴퓨터는 1개의 입력장치(카드리더기)와 1개의 출력장치(프린터)로 구성되어 있었다. (표준입력)->CPU->(표준출력) 은 항상 일정하다. 01010101... 이런 입출력되는 표준입출력 형태는 BitStream, ByteStream이라고 한다. 표준출력함수 Print() : 함수 입력값들을 출력. Println() : 개행(newline)을 포함하여 출력. Printf() : format에 맞도록 입력값들을 출력. - %d : demimal 정수타입 - %f : float 실수타입 - %v : 데이터 타입에 맞춰서 기본 형태로 출력합니다. - %e : 지수 형태로 실숫값을 출력합니다.(실수 타입만 가능) - %g : 값이 큰 실숫값은 지수형태, 작은 실수값은 그대로 (%f)로 출력합니다. -..

Backend/Golang 2021.05.05