[KOTLIN] NULLABLE UNIT 을 리턴하지 말라 (이펙티브코틀린)
·
KOTLIN
코틀린 Unit, Nothing 타입 //Unit 예시 fun report() { // 아무것도 반환하지 않으면 return Unit 이 반환된다. } //Nothing 예시 //fail에서 Exception이 발생하면 user는 Nothing 타입이 됨 //Error: Type mismatch: inferred type is "User" but "Nothing?" was expected var user = if ( isPass() ) 42 else fail("Not Ready") Unit : 함수가 끝났으나 아무 것도 반환하지 않은 경우 Nothing : 함수가 끝이 나지 않은 경우 Unit을 리턴하면 안되는 이유 // Unit? 을 이용하는 경우 fun verifyKey(key: String): Un..
[KOTLIN] 변수의 스코프 최소화 (이펙티브코틀린)
·
KOTLIN
이펙티브 코틀린 변수의 스코프 최소화 최대한 좁은 스코프를 갖게 변수를 사용하는 것이 좋음 반복문 내부에서만 변수가 사용된다면 변수를 반복문 내부에 작성하는 것이 좋음 스코프를 최소화하는 것이 좋은 이유 디버깅하기 수월 mutable 프로퍼티는 좁은 스코프에 걸쳐 있을수록 디버깅이 용이함 변수의 범위가 넓으면, 다른 개발자에 의해서 변수가 잘못 사용될 수 있음 변수는 읽기 전용 또는 읽고 쓰기 전용 여부와 상관 없이, 변수를 정의할 때 초기화되는 것이 좋음 if, when, try-catch, Elvis 표현식 등을 활용하면, 변수를 정의할 때 초기화할 수 있음 스코프 최소화 예시 // 나쁜 예 var user: User for (i in users.indices) { user = users[i] pri..
[AWS] S3
·
AWS
S3 오브젝트 스토리지 서비스로 스토리지 기능 외에 정적 웹서버 및 쿼리 사용기능 제공 안전하고 가변적인 스토리지 서비스 S3 특징 확장성 : 확장, 축소가 쉬움 가용성 : 최소 4개의 AZ에 자동 복제, 99.99999% 가용성 신뢰성 : 암호화 기능 접근 관리 도구 제공 관리성 : 스토리지 클래스 분석, 수명 주기 정책 등의 관리 기능 제공 S3 용어 및 개념 S3는 버킷이라는 컨테이너를 놓을 리전을 선택하고, 해당 내부에 오브젝트 형태로 데이터를 저장함, 버킷은 여러 개를 생성할 수 있고, 버킷 단위로 접근 제한 설정도 가능함 오브젝트 : 텍스트, 이미지 등의 파일 엔티티 단위 버킷 : 오브젝트를 저장하는 컨테이너 오브젝트 오브젝트 하나의 크기는 1Byte에서 최대 5TB 저장 가능한 객체 갯수가 ..
[KOTLIN] CONTEXT / DISPATCHER
·
KOTLIN
코루틴은 항상 Kotlin 표준 라이브러리에 정의된 CoroutineContext로 대표되는 어떤 context에서 실행되고 코루틴의 context는 여러 요소의 set으로 구성됨 Context 어떤 쓰레드에서 코루틴을 실행할지에 대한 Dispatcher의 정보를 담고 있는 그룹임, 스레드 풀을 전환하고, 지정하고, 예외를 잡는데 사용 Job, Deferred, Dispatcher, CoroutineName, CoroutineExceptionHandler는 모두 CorountineContext 인터페이스에 간접적으로 상속됨 Dispatcher 코루틴을 생성하여 해당 코루틴을 Dispatcher에 전송시, Dispatcher는 자신이 관리하는 스레드풀 내의 스레드 부하 상황에 맞춰서 코루틴을 분배함 결론적..
[KOTLIN] CANCELLATION (취소)
·
KOTLIN
Cancellation fun main() = runBlocking { // 시작 val job = launch { repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L) // 약간 딜레이 println("main: I'm tired of waiting!") job.cancel() // job 취소 job.join() // job의 완료를 기다림. println("main: Now I can quit.") // 끝 } 코루틴을 사용할 경우 더이상 코루틴 동작이 필요하지 않은 경우 취소를 해줘야함 (자원 낭비가 발생) main()에서 job.cancel을 호출하면 다른 코루틴이 취소 되기 때문에 출력 금지됨 C..
[SPRING] JPA 고아객체
·
SPRING
고아 객체 JPA에서 부모와 연관관계가 끊어진 자식엔티티를 고아 객체라 하며 JPA에서는 orphanRemoval 옵션을 통해서 고아객체를 자동으로 삭제하는 기능을 제공함 orphanRemoval 옵션 @Entity @Getter @Setter public class Parent { @Id @GeneratedValue @Column(name = "parent_id") private Long id; @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST, orphanRemoval = true) private List childs = new ArrayList(); public void addChild(Child child) { this.childs.ad..
[SPRING] JPA 영속성 전이
·
SPRING
영속성 전이 특정 엔티티를 영속 상태로 만들 경우 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용 예를 들자면 부모엔티티를 저장할 경우 자식엔티티도 함께 저장 (자식의 연관관계가 두개 이상인 경우 사용하면 안됨) 영속성 전이 옵션 옵션 설명 CascadeType.ALL 모두 적용 CascadeType.PERSIST 영속 CascadeType.MERGE 병합 CascadeType.REMOVE 삭제 CascadeType.REFRESH 리프레쉬 CascadeType.DETACH DETACH 실무에서는 보통 ALL / PERSIST / REMOVE 옵션을 사용 Persist 옵션 @Entity @Getter @Setter public class Parent { @Id @GeneratedValue @Col..
[KOTLIN] SUSPEND 함수
·
KOTLIN
Suspend 비동기 실행을 위한 중단 지점 잠시 중단하고, 언젠가 다시 시작 즉 일시중단이 가능하도록 하게 하는 키워드 코루틴 Suspend 함수는 구성 및 접근법이 다양함 순차적 실행 fun main() = runBlocking { val time = measureTimeMillis { val one = doOne(); val two = doTwo(); println("결과 : ${one + two}") } println("완료 ${time}") } suspend fun doOne(): Int { println("첫번째 함수 시작") delay(1000L) return 1; } suspend fun doTwo(): Int { println("두번째 함수 시작") delay(1000L) return 2..
[KOTLIN] 코루틴
·
KOTLIN
Coroutines 비선점 멀티태스킹의 서브루틴 형태 (메인과 서브의 개념이 없다고함) 지연과 재개가 가능함 협력형 태스크와 비슷하게 동작 코루틴을 사용해서 특정 루틴의 블로킹을 분리하고 비동기적으로 협력형 멀티태스크를 구현 Kotlin Coroutines 기본옵션은 협력형이며 병행형으로 동작하지 않음 (옵션은 조절이 가능함) 스케쥴러 실행시점을 설정하는 것이 아닌 프로그래머 이벤트에 의해 실행 및 지연(Suspend), 재개(Resume) 시점이 결정 비선점형 태스크, 동시성 제공 Coroutines 요소 CoroutineScope : 코루틴문맥을 실행하기 위한 제한 범위를 지정, 특정한 목적의 Dispatcher를 지정하여 제어 및 동작 가능한 범위 CoroutineContext : 코루틴을 실행하는..