📖
Kyu9's Repo
  • Library of mameil
  • 이슈 경험
    • 20230220_트랜잭션
    • 20230306_캐싱이슈
    • 20230722_테스트코드에서 @Transactional
    • 20230807_deadlock
  • 인턴 스터디
    • Gradle
    • Stream, Optional, 람다식
    • JVM의 메모리 구조, Garbage Collector
    • RESTful API
    • Microservice Architecture
    • HTTP
    • 웹서버란 무엇인가
    • Git Branch
    • TDD
    • Redis을 이용한 캐시
    • Thymeleaf
    • 정리가 필요한 자료들
    • SpringBoot Management
    • 테스크 코드 분할
  • 동아리 스터디
    • 기본 SQL 공부
      • SQL의 기본 개념
      • SELECT 문장을 이용하여 원하는 데이터 출력하기
        • 집합 연산자 사용하기
        • where절에 비교 연산자를 사용해보기
        • SELECT_EX
        • 산술 연산자 사용해보기
      • 단일 행 함수 사용
        • lower/upper 함수 사용하기
        • length함수 사용하기
        • concat함수 사용
        • substr/mid/substring 함수 사용
        • instr함수 사용하기
        • lpad/rpad 함수 사용하기
        • trim/ltrim/rtrim 함수 사용하기
        • replace 함수 사용하기
        • round 함수 사용하기
        • truncate 함수 사용하기
        • mod함수 사용하기
        • ceil함수 사용하기
        • floor함수 사용하기
        • power 함수 사용하기
        • Date fn(날짜 함수)
        • 형 변환 함수
        • 일반함수란
    • a-ha 실습
    • 혼자서 만들어본 게시판
    • AWS 강의
  • 학교 나머지 공부 자료
    • 웹프레임워크(Spring)
      • Spring이란?
      • Webframework1-1
      • Webframework1-2
      • SpringBoot의 특징
      • SpringBoot 생성 방법
      • Spring Data JPA
      • SpringBoot Security
      • SpringBoot HATEOAS
  • 공부 자료들
  • WS 온라인 자바 스터디
    • Week1(JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.)
    • Week2(자바 데이터 타입, 변수 그리고 배열)
    • Week3(연산자)
    • Week4(제어문)
    • Week5(클래스)
    • Week6(상속)
    • Week7(패키지)
    • Week8(인터페이스)
    • Week9(예외처리)
    • Week10(멀티쓰레드 프로그래밍)
    • Week11(Enum)
    • Week12(Annotation)
    • Week13(I/O)
    • Week14(Generic)
    • Week15(람다식)
  • 백준문제
    • 입출력과 사칙연산
      • We love kriii(10718)
      • 고양이(10171)
      • 개(10172)
      • A+B(1000)
      • A-B(1001)
      • AxB(10998)
      • A/B(1008)
      • 사칙연산(10869)
      • 나머지(10430)
      • 곱셈(2588)
    • for문
      • 구구단(2739)
      • A+B - 3(10950)
      • 합(8393)
      • 빠른 A+B(15552)
      • N 찍기(2741)
      • 기찍 N(2742)
      • A+B - 7(11021)
      • A+B - 8(11022)
      • 별 찍기 - 1(2438)
      • 별 찍기 - 2(2439)
      • X보다 작은 수(10871)
    • if문
      • 두 수 비교하기(1330)
      • 시험 성적(9498)
      • 윤년(2753)
      • 사분면 고르기(14681)
      • 알람 시계(2884)
      • 오븐 시계(2525)
      • 주사위 세개(2480)
      • 영수증(25304)
    • While문
      • A+B - 5(10952)
      • A+B - 4(10951)
      • 더하기 사이클(1110)
    • 1차원 배열
      • 최소, 최대(10818)
      • 최댓값(2562)
      • 숫자의 개수(2577)
      • 나머지(3052)
      • 평균(1546)
      • OX퀴즈(8958)
      • 평균은 넘겠지(4344)
    • 함수
      • 정수N개의 합(15596)
      • 셀프 넘버(4673)
      • 한수(1065)
    • 문자열
      • 아스키코드(11654)
      • 숫자의 합(11720)
      • 알파벳 찾기(10809)
      • 문자열 반복(2675)
      • 단어 공부(1157)
      • 단어의 개수(1152)
      • 상수(2908)
      • 다이얼(5622)
      • 크로아티아 알파벳(2941)
      • 그룹 단어 체커(1316)
    • 기본수학-1
      • 손익분기점(1712)
      • 벌집(2292)
      • 분수찾기(1193)
      • 달팽이는 올라가고 싶다(2869)
      • ACM 호텔(10250)
      • 부녀회장이 될테야(2775)
      • 설탕 배달(2839)
      • 큰 수 A+B(10757)
      • Fly me to the Alpha Centauri(1011)
    • 기본수학-2
      • 소수 찾기(1978)
      • 소수(2581)
      • 소인수분해(11653)
      • 소수 구하기(1929)
      • 베르트와 공존(4948)
    • 재귀
      • 하노이 탑 이동 순서(11729)
      • 피보나치 수 5(10870)
      • 별 찍기(2447)
    • 브루트 포스
      • 블랙잭(2798)
      • 분해합(2231)
      • 덩치(7568)
      • 체스판 다시 칠하기(1018)
      • 영화감독 슘(1436)
    • 집합과 맵
      • 숫자 카드(10815)
      • 문자열 집합(14425)
      • 숫자 카드2(10816)
      • 듣보잡(1764)
      • 대칭 차집합(1269)
      • 서로 다른 부분 문자열 갯수(11478)
    • 정렬
      • 수 정렬하기(2750)
      • 수 정렬하기 2(2751)
      • 수 정렬하기 3(10989)
      • 통계학(2108)
      • 소트인사이드(1427)
      • 좌표 정렬하기(11650)
      • 좌표 정렬하기2(11651)
      • 단어 정렬(1181)
      • 나이순 정렬(10814)
      • 커트라인(25305)
      • 좌표압축(18870)
    • 백트래킹
      • N과 M - 1(15649)
      • N과 M - 2(15650)
      • N과 M - 3(15651)
      • N과 M - 4(15652)
      • N-Queen(9663)
      • 스도쿠(2580)
      • 연산자 끼워넣기(14888)
      • 스타트와 링크(14889)
    • 이분 탐색
      • 수 찾기(1920)
    • 동적계획법
      • 피보나치 함수(1003)
      • 신나는 함수 실행(9184)
      • 01타일(1904)
      • 파도반 수열(9461)
      • RGB거리(1149)
      • 정수 삼각형(1932)
      • 계단 오르기(2579)
      • 1로 만들기(1463)
      • 쉬운 계단 수(10844)
      • 포도주 시식(2156)
      • 가장 긴 증가하는 부분 수열(11053)
      • 가장 긴 바이토닉 부분 수열(11504)
      • 전깃줄(2565)
      • LCS(9251)
      • 연속합(1912)
      • 평범한 배낭(12865)
      • 더하기(9095)
    • DFS와 BFS
      • 미로탐색(2178)
      • 바이러스(2606)
      • DFS와 BFS(1260)
      • 단지번호붙이기(2667)
      • 전쟁 - 전투(1303)
      • 숨바꼭질(1697)
      • 데스 나이트(16948)
      • 나이트의 이동(7562)
      • 녹색 옷 입은 애가 젤다지?(4485)
      • 음식물 피하기(1743)
      • A->B (16953)
      • 숨바꼭질 3(13549)
      • 숨바꼭질 2(12851)
    • 구현
      • 치즈(2636)
  • 프로그래머스 문제
    • SQL
      • Animal Table - Oracle
      • Animal Table - MySQL
      • Animal Table2 - Oracle
      • Animal Table 3,4 - Oracle
    • Lv1
      • 두 개 뽑아서 더하기
      • 제일 작은 수 제거하기
      • 문자열 내 p와 y의 개수
      • 예산
      • 자릿수 더하기
      • 두 정수 사이의 합
      • 같은 숫자는 싫어
      • 가운데 글자 가져오기
      • 수박수박수박수박수박수?
      • 나누어 떨어지는 숫자 배열
      • 2016년
      • 폰캣몬
      • 서울에서 김서방 찾기
      • 문자열을 정수로 바꾸기
      • 소수 만들기
      • 문자열 다루기 기본
      • 소수 찾기(에라토스테네스의 체)
      • 숫자 문자열과 영단어
      • 이상한 문자 만들기
      • 없는 숫자 더하기
      • 문자열 내림차순으로 배치하기
      • 문자열 내 마음대로 정렬하기
      • 약수의 개수와 덧셈
      • 콜라츠 추측
      • 자연수 뒤집어 배열로 만들기
      • 신규 아이디 추천
      • 비밀지도
      • 크레인 인형뽑기 게임
      • 실패율
      • 로또의 최고 순위와 최저 순위
      • 키패드 누르기
      • 정수 내림차순으로 배치하기
    • Lv2
      • 행렬의 곱셈
      • 영어 끝말잇기
      • 영어 끝말잇기
      • N개의 최소 공배수
      • 피보나치 수
      • 124 나라의 숫자
      • 짝지어 제거하기
      • 프린터
      • 다음 큰 숫자
      • 최댓값과 최솟값
      • 최소값 만들기
      • 숫자의 표현
      • JadenCase 문자열 만들기
      • 오픈채팅방
      • 영어 끝말잇기
      • 멀쩡한 사각형
      • 올바른 괄호
      • 위장
      • 기능개발
      • 더 맵게
      • 스킬트리
    • 완전탐색
      • 모의고사(Lv1)
      • 카펫(Lv2)
      • 소수 찾기(Lv2)
    • 정렬(Sorting)
      • K번째 수(Lv1)
      • 가장 큰 수(Lv2)
      • H-Index(Lv2)
    • 해시(Hash)
      • 완주하지 못한 선수(Lv1)
      • 전화번호 목록(Lv2)
    • 탐욕법(Greedy)
      • 체육복(Lv1)
      • 큰 수 만들기(Lv2)
      • 구명보트(Lv2)
    • 동적계획법(DP)
      • 정수 삼각형(Lv3)
    • 깊이/너비 우선 탐색(DFS/BFS)
      • 타겟 넘버(Lv2)
      • 네트워크(Lv3)
      • 단어 변환(Lv3)
  • 스프링부트 책
    • Day 1
    • Day 2
    • Day 3
    • Day 4
    • Day 5
    • Day 6
    • Day 7
    • Day 8
    • Day 9
    • Day 10
    • Day 11
    • Day 12
    • Day 13
    • Day 14
    • Day 15
    • Day 16
    • Day 17
  • JPA 책
    • 프로젝트 세팅 및 기본설정
    • 영속성 관리 개념
    • 엔티티 매핑
      • 실습 예제
    • 연관관계 매핑 기초
      • 실습 예제
    • 다양한 연관관계 매핑
      • 다대일, 일대다 관계
      • 일대일, 다대다 관계
      • 실습 예제
    • 고급 매핑
      • 상속 관계 매핑
      • @MappedSuperclass
      • 복합 키와 식별 관계 매핑
      • 조인 테이블
    • 프록시와 연관관계 관리
      • 프록시
      • 즉시 로딩과 지연 로딩
      • 영속성 전이, 고아 객체
    • 값 타입
      • 임베디드 타입
      • 값 타입과 불변 객체
      • 값 타입의 비교, 컬렉션
    • 객체지향 쿼리 언어
      • JPQL part1
      • JPQL part2
      • JPQL part3
      • QueryDSL
      • NativeSQL
      • 객체지향 쿼리 심화
    • 응용 애플리케이션
      • 엔티티 설정
    • 스프링 데이터 JPA
      • 공통 인터페이스
  • Kotlin In Action
    • 코틀린의 특징
    • 코틀린의 기초
    • 함수 정의와 호출
    • 클래스, 객체, 인터페이스
    • 람다 방식
    • 코틀린 타입 시스템
    • 연산자 오버로딩과 기타 관례
    • 고차함수
    • 제네릭스
    • 애노테이션과 리플렉션
    • 코루틴
  • Oracle
    • Oracle 기본
    • Oracle 심화
  • SQL_연습
    • Revising the Select Query
    • Basic Select
    • Advanced Select
    • Basic Select 2
  • SQL 첫걸음(책)
    • Day 1
    • Day 2
    • Day 3
    • Day 4
    • Day 5
    • Day 6
    • Day 7
    • Day 8
    • Day 9
    • Day 10
    • Day 11
    • Day 12
    • Day 13
    • Day 14
    • Day 15
    • Day 16
    • Day 17
    • Day 18
    • Day 19
    • Day 20
    • Day 21
    • Day 22
    • Day 23
    • Day 24
    • Day 25
    • Day 26
    • Day 27
    • Day 28
    • Day 29
    • Day 30
  • 더 자바 코드를 조작하는 다양한 방법
    • JVM 이해하기
    • 바이트코드 조작
    • 리플렉션
    • 다이나믹 프록시
    • 애노테이션 프로세서
  • 더 자바, 애플리케이션을 테스트하는 다양한 방법
    • JUnit5
    • Mockito
    • 도커와 테스트
    • 성능, 운영이슈, 아키텍처 테스트
  • 이펙티브 자바
    • item1 - 생성자 대신 정적 팩토리 메소드를 고려하라
    • item2 - 생성자에 매개변수가 많다면 빌더를 고려하라
    • item3 - 생성자나 열거타입으로 싱글턴임을 보증하라
    • item4 - 인스턴스화를 막기 위해선 private 생성자를 사용하라
    • item5 - 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
    • item6 - 불필요한 객체 생성을 피하라
    • item7 - 다 쓴 객체 참조를 해제하라
    • item8 - finalizer와 cleaner 사용을 피하라
    • item9 - try-finally 보다 try-with-resources을 사용하라
    • item10 - equals는 일반 규약을 지켜 재정의하라
    • item11 - equals을 재정의하려면 hashCode도 재정의하라
    • item12 - toString을 항상 재정의하라
    • item13 - clone 재정의는 주의해서 진행하라
    • item14 - Comparable을 구현할지 고민하라
  • Elastic Search
    • 강의 Summary
    • Elastic Summary 개념 정리
    • Elastic Summary 적용 정리
  • 토비의 스프링 강의
    • 스프링부트 살펴보기
    • 독립 실행형 서블릿 애플리케이션
  • k8s
    • minikube 설치
    • jenkins 추가
  • Article
    • Choosing the Right MessageBroker
