전체 글 33

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

MySQL - 실행 계획 분석

학습할 것 Mysql Explain 사용방법 주요 실행계획 분석 항목 select_type type extra MySQL Explain MySQL 튜닝에서 가장 중요한 것은 쿼리와 스키마 최적화이다. 스키마 설계는 한번 진행되면 그 테이블을 사용하는 모든 쿼리에 영향을 주기 때문에 좀처럼 변경하기 힘들지만 쿼리는 해당 쿼리만 수정하면 되므로 변경하기 쉽다. Slow Query를 없애는 것은 성능을 향상 시키기 위한 매우 중요한 수단이므로 어플리케이션의 성능을 향상 시키고 싶다면 우선적으로 쿼리의 튜닝을 검토해봐야 한다. 성능 진단의 가장 첫걸음은 실행한 SQL이 DB에서 어떻게 처리되는 지를 파악하는 것이다. 사람이 이해할 수 있는 언어로 구성된 SQL을 실행하도록 DB에 명령을 내리면 DB는 내부적으로..

DB/Mysql 2021.12.01

AWS Redshift

배경 1. Data warehouse 사전적 의미 - 다양한 출처로 부터 축적된 데이터의 집합을 의미하며, 이것을 바탕으로 회사의 의사 결정등에 사용할 수 있다. 2. AWS Redshift 는 이러한 Data warehouse를 다양한 비지니스 툴을 사용해서 데이터를 분석하게 해주는 솔루션을 말한다. 특징 1) Redshift는 다양한 데이터, ETL(Extract, Transform and Load), Business Intelligence(BI) Reporing, Data mining(데이터 채굴), 분석도구등이 통합되어 있다. 2) Redshift는 Industry-standard PostgreSQL(8.0.2)에 기반을 두고 있어서, 최소한의 변화를 가지고 클라이언트에서 접근이 가능하다. - R..

카테고리 없음 2021.11.10