고차함수 고차함수란 함수를 클래스에서 만들어낸 '인스턴스'처럼 취급 하는 방법 함수를 파라미터로 넘겨줄 수도 있고, '결과값'으로 반환 받을 수도 있는 방법 입니다. 코틀린에서는 모든 함수를 고차함수로 사용 가능 fun main() { //::일반함수를 고차함수로 변경해주는 연산자 b(::a) } fun a(str: String) { println("$str 함수 a") } //return 없는 경우 Unit fun b(function: (String) -> Unit) { function("b가 호출함") } 람다 함수 일반 함수와 달리 그 자체가 고차함수 별도의 연산자 없이도 변수에 담을 수 있다. fun main() { //람다 함수 //람다 함수는 그 자체가 고차함수이기 때문에 연산자 불 필요 va..
문제 이해 string 의 n번쨰 글자 기준으로 오름차순 return 접근 also 사용 일반적 정렬 부여받은 index로 정렬 풀이 class Solution { fun solution(strings: Array, n: Int): Array { //객체의 속성을 전혀 사용하지 않거나 변경하지 않고 사용하는 경우에 also return strings.also { it.sort() it.sortBy { it[n] } } } }
문제 이해 a ~ b 모든 정수의 합 return 접근 answer = 0L a b a downTo b 풀이 class Solution { fun solution(a: Int, b: Int): Long { //정답을 Int -> Long 으로 변환하면 오류 난다. 처음부터 Long으로 선언 var answer = 0L if (a < b) { for (i in a..b) { answer += i } } else { for (i in a downTo b) { answer += i } } return answer } }
문제 이해 나누어 떨어지는 값 오름차순 배열 반환 나누어 떨어지는 값없으면 1 접근 foreach -> 나누어 떨어지는 값 찾기 정렬 비었을 경우 처리 풀이 class Solution { fun solution(arr: IntArray, divisor: Int): IntArray { var answer = intArrayOf() arr.forEach { if (it % divisor == 0) { answer += it } } answer.sort() if (answer.isEmpty()) { answer += -1 } return answer } } }
코틀린의 프로젝트 구조 내에서 변수나 함수, 클래스의 '공용범위' 를 제어하는 단위인 스코프와 스코프 외부에서 내부로 접근을 제어하는 접근 제한자에 대해서 설명 스코프 범위 언어 차원에서 변수나 함수, 클래스 같은 '멤버'들을 서로 공유하여 사용할 수 있는 범위를 지정해 둔 단위 패키지 내부, 클래스 내부, 함수 내부 등 스코프의 3가지 규칙 스코프 외부에서는 스코프 내부의 멤버를 '참조 연산자'로만 참조가 가능함 a.eat() com.google.example.A 동일 스코프 내에서는 멤버들을 '공유'할 수 있음 //패키지 명시하지 않으면 default pakage val a = "패키지 스코프" class B { fun print(){ println(a) } } fun main() { println(..
물리적 구조 프로젝트 코틀린으로 개발을 할때 관련된 모든것을 담는 하나의 큰 틀 모듈 하나의 프로젝트는 여러개의모듈로 이루어 진다(기능 단위) 직접만들기 라이브러리 모듈 붙이기 모듈안에는 다수의 파일이 들어갈 수 있음 코틀린 코드 파일 뿐만아니라 모듈과 관련된 설정 및 리소스 파일도 포함 될 수 있음 논리적 구조 패키지 개발시의 소스 코드의 '소속'을 지정하기 위한 논리적 단위 코드내에서 사용하는 이름이 용도의 내용이 충돌하지 않도록 패키지 이름을 짓는다 com.youtube.example com.youtube.example.base com.youtube.example.kotlin com.youtube.example.android package com.youtube.example fun main() { ..
오버라이딩 상속에서는 기본적으로 수퍼클래스와 같은 속성을 가진 서브클래스를 만들수 없다 fun a(v: Int) -> (x) fun a(v: Int) 하지만 슈퍼 클래스에서 '오버라이딩'이라는 형태로 허용한다면 같은 이름과 형태로 된 함수의 내용을 다시 구현할 수 있다. fun main() { var t = Tiger() t.eat() } open class Animal { //eat 함수를 오버라이드 하기 위해 open open fun eat() { println("음식을 먹습니다.") } } class Tiger : Animal() { //open 이 붙은 함수를 override override fun eat() { println("고기를 먹습니다.") } } 추상화 선언부만 있고 기능이 구현되지 않..
생성자 class Person(var name:String, val birth Year:Int) 새로운 인스턴스를 만들기 위해 호출하는 특수한 함수 -> 생성자를 호출하면 클래스의 인스턴스를 만들어 반환 받을 수 있다. 생성자의 역할 인스턴스의 속성을 초기화 인스턴스 생성시 구문을 수행 기본생성자 fun main() { var a = Person("박보영", 1990) var b = Person("김수미", 1997) var c = Person("정장수", 1994) } class Person(var name: String, val birthYear: Int) { init { println("${this.birthYear}년생 ${this.name}님이 생성되었습니다.") } } 보조생성자 여러 값 겹쳐..
API 작성 목적 : 모바일 어플리케이션, 웹 등에서 사용되는 API 제작 IDE : IntelliJ 1. Spring Initializer 로 프로젝트 생성 2. 파일 구성 Controller Api 컨트롤러 Model 데이터 필드 정보 코드 UserProfile package com.example.demo.model; public class UserProfile { private String id; private String name; private String phone; private String address; public UserProfile(String id, String name, String phone, String address) { this.id = id; this.name = nam..
문제 이해 단어 s의 가운데 글자수 반환 (홀수) 짝수의 경우 가운데 두글자 반환 (짝수) 접근 짝/홀 나눈다 중간값 반환 Kotlin의 / 연산자는 소수점 나와도 Int로 리턴 풀이 class Solution { fun solution(s: String): String = s.slice((s.length - 1) / 2 .. s.length / 2) } 다른 풀이 class Solution { fun solution(s: String): String { var answer = "" if (s.length % 2 == 0) { answer = s.get((s.length / 2) - 1).toString() + s.get(s.length / 2).toString() } else { answer = s.g..
문제 이해 자연수 n 주어진다 n을 3진법 상에서 뒤집는다 이를 다시 10진법으로 표현 -> Return 접근 3진법으로 변환 뒤집기 3진법 -> 10진법으로 변환 풀이 class Solution { fun solution(n: Int): Int { return n.toString(3).reversed().toInt(3) } }
문제 이해 2016.1.1 금요일 a월 b일 무슨요일 ? a,b 입력 -> 2016.a.b 무슨요일인지 Return [ SUN,MON,TUE,WED,THU,FRI,SAT ] 실제로 있는날을 기준으로 할 것 접근 각 월이 몇일 까지 있는지 확인할것 -> 배열로 기록 Fri 가 월요일이기 때문에 1번째 위치에 배치 (한칸식 밀리기 때문에) until 을이용해 일수 전부 더한더음 7로 나눈 나머지 - > 해당요일 나온다 풀이 class Solution { fun solution(a: Int, b: Int): String { var end2016 = listOf(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) var dayOfWeek = listOf("THU", "FRI",..