Powered by GitBook
On this page

Was this helpful?

  1. Kotlin In Action

코틀린의 특징

코틀린은 자바 플랫폼에서 돌아가는 프로그래밍 언어이다. 특징으로는 간결하고 실용적이지만 자바와의 호환성이 아주 높아서 자바를 사용 중인 프로젝트에서는 거의 대부분 사용하는 것이 가능하다 코틀린의 주 목적은 자바 코드를 더 간결하고 생산적이며 안전한 코드로 바꿀 수 있도록 안전한 언어를 제공해주고 있는 것이다

코틀린은 자바와 동일하게 정적 타입 지정 언어이다

정적 타입 지정 언어란 자바나 코틀린과 같이 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 필드나 메소드를 사용할 떄마다 컴파일러가 체크를 해준다는 것이다 그와 반대로 동적 타입 지정 언어란 타입에는 무관하게 모든 값을 변수에 넣는 것이 가능하며 메소드나 필드 접근에 대한 검증이 실행하는 순간에 일어난다고 볼 수 있으며 그 예시는 그루비나 JRuby가 있다

하지만 정적 타입 지정언어인 코틀린과 자바의 차이로는 우선, 모든 변수의 타입을 굳이 지정할 필요가 없다 그럼 어떻게 파악하느냐 -> 코틀린 컴파일러가 문맥으로부터 변수 타입을 자동으로 예측해서 적용해준다 그리고 이렇게 코틀린 컴파일러가 변수의 타입을 지정해주는 과정을 타입 추론이라고 한다 마치 자바스크립트에서의 var, let과 같은 느낌이다

