캡슐화
·
Kotlin
캡슐화(encapsulation)란 클래스를 작성할 때 외부에서 숨겨야 하는 속성이나 기능 가시성 지시자(visibility modifiers)를 통해 외부 접근 범위를 결정할 수 있다. private: 이 지시자가 붙은 요소는 외부에서 접근 불가 public: 이 요소는 어디서든 접근이 가능 (기본값) protected: 외부에서 접근할 수 없으나 하위 상속 요소에서는 가능 internal: 같은 정의의 모듈 내부에서 접근 가능 public, private 코드 예시 package com.example.demo.inherit private class PrivateTest { private var i = 1 private fun privateFunc() { i += 1 println(i) } fun ac..
프로그래머스 코딩테스트 / 약수의 합
·
Algorithm
약수는 mod로 계산했을 때 값이 0이 나오기 때문에 그 값을 더해주는 식으로 풀어봤다. class Solution { fun solution(n: Int): Int { var answer = 0 for (i in 1..n) { if(n % i == 0) { answer += i } } return answer } } if문으로 약수의 값을 구하고 answer에 하나씩 더해준 후 return했다. 다른사람의 풀이 class Solution { fun solution(n: Int): Int { var answer = 0 answer = (1..n).filter { n % it == 0 }.sum() return answer } } filter함수를 사용해 훨씬 보기 깔끔하다. filter는 Boolean값..
프로그래머스 코딩테스트 / 자릿수 더하기
·
Algorithm
한 덩어리의 숫자를 쪼개서 값을 더해야한다. 아무리 봐도 이해가 가지 않아서 풀이를 보고 풀었다. class Solution { fun solution(n: Int): Int { var answer = 0 val str: String = n.toString() val numbers = str.toCharArray().map { it.digitToInt() } answer = numbers.sum() return answer } } n을 String으로 변환시킨다. String으로 변환시킨 n을 Char로 쪼갠다. map으로 Int 타입으로 변경시킨다. (문자 변수를 그대로 Int 시키면 아스키코드이기 때문에 변환이 제대로 되지 않는다. digitToInt()를 사용하면 숫자 그대로 출력이 된다. 다른사람..
다형성
·
Kotlin
다형성 (polymorphism)이란? 같은 이름을 사용하지만 구현 내용이 다르거나, 매개변수가 달라서 하나의 이름으로 다양한 기능을 수행할 수 있는 개념이다. Static Polymorphism 컴파일 타임에서 결정되는 다형성 단순하게 보면 메서드 오버로딩을 사용할 때 Dynamic Polymorphism 런타임 다형성 동적으로 구성되는 오버라이딩된 메서드를 사용할 때 오버라이딩 (overriding) 기능을 완전히 다르게 바꾸어 재설계 누르다 -> 행위 -> push() push()는 '확인' 혹은 '취소' 용도로 서로 다른 기능을 수행할 수 있다. 오버로딩(overloading) 기능은 같지만 인자를 다르게 하여 여러 경우를 처리 출력한다 -> 행위 -> print() ..
확장 함수
·
Kotlin
확장함수 클래스의 멤버 함수를 외부에서 더 추가할 수 있다. fun 확장대상.함수명(매개변수, ...): 반환값 { ... return } ExtensionFunction fun main() { val source = "Hello World" val target = "Kotlin" println(source.getLongString(target)) } // String을 확장해 getLongString 추가. (String은 Class인걸 생각하자) fun String.getLongString(target: String): String = if (this.length > target.length) this else target // this 키워드는 "hello world"를 지칭함 this는 확장 대상..
고차함수와 람다식
·
Kotlin
람다식이란? 익명 함수의 하나의 형태로 이름 없이 사용 및 실행이 가능 val multi: (Int, Int) -> Int = { a: Int, b: Int -> a * b } // 생략되지 않은 전체표현 val multi: (a: Int, b: Int) -> Int = { a, b -> a * b } // 람다식 매개변수 자료형의 생략 val multi = { a: Int, b: Int -> a * b } // 선언 자료형 생략 fun main() { val result: Int // val multi: (Int, Int) -> Int = { a: Int, b: Int -> a * b } val multi: (a: Int, b: Int) -> Int = { a, b -> println("$a, $b")..