TIL #35

loci·2024년 6월 4일
0

TIL

목록 보기
33/103

달리기 경주
callings에서 불린 이름들이 한번 나올때마다 순위를 한단계씩 올려준다.

각 배열을 순회해 callings의 요소들을 players와 비교해서 같으면 앞 인덱스의 값과 순서를 바꿔주는 식으로 풀었는데 입력값이 길 경우 시간초과가 나와 오답이 나온다.
찾아보니 Collection Map을 사용해서 풀어야할 것 같아 Map을 좀 더 공부해볼 계획이다.


나의 풀이

class Solution {
    fun solution(players: Array<String>, callings: Array<String>): Array<String> {
        var answer: Array<String> = arrayOf<String>()
        var playersList = players.toMutableList()
        for(i in callings.indices){
            if(playersList.contains(callings[i])){
                for(j in playersList.indices){
                    if(callings[i] == playersList[j]){
                        playersList[j] = playersList[j-1]
                        playersList[j-1] = callings[i]
                        break
                    }
                }
            }
        }
        return playersList.toTypedArray()
    }
}

정답: 68.8 / 100


Kotlin 문법 강의

3주차

메소드설계

메소드: 이름이 붙은 로직
기본구조

fun 메소드이름(변수명:자료형, 변수명:자료형 ....) : 반환자료형 {
		소스코드 로직
}

함수에서 Unit을 반환하는 것은 반환값이 없음을 의미하며, 주로 부작용(콘솔 출력, 전역 변수 수정, 로깅 등)을 가지는 경우에 사용된다고 한다.

클래스 설계

객체지향 프로그래밍 Object Oriented Programming(OOP)
코틀린의 모든것이 클래스형태이므로 객체화할 수 있다.
5대키워드 : 클래스, 추상화, 캡슐화, 상속, 다형성

데이터클래스 - 정보(프로퍼티)만 가지고 있는 클래스 (변수, 상수)

  • hashCode(): 객체를 구분하기 위한 고유값을 리턴
  • eauals(): 동일한 객체인지 비교해서 true 또는 false를 리턴
  • copy(): 현재 객체의 모든 정보를 복사해서 새로운 객체를 리턴
  • toString(): 현재 객체의 모든 정보(프로퍼티)를 예쁘게 출력
  • getXXX()/setXXX(매개변수): 변수의 값을 리턴하거나 설정
data class 클래스이름 { 정보1 정보2 }

실드(sealed) 클래스 - 상속관련제한 클래스

  • 상속받을수있는 자식클래스를 미리정의해 무분별한 상속방지
  • 컴파일 시점에 생성할수 있는 자식을 알 수 있어 효율적으로 다형성구현

오브젝트 클래스(object class)

  • JAVA의 static대신 사용하는 키워드
  • 프로그램을 실행하는 동시에 인스턴스화
  • 싱글톤 패턴구현에 사용

생성자의 활용

클래스(설계도)를 실체화 할 때 최초로 실행할 로직을 작성, 인스턴스 초기화 메서드

  • 기본생성자와 명시적생성자
  • 주 생성자는 클래스 헤더에 정의되고, 초기화 블록(init)과 함께 사용할 수 있으며, 부 생성자(constructor)는 여러 개 정의할 수 있다
  • constructor는 여러개만들어 생성자마다 프로퍼티를 다르게 설정할 수 있다. 원하는 생성자를 선택해서 최초로직을 수행할수있다

사용
클래스를 한가지 형태로 실체화 할때는 주생성자 여러형태로 실체화 할 때는 보조 생성자

요약: 생성자는 실체화할때 최초로 실행되는 로직이다(인스턴스 초기화 메서드), 프로퍼티를 생성자마다 다르게 생성해야할때 부 생성자(constructor)를 쓴다.

객체의 활용

객체란

  • 객체는 모든 인스턴스를 포함하는 개념
  • class로 선언된것들 (class는 객체의 설계도)

인스턴스란

  • 클래스형태로 설계된 객체를 실체화(메모리에 올리면)하면 인스턴스가 생긴다.
  • 인스턴스는 메모리공간을 차지

요약: 클래스는 객체의 설계도이며, 클래스에서 생성된 객체가 메모리에 올라가면(실체화되면) 이를 인스턴스라고 한다.

상속

  • 클래스간의 상속
  • 공통적인 요소들이 있다면 상속관계를 만들수있다.
  • 코틀린으로 기본적으로 final이므로 상속이 불가해 open을 사용해야 상속 가능(fun에도 open이 붙어야 상속)
  • super는 부모객체를 뜻함

필요성

  • 다형성을 구현
  • 클래스의 내용을 변경해야하는경우 부모클래스만 변경하면 된다.

오버라이딩(Overriding)

  • 부모클래스의 정보를 재설계한다.
  • 주로 부모클래스의 메소드를 재설계

필요성

  • OOP관점에서 클래스간의 관계를 만들고 일관성을 유지
  • 필요한기능이 있을때마다 별도의 이름으로 만들면 일관성을 해침
  • 재사용성이 떨어져 유지보수의 어려움

오버로딩(Overloading)

동일한 이름의 메소드를 여러형태로 만들수있다.

  • 매개변수의 갯수나 자료형을 다르게 하면 동일한 이름으로 메소드를 생성가능
  • 반환자료형은 영향을 주지 않음

필요성

  • 동일한 동작을 하는 메소드를 여러개 만들어야할때(실수, 정수) 같은 이름으로 만들 수 있다. 만약 addInt, addDouble 처럼 만들어야한다면 관리하기 힘들어짐

인터페이스

  • 공통적으로 필요한 기능을 외부에서 추가해줄수있다.
  • 코틀린의 부모클래스는 한 개라서 추가적인 기능을 추가하려면 인터페이스를 사용
  • 메소드 로직이 존재하지 않고 구현이 없고 이름만 존재할때 추상메소드라고 한다.
  • 인터페이스는 추상메소드만 작성해야하지만 최근에는 추상메소드가 아니어도 사용하기도 한다. (인터페이스는 기본 메서드(구현을 가진 메서드)도 포함할 수 있다.)
interface 인터페이스이름 {
	fun 메소드이름()
}

예를 들어 새를 상속 받을때 새는 보통 헤엄치는 행위가 없는데 오리처럼 물에 사는 새에대해 헤엄을 치는 기능을 넣어줘야한다면 부모 클래스에 추가하지 않고 인터페이스에 추가해준다.

profile
편리한 개발자

0개의 댓글