프로그래머스 lv1 자연수 뒤집어 배열로 만들기 자연수를 배열로 만들기위해 각각의 숫자를 꺼낼생각을 먼저하게 되었다. 그렇게 하기위해 for문을 이용했고. 그전에 먼저 숫자를 문자열로 변형했다. n을 문자열로바꿔서 for문에 돌린후 list에 담아줬다. 그 후 return 타입이 Int형 배열이어서 var answer = list.reversed().map { it.toInt() }.toIntArray() ->이런식으로 처리했다. TIL/kotlin 알고리즘 2024.01.24
프로그래머스 lv1 x만큼 간격이 있는 n개의 숫자 문제를 보고서 x /x+x/x+x+x/... =>1*x /2*x/3*x ..... 이렇게 규칙이 떠올랐다. " 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트" 1*x 2*x 3*x.. 이런식으로 진행되어서 nlist 에 숫자를담는 리스트를 만들었다. 타입은 LongArray로 리턴되어서 toLong으로 형변환 해주었다. for문을 두번써서 코드가 길어져서 다른사람들의 풀이를 보았는데.. 굉장히 간결했다. 아직 형변환에 익숙하지 않아서 연습을 더 많이 해야할것 같고, 다른 사람들의 코드를 보면서 다른 문법도 공부해나가야 하겠다. TIL/kotlin 알고리즘 2024.01.24
스코프 함수 스코프함수는 코드를 축약해서 표현할 수 있도록 도와주는 함수이다. -영역함수라고도 한다. -사용법은 함수처럼 쓰지 않고 run,let 처럼 괄호 없이 일종의 키워드 같이 사용할 수 있다. -lateinit과 함께 safe call 남용을 막아주는 역할도 하기 때문에 많이 사용하는 요소 -스코프 함수에는 run,let,apply,also,with 가 있다. run과 let으로 보는 스코프 함수 run과 let은 자신의 함수 스코프 안에서 호출한 대상을 this와 it로 대체해서 사용할 수 있다. run -스코프 함수 안에서 호출한 대상을 this로 사용할 수 있다. -클래스 내부의 함수를 사용하는 것과 동일한 효과이기 때문에 this는 생략하고 메서드나 프로퍼티를 바로 사용할 수 있다. -다음 예제에서는 .. TIL/selfpractice 2024.01.19
지연 초기화 lateinit 변수만 Nullable로 미리 선언하고 초기화를 나중에 해야 할 경우 Nullable로 선언하는 일반적인 방법 일반적인 선언 방식으로 처음에 null 값을 입력해두고, 클래스의 다른 메서드 영역에서 값을 입력 위 방식은 변수에 입력된 값의 메서드나 프로퍼티를 사용할 때 Safe Call(?.)이 남용되어 가독성을 떨어트리는 문제가 있다. lateinit을 사용하는 방법 lateinit을 사용하면 Safe Call을 쓰지 않을 수 있기 때문에 코드에서 발생할 수 있는 수많은 ?를 방지할 수 있어서 가독성이 좋아진다. lateinit의 특징은 다음 세 가지를 들 수 있다. 1. var로 선언된 클래스의 프로퍼티에만 사용 2. null은 허용되지 않음 3. 기본 자료형 Int, Long, Do.. TIL/selfpractice 2024.01.17
null safety Kotlin에서 지정하는 기본 변수는 모두 null이 입력되지 않는다. null 값을 입력하기 위해서는 변수를 선언할 때 타입 뒤에 ?(Nullable, 물음표)를 입력한다. var variable: String? 변수에 null 허용 설정하기 변수의 타입뒤에 ?를 붙이지 않으면 null 값을 입력할 수 없다. 함수 파라미터에 null 허용 설정하기 함수의 리턴 타입에 null 허용 설정하기 함수의 리턴 타입에도 물음표를 붙여서 null 허용 여부를 설정할 수 있다. 안전한 호출: ?. 변수를 Nullable로 만들기 위해서 물음표를 사용함. Nullable인 변수 다음에 ?.을 사용하면 해당 변수가 null일 경우 ?. 다음의 메서드나 프로퍼티를 호출하지 않음 다음 코드에서처럼 문자열의 길이를 반환하는.. TIL/selfpractice 2024.01.17
클래스와 설계-2 익스텐션 kotlin은 클래스,메서드,프로퍼티에 대해 익스텐션을 지원한다. 이미 만들어져 있는 클래스에 다음과 같은 형태로 메서드를 추가할 수 있다. fun 클래스.확장할 메서드(){ } 상속이 미리 만들어져 있는 클래스를 가져다 쓰는 개념이라면 익스텐션은 미리 만들어져 있는 클래스에 메서드를 넣는 개념 자식이 만든 클래스에 사용하기보다는 누군가 작성해둔, 이미 컴파일되어 있는 클래스에 메서드를 추가하기 위한 용도로 사용 익스텐션을 사용한다고 해서 실제 클래스의 코드가 변경되는 것은 아니며 단지 실행 시에 도트 연산자로 호출해서 사용할 수 있도록 해줌 특별한 경우를 제외하고는 거의 메서드 확장 용도로 사용됨 위의 예시를 보면 자식 클래스를 이용해서 부모클래스안의 메서드를 출력할 수 있다. 접근 제한자 k.. TIL/selfpractice 2024.01.16
클래스와 설계-1 클래스를 정리하면 단지 변수와 함수의 모음이라고 생각하면 된다. 클래스의 기본구조 class 클래스명 { var 변수 fun 함수() { // 코드 } } 클래스와 인스턴스의 관계를 비교할 때 가장 많이 사용되는 예가 붕어빵의 틀과 붕어빵이다 붕어빵은 인스턴스이고 틀은 클래스이다. 클래스 내부에 정의되는 변수와 함수를 멤버 변수, 멤버 함수라고 부른다. 또 다른 용어로 프로퍼티,메서드라고도 부른다. -클래스의 변수>멤버 변수> 프로퍼티 -클래스의 함수>멤버 함수>메서드 ※클래스 안에 정의된 변수는 프로퍼티라고 하지만 함수 안에 정의된 변수는 프로퍼티가 아닌 변수(지역변수)라고 한다. class 클래스명{ var 변수A //프로퍼티: 함수 밖에 존재 fun 함수(){ var 변수B //변수(또는 지역변수).. TIL/selfpractice 2024.01.16
kotlin 배열과 컬렉션 기본형과 달리 배열과 컬렉션은 대부분의 컴퓨터 언어들은 여러 개의 값을 하나의 변수에 저장할 수 있도록 타입을 제공한다. 변수에 배열 타입에 따라 배열의 공간을 만들고 변수에 담아주는 예시 var students = IntArray(10) var longArray = LongArray(10) var CharArray = CharArray(10) var FloatArray = FloatArray(10) var DoubleArray = DoubleArray(10) var intArray = IntArray(10) intArray[10] = 100 // Exception 발생. intArray의 마지막 인덱스는 9입니다. --> ArrayIndexOutOfBoundsException 발생 컬렉션 -컬렉션은 다.. TIL/selfpractice 2024.01.15