정적 타입 지정 언어의 장점은 아래와 같다

  • 성능 : 실행 시점에 어떤 메소드를 호출하는지 확인할 필요가 없다

  • 신뢰성 : 컴파일러가 프로그램의 정확성을 검증하기 때문에 프로그램이 오류로 꺼질 확률이 적긴하다

  • 유지 보수성 : 객체의 타입으로부터 자유롭기 때문에 코드를 파악하는 것이 쉽다

  • 도구 지원 : ide에서 잘 도와줌

역시 코틀린에서의 중요한 특성은 널이 될 수 있는 타입을 지원한다는 것이다 널이 될 수 있는 타입을 지원하기 때문에 컴파일 시점에 nullpointexception 이 발생할 수 있을지 없을지를 확인하는 것이 가능해서 안전성도 높다고 볼 수 있다

함수형 프로그래밍과 객체지향 프로그래밍

함수형 프로그래밍이란?

  • first-class 함수 : 함수를 일반 값처럼 변수에 저장할 수도 있고, 함수를 인자로 다른 함수에 전달할 수도 있으며 함수를 변수처럼 사용하는 것이다

  • 불변성 : 함수형 프로그래밍에서는 일단 만들어지고 나면 내부 상태가 절대 바뀌지 않는 불변 객체를 사용해서 프로그램을 작성

  • side-effect 없음 : 함수형 프로그래밍에서는 입력이 같으면 항상 닽은 출력을 내보내고 다른 객체의 상태를 변경하지 않으며, 내부에서만 도는 순수함수를 사용한다

위와 같은 스타일로 코드를 작성하면 장점은 몇가지 있다 첫 번째로는 간결성이다 -> 명령형 코드에 비해서 간결하고 우아하다고 볼 수 있다. 함수를 변수처럼 사용하면 추상화도 가능하고, 이를 통해 다형성도 챙기고 코드 중복도 막는 것이 가능하다 두 번째로는 스레드세이프티이다 -> 멀티 스레드 환경에서는 항상 동기화에 신경써야 한다 하지만 불변 함수를 사용하면 어짜피 접근이 불가능하기 때문에 동기화에 신경을 쓰지 않아도 된다 마지막으로는 테스트하기 간편하다는 것이다 -> 함수에 대해서 사전준비가 필요없다

이렇게 장점이 있는 함수형 프로그래밍은 코틀린에서 어떠하게 지원을 해주는거냐

  • 함수 타입을 지원함에 따라 어떤 함수가 다른 함수를 파라미터로 받거나 함수가 새로운 함수를 반환하는 것이 가능하다

  • 람다 식으로 편하게 코드블록을 정의하고 전달하는 것이 가능하다

  • 데이터 클래스는 불변적인 값을 쉽게 만드는 구문을 제공

  • 코틀린 표준 라이브러리는 객체와 컬렉션을 함수형 스타일로 다룰 수 있는 api을 제공

