📖
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

코틀린의 기초

함수

함수의 특징으로는 몇 가지가 있다 함수를 선언하는데 있어서 함수의 선언은 fun 이라는 키워드를 통해서 만든다 파라미터 이름 뒤에 그 파라미터의 타입을 작성한다 함수를 굳이 클래스 내부에 정의하지 않고 그 외부에서도 함수를 정의할 수 있다 배열도 자바와 다르게 배열 처리를 위한 문법은 없다

statement, expression statement는 선언문이고, expression은 식이다 식은 값을 만들어내고 다른 식의 하위 요소로 계산에 참여할 수 있는 특징이 있다 선언문은 자신을 둘러싸고 있는 가장 안쪽 블록의 최상위 요소로 존재하면서 아무런 값을 만들지 않는다

함수를 이렇게 2개로 나눌 수 있다 - 인텔리제이에 변환팁을 준다

//블록이 본문인 함수
fun bigger(x: Int, y: Int): Int{
        return if(x>y) x else y
    }
    
    
//식이 본문인 함수
fun ktBigger(x: Int, y: Int) = if(x>y) x else y

식이 본문인 함수같은 경우에는 코틀린 컴파일러가 해당 식에 반환 타입을 추론해서 식의 결과를 함수의 반환타입으로 설정해준다 그리고 이렇게 컴파일러가 타입을 분석해서 프로그램의 구성요소를 정해주는 것이 타입 추론이라고 한다 중요한거는 결국 식이 본문인 함수만 return만 생략하는 것이 가능하다 그리고 뭔가 식으로 함수를 구현하면 리턴에 대한 가시적인게 없어서 살짝 아쉽기도 하다

변수

fun value(){
        //이렇게 타입을 따로 정해주지 않고 선언하는 것도 가능하고
        val a = "abc"
        val b = 123

        //타입을 따로 지정해주는 것도 가능하다
        val aa: Int = 24
        val bb: String = "abc"
    }

타입 추론을 사용해서 하는 것도 가능하고, 타입을 따로 정하지 않고도 사용할 수 있다

코틀린의 변수는 자바스크립트와 유사하다 val : 변경할 수 없는 참조를 저장하는 변수이다. 즉, val로 선언된 변수는 초기화하고 나서는 다시 값을 못 집어넣는다(java의 final) var : 변경할 수 있는 참조를 저장하는 변수이다. 자바에서 우리가 자유롭게 사용하는 변수와 같은 것이라고 보면 된다

기본적으로 추천 -> 모든 변수를 val 키워드를 사용해 불변 변수로 선언하고, 나중에 필요할때만 var로 변경하자 val 변수는 블록을 실행할 때 정확히 한 번만 초기화되야 하지만 선언 후에 값을 단 한번 넣은 로직이 있다면 이렇게도 가능한 것으로 보인다

    fun value2(t: Boolean){
        val test: String
        if(t){
            test = "Success"
        }else{
            test = "False"
        }

        val test2: String
        test2 = if(t){
            "Success"
        }else{
            "False"
        }

        val test3: String = if(t){
            "Success"
        }else{
            "False"
        }
    }

단일 변수는 이렇게 설정하는데, 변수에 대한 값은 변경할 수 없어도 해당 변수가 객체일때는 객체의 내부 값은 변경되는 것이 가능하다 list를 예시로 보면 이러하다

fun value3(){
        val arrayTest = arrayListOf("Java")
        arrayTest.add("Kotlin")
        arrayTest.forEach(System.out::println)
    }

var 타입 같은 경우에는 값을 변경하는 것이 가능하다고 했는데, 처음으로 선언해준 변수의 타입은 고정된다 즉 Int으로 선언해두고 String 값으로 변환하려고 하는건 안된다는 의미이다 컴파일러는 변수를 선언하는 시점에 초기화하는 식으로부터 변수의 타입을 추론하고, 변수의 선언 이후에 변수에 다시 대입할때, 이미 추론한 변수의 타입을 염두하고 타입을 검사한다 타입은 나중에 변환함수라는 걸 사용해서 변환하는게 가능하다고 한다

