부스트코스 Hello, 코틀린! 요약 코틀린을 왜 배워야 할까?코틀린 : 구글에서 안드로이드를 개발하기 위해 공식 지정한 언어 코틀린은 안드로이드 앱 개발에 필수적이다 안드로이드 앱개발, IOS 앱개발멀티플랫폼 앱개발 코틀린의 매력을 알아볼까요?컴파일 시 변수의 자료형
\[부스트코스]코틀린, 너는 누구니?어셈블리어 : 0,1로 사용하는 최하위 언어, 사람이 이해하기 어렵다 C언어 : 절차지향, 하드웨어를 다루는데 인간친화적 -> 임베디드 분야에 많이 사용 Java : 객체지향, 대형 소프트웨어 개발에 적합 -> 스마트폰의 앱들도 JV
글이 너무 길면 임시저장이 안되서 글을 분리했다.\[부스트코스]함수형 프로그래밍부작용이 없는 함수 : 부작용 = 같은 인자를 넣었는데 반환값이 다른 것 같은 인자에 대해 항상 같은 값을 반환한다함수 외부의 어떤 상태도 바꾸지 않는다 sum은 인자로 같은 a,b를 받으면
\[부스트코스]람다람다식은 기본적으로 {사용할 매개변수 -> 반환식}의 형태로 정의한다.앞에서 함수의 인자로 람다식을 전달할 때는 {a,b->a+b}와 같은 형태로 전달했다. 이것은 함수의 선언에서 이미 sum : (a:Int, b:Int)->Int와 같이 자료형읠 정
\[부스트코스]고차함수와 람다식의 이해(1)sum과 mul함수는 표현식이 한 줄이므로 {}를 생략하고 간단하게 표현했다.또한 mul함수는 인자로 또다른 함수인 sum함수를 받고 있다. 마찬가지로 함수의 반환형에 다른 함수를 사용할 수 있다. 예시로 든 함수들 뿐만 아니
\[부스트코스]익명함수, 인라인함수이름이 없는 함수 람다식도 일종의 익명함수이다. 하지만 람다식에서는 return, breakl, continue 사용이 어렵다. 함수 선언 시 fun 앞에 inline을 붙인다 일반 함수는 호출하면 분기해서 함수를 실행하고 다시 돌아와
\[부스트코스]중위함수, 꼬리재기 함수클래스의 멤버 호출 시 .을 생략하고 함수 이름 뒤 소괄호를 생략해 직관적으로 표현하는 방법 중위 함수의 조건 멤버 메소드 또는 확장 함수여야 한다 하나의 매개변수를 가져야 한다 infix 키워드를 사용해서 정의해야 한다. mul
블록 내에서 사용 : 지역변수, 함수 블록 밖에서 사용 : 전역변수, 함수최상위 함수 (전역함수)main 함수 전, 후 어디든 선언하고 호출 가능 지역 함수 지역 함수는 먼저 선언되어야 호출할 수 있다 전역변수 최상위에 있는 변수, 프로그램이 실행되는 동안 삭제되
[부스트코스]조건문을 통한 분기 if-else문 수행할 문장이 1줄인 경우 {} 생략가능 if - else문 자체를 한 줄에 간략화 할 수 있다. 변수에 if-else문을 이용해 할당하고 블럭과 함께 사용할 수 있다. 이 때 변수에 할당되는 값은 블럭의 마지막
\[부스트코스] 반복문본문이 1줄일 경우 {} 생략가능다른 여러 프로그래밍 언어에서 사용하는 for (i=0; i<10; i++) 같은 표현을 사용하지 않는다. 기본적으로 증가하며 반복한다. 10 9 8 7 6 5 4 3 2 1 1 3 5 7 9 하행 반복을 위해
\[부스트코스]흐름의 중단과 반환예외가 발생해도 반드시 실행해야 하는 문장은 finally 블록을 이용한다 함수에서 return을 이용해 반환하면 return 뒷부분은 실행하지 않는다.Unit을 명시적으로 반환할 수 있다.(엄밀히 따지면 Unit이라는 특수한 자료형을
\[부스트코스]예외가 발생했어요!실행 도중에 예외가 발생해서 프로그램이 종료된다. 예외처리 클래스명은 Exception을 사용해도 된다. finally 블록에 넣을 내용이 없다면 try-catch로만 예외처리를 구성해도 된다. Exceptionfinallytry블록에서
\[부스트코스]클로저외부 함수의 변수를 람다식에서 사용한다.값을 가져오는 것이기 때문에 참조 형태이다. main에서 addNum의 인자로 람다식을 전달한다.addNum을 정의할 때는 반환값이 없었다. (Unit)그런데 외부 변수인 result를 람다식에 넣고 x+y로
\[부스트코스]let확장함수이기 때문에 .함수명 형태로 정의되어 있다. it은 대상 객체를 복사해오는 것이고 this는 원본을 대상으로 한다. T,R은 형식매개변수로 어떠한 자료형도 될 수 있다. T.let()으로 T가 let을 호출한다. let은 매개변수로 람다식 b
\[부스트코스]alsolet은 인자로 받는 람다식 내에서 반환값을 만들어서 반환한다.also는 인자로 받는 람다식은 반환값이 없다. also 함수 자체에서 객체 T를 반환한다. (also를 호출한 객체)즉 블록 내의 내용과 관계없이 T를 반환한다. {}내의 내용과 관계
\[부스트코스]applyapply는 also와 같은데 람다식의 인자로 T가 전달되는 것이 아닌 확장함수 형태로 T.()로 블록 내부에서 처리된다. 그 후 this를 반환한다. apply는 this를 이용해서 객체에 접근한다. this를 생략하고 객체의 멤버명만 사용해서
\[부스트코스]runrun은 두가지 방식으로 호출할 수 있다. 첫번째 방식은 매개변수 람다식에서 ()->R 형태로 실행하는 것이고두번째는 매개변수 람다식에서 T.()->R의 확장함수 형태로 실행하는 것이다.두 방식 모두 함수 실행 결과를 반환한다. run은 apply와
\[부스트코스] withwith는 매개변수로 receiver : T와 block : T.()-> R을 받는다.T를 block의 매개변수로 전달해서 그 반환값을 반환한다. with는 세이프콜 ?. 을 지원하지 않아서 let과 같이 사용하는 경우가 많다.with는 매개변수
use [부스트코스]use
[부스트코스] 기타 표준 함수 takeIf(), takeUnless() takeif 함수는 람다식이 true이면 T를 반환하고 아닐 경우 null 반환 takeUnless 함수는 람다식이 false이면 T를 반환하고 아닐 경우 null 반환 매개변수 람다식의 반환형
\[부스트코스]클래스와 객체의 정의코틀린에서는 절차지향, 객체지향 모두 지원 특정 대상의 특징(멤버변수)과 동작 활동(메소드) 기록 목표로 하는 대상에서 필요한 속성, 동작을 정의하는 것을 추상화 라고 한다.자바의 필드는 코틀린에서 프로퍼티로 부른다. 클래스를 시각적으
\[부스트코스] 상속, 다형성 클래스 앞쪽에 open 키워드를 작성해줘야 상속이 가능하다.코틀린의 최상위 클래스는 Any 클래스이다. 즉 코틀린의 모든 클래스는 묵시적으로 Any 클래스를 상속받는다. 자식 클래스는 open 키워드가 없기 때문에 더이상 다른 클래스가 상
\[부스트코스]캡슐화private : 외부에서 접근할 수 없음 public : 어디서든 접근 가능 (기본값)protected : 외부에서 접근할 수 없으나 하위 상속 요소에서는 가능 internal : 같은 정의의 모듈 내부에서는 접근 가능 Top-level 함수에서는
\[부스트코스]클래스와 관계클래스로 실세계를 표현하려면 클래스의 관계를 이해해야 한다. 클래스의 참조와 생명주기가 유지 되는지 안되는지에 따라 클래스의 관계를 파악할 수 있다. 객체는 따로 생성되고 서로의 메소드의 인자로 서로를 받는 약한 관계doc1 객체는 생성될 때
\[부스트코스]세터,게터자바의 필드는 말 그대로 변수 선언만 하기 때문에 따로 접근을 위한 메소드를 만들어야 한다. 자바는 위와 같이 게터, 세터를 정의해준다. 코틀린의 프로퍼티는 기본적인 접근 메소드를 가지고 있다. 따로 접근 메소드를 만들지 않아도 내부적으로 생성한
[부스트코스]지연초기화 지연 초기화 초기화를 바로 하지 않고 지연시켰다가 하는 것 선언은 앞부분에서 해도 사용을 중간부터 하면 미리 초기화 할 필요가 없다.(낭비) 객체의 정보가 나중에 필요한 경우 나중에 초기화 할 방법이 필요하다. lateinit과 lazy 키