물론 이러한 함수형 프로그래밍이 강제되는 것은 아니고 객체지향적으로도 프로그램을 만들 수 있으니까 적절하게 조합해서 사용하면 된다

코틀린의 철학

코틀린이 자바와의 상호운영성에 초점을 맞춘 실용적이고, 간결하며 안전한 언어라고 한다. 이것들에 대해서 보자

실용성 코틀린이라는 언어는 연구를 위한 언어가 아닌 개발을 위한 언어이기 때문에 활용도가 높아지면 높아질수록 더욱 간결하고 편하게 코드를 작성하는 것이 가능하다. 그리고 코틀린은 도구를 많이 강조한다. IDE에서도 적용만 해두면 최대한 간결한 구조로 만들도록 계속해서 제안해준다

간결성 코틀린을 만들면서 프로그래머가 작성하는 코드에서 의미가 없는 부분을 줄이고, 언어가 요구하는 구조를 만족시키기 위해서 부수적으로 준비해야 하는 게터, 세터, 생성자파라미터와 같은 것들은 자동으로 준비해준다. 그렇기 때문에 지저분해질 걱정은 없다는 것이다. 그리고 다양한 라이브러리를 제공해주고 있기 때문에 다양한 코드들을 라이브러리의 함수호출을 통해서 줄이는 것이 가능 그리고 람다를 지원하기 때문에 라이브러리의 함수와의 상호작용도 쉽다

안전성 코틀린을 만드는데, 자바보다 더 높은 수준의 안전성을 보여주되, 비용은 더욱 적게가져가는 것을 원했다고 한다. 여기서 일단 jvm 위에서 돌아가는 것은 운영에서의 안전성은 보장되며 버퍼 오버플로우와 같은 문제를 어느정도 예방할 수 있다. 또한 정적 타입 지정언어로써 타입 안전성이 보장된다. 그리고 코틀린은 nullpointerexception을 없애기 위해서 노력한다 코틀린의 타입 시스템은 널이 될 수 없는 값을 추적하며 실행 시점에 nullpointerexception이 발생할 수 있는 연산을 사용하는 코드를 금지해버린다. 그리고 이렇게 널이 될 수 있는지의 표시는 ? 을 통해서 사용한다

val s: String? = null //nullable
val s2: String = "" //null-safe

추가로 classcastexception도 처리해준다. 어떤 객체를 다른 타입으로 캐스팅하기 전에 타입검사를 해줘야 한다. 자바에서는 원래 생략하는 경우가 많은데, 코틀린에서는 타입 검사와 캐스팅작업이 하나의 연산자에서 이루어지기 때문에 객체의 타입을 검사했고 그 객체가 그 타입에 속한다면 해당 타입의 메소드나 필드를 별도의 캐스팅작업 없이 사용하는 것이 가능하다 그래서 그냥 타입검사를 해버려서 exception도 처리하고 편리하게 사용한다

if(value is String)
    println(value.toUpperCase())

상호운용성 코틀린과 자바는 같이 공존하는 것이 가능하다 자바에서 코틀린 함수를 사용할 수도 있고, 자바 라이브러리를 코틀린에서 가져다가 사용하는 것도 가능하다 심지어 상속과 implements도 자유롭게 가능한 부분이다 정말 단순하게 자바와 코틀린 사이에서 왔다갔다가 자유롭다. 그리고 둘이 섞여있는 프로젝트를 디버깅도 자유롭게 가능하다. 마지막으로 자바 메소드를 리팩토링해도 코틀린 코드까지도 자동으로 수정된다 반대도 마찬가지. 이것이 가능한 이유는 자바와의 차이점이 정말 그냥 코드의 작성과 컴파일러의 사용만이 다르다. 컴파일 이후에는 자바와 동일하게 클래스파일이 생성되고 이후에는 동일하게 작동된다. 물론 사실 코틀린 런타임 라이브러리도 같이 가야하지만 요 부분은 프로젝트 컴파일 시, 메이븐이나 그레이들이 알아서 포함시켜준다

정말 신기한 언어이다 개념 잘 잡고, 맞으면서 배워보자! 화이팅

PreviousKotlin In ActionNext코틀린의 기초

Last updated 2 years ago

Was this helpful?