코틀린에는 문자열 템플릿이라는 기능이 있다 자바에서는 문자열에서 String과 변수를 함께 사용하는 경우에는 항상 "스트"+변수+"링" 이런식으로 사용을 해왔는데 사용하는 방법은 그렇게 어렵지 않게 $변수 이렇게 사용하면 된다 많이 사용해본 방식이니까 그렇게 어색하지는 않다 단순 변수말고도 좀 더 길게 사용하고 싶다면, ${} 을 통해서 조금 더 긴 방식으로도 사용할 수 있다 그리고 문자열템플릿을 사용하는데 있어서 한글로 사용할 때 이슈가 조금은 있을 수 있다고한다 -> 그냥 ${}을 통해서도 단순 단어도 사용할 수 있다고하니 ${}으로 사용하자 그냥

클래스와 필드

지금까지 단순 데이터를 처리하는 법을 봤으면 이제는 실제 객체를 만들어보자 자바와의 차이를 봐보자

public class Person{
    private final String name;
    private String addr;
    private int age;
}

이러한 자바의 클래스와 코틀린을 비교해보자

클래스, 즉 객체는 자신이 가지고 있는 객체들이나 해당 객체를 사용할때 직접 사용하지 않고 항상 접근자 메소드를 사용한다 그 접근자 메소드의 예시로는 게터나 세터가 있다 -> 그래서 자바에서는 항상 롬복 애노테이션을 통해서 사용해왔는데 코틀린은 기본적으로 접근자 메소드를 제공해준다 val같은 경우에는 읽기 전용이고, var같은 경우에는 세터도 가능하다

class Person(val name: String, var addr: String, var age: Int) {
}


fun personTest(){
        var person = Person("testName", "testAddr", 10)
        println(person.addr == "testAddr") //true
        println("his name is ${person.name}") //his name is testAddr
        println(person.age) //10
    }

이렇게 사용할 수 있다 따로 getter를 구현하지 않고도 객체.필드명 을 통해서 게터를 사용하는 것이 가능하다 만약에 기본적으로 제공해주는 것들이 아닌 새로 구현하고 싶다면 자바에서 필드 구현하는 것 처럼 구현해주면 된다 대신 주의할 점으로는 커스텀해서 만든 변수는 get() 함수를 다시 구현해줘야하는 점을 기억하자

Enum, When when 이라는 키워드는 자바에서의 switch 문을 대신하지만 더 좋은 방식이라고 한다

일단 Enum 먼저 한번 보자

enum class Color(val x: Int, val y: Int, val z: Int) {
    RED(1, 1, 1),
    ORANGE(2, 2, 2),
    YELLOW(3, 3, 3),
    GREEN(4, 4, 4),
    BLUE(5, 5, 5),
    NAVY(6, 6, 6),
    PURPLE(7, 7, 7)
    ;

    fun getRgb() = x + y + z
}


fun colorTest(){
        println(Color.BLUE.getRgb()) //15
    }

enum의 사용법 자체는 자바에서 사용하는 것과 크게 다르지는 않다. 하지만 특징으로 보면, 코틀린인데도 ;을 사용해서 마무리해주는 것을 볼 수 있다 이렇게 enum 클래스 안에서는 메소드를 정의할 때 반드시 상수목록이 끝나는 곳에 ;을 통해서 구분을 지어주어야 한다 이제는 그럼 enum을 각 조건에 맞게 다른 값을 처리하고 싶을 것이다! 물론 switch문의 대신인 when을 설명하기 위한 것이다.. when 이라는 키워드도 if와 같이 값을 만들어내는 식이다. 따라서 식이 본문인 함수에 when을 바로 사용하는 것이 가능 사용하는 방법은 이와 같다

fun whenTest(color: Color){
        when(color){
            Color.RED -> "I'm Red"
            Color.ORANGE -> "I'm Orange"
            Color.YELLOW -> "I'm Yellow"
            Color.GREEN -> "I'm Green"
            Color.BLUE -> "I'm Blue"
            Color.NAVY -> "I'm Navy"
            Color.PURPLE -> "I'm Purple"
        }
    }

참고로 enum은 import을 통해서 빼내고 사용해도 된다 역시 switch와 비슷하고 같은 역할을 하는 것 같은데, 다른 점으로는 역시 break 키워드가 없다는 점이다 그리고 추가로 콤마를 사용해서 여러개에 대한 분기를 처리하는 것이 가능하다는 점이 특징이다

switch보다 좋은 점으로는 일단 분기조건을 거는데 있어서 임의의 객체를 허용한다

fun mixTest(c1: Color, c2: Color){
        when(setOf(c1, c2)){
            setOf(Color.RED, Color.YELLOW) -> Color.ORANGE
            setOf(Color.YELLOW, Color.BLUE) -> Color.GREEN
            else -> throw Exception("MIX ERROR!")
        }
    }

이런식으로 사용할 수도 있으며, setOf 이라는 타입을 통해서 식을 통해서 비교하는 것이 가능하다 setOf은 내부의 값이 순서나 그런것들은 중요하지 않고 내부에 무엇이 있는지만이 중요한 그러한 컬랙션을 만드는 메소드이다 이렇게 setOf 사용한건 equals 통해서 비교한 방식이고,

fun mixTestVER2(c1: Color, c2: Color){
        when{
            c1.x==c2.x && c1.y==c2.y -> "x is same with y"
            c1.x==c2.x && c1.z==c2.z -> "z is same with z"
            else -> throw Exception("no matched")
        }
    }

이렇게 switch의 변형문처럼이 아닌, 인자가 없는 방식으로 사용할 수 있다 -> 하지만 인자가 없는 방식은 항상 boolean을 가지고 진행하는 과정에서만 사용할 수 있다

스마트 캐스트라는 방식도 존재한다! 코틀린에서 is 이라는 키워드는 자바에서의 instanceof 와 유사하다. 자바에서 instanceof 을 사용해서 변수 타입을 확인하고 직접 (변수)을 통해서 캐스팅을 수동으로 해주었다 근데 코틀린에서는 컴파일러가 대신 캐스팅을 해준다 -> 어떤 변수가 원하는 타입인지 is 을 통해서 타입을 검사해주고 나면 알아서 컴파일러가 원래 그 타입인 것 처럼 캐스팅 해주고 이것을 스마트 캐스팅이라고 부른다

while, for 요 두놈은 자바와 매우 유사하게 사용된다 일단 while은 정말 동일하고, for 문은 for-each 형태만 존재한다 for 는 형태는 같지만 살짝의 차이를 볼 수 있다

    fun divid(x: Int, y: Int) =
        when {
            x / y == 0 -> "배수"
            else -> "배수가아님"
        }
    
    fun dividTest() {
        for(i in 1..6){
            divid(6, i)
        }
    }

이렇게 for를 만들어줄때는 일단 i 같은 것도 자동으로 만드는 것과 답게 따로 타입같은건 없다 그리고 범위 같은 부분은 시작..끝 이렇게 점 2개를 통해서 구현한다 약간 forEach 의 형태를 따라가고 있으면서, 뒤에 범위 지정하는 부분에서 살짝 다른점이 있는 것 같다 여기서 범위를 지정하는 것에서 사용할 수 있는 식이 하나 있다 고건 바로 in 이라는 키워드이다 in 을 사용하면 어떠한 값이 범위에 속하는지를 검사하는 것이 가능하고 !in 을 통해서 어떤 값이 없는지도 볼 수 있다

fun inTest(){
        println(5 in 0..9) //true
        println("banana" in "apple".."carrot") //true
    }

이렇게 사용해주는데 범위는 문자에만 속하지 않고 비교가 가능한 클래스, 즉 comparable 인터페이스를 구현한 클래스면 in 을 사용해서 비교하는 것이 가능하다

예외처리 예외 처리 또한 자바와 비슷하다! 그래도 자바와의 가장 큰 차이는 throws 절이 코드에는 따로 없다는 점? 자바에서는 checked exception을 명시적으로 처리해줘야만 했다. 하지만 코틀린은 checked exception, unchecked exception을 따로 구별하지는 않는다 함수가 던지는 예외를 지정하지 않고 발생한 예외를 잡는 것도 가능하고 잡지 않는 것도 가능하다 추가로 코틀린 특징답게도 try문을 식으로도 사용하는 것이 가능하다

fun tryTest(){
        val test = try{
            String.format("asdf")
        } catch (e: IllegalFormatException){
            return
        }
    }

Previous코틀린의 특징Next함수 정의와 호출

Last updated 2 years ago

Was this helpful?