우아한테크코스/Level 1 | 정리

우아한테크코스/Level 1 | 정리

어댑터 패턴(Adapter Pattern)

우테코 마지막 미션 오목을 진행하면서 금수 알고리즘을 어떻게 해결해야 할지 고민이 많았다. 오목이 이렇게 규칙이 복잡한 게임인지 새삼 처음 알게되었다.. 어릴 때 하던 오목은 이런게 아니었는데..😢 Adapter 어탭터라는 단어는 잘 알고있을 것이다. 한국에서 사용하는 220V 충전기를 호주에서는 바로 사용할 수 없기 때문에 플러그 모양을 바꿔주는 어댑터가 필요하다. 조금 다르게 설명하면 어댑터는 소켓의 인터페이스를 플러그에서 필요로 하는 인터페이스로 바꿔준다고 할 수 있다. 기존 소프트웨어 시스템에 새로운 업체에서 제공한 클래스 라이브러리를 사용해야 한다고 가정해보자. 그 업체에서 사용하는 인터페이스가 기존 시스템에서 사용하는 인터페이스와 같을 수는 없을 것이다. 따라서 업체에서 제공하는 라이브러리를 ..

우아한테크코스/Level 1 | 정리

추상 클래스(abstract class) vs 인터페이스(interface)

❓추상 클래스 (abstract class) 추상 클래스란 클래스의 추상적인 부분(==공통적인 부분)을 모아놓은 클래스이며, 그 자체로 인스턴스화는 불가능한 클래스다. 왜 인스턴스화를 할 수 없을까? 완전하게 구현되어 있지 않으니까! 추상 클래스는 프로퍼티나 메서드를 abstract로 가지고 있을 수 있고, abstract로 된 프로퍼티나 메서드는 미완성된 부분이기 때문에 이 추상 클래스를 상속받는 클래스에서 반드시 완전하게 구현해주어야 한다. 코틀린에서 어떤 클래스의 상속을 허용하기 위해서는 크래스 앞에 open 변경자를 붙어야 한다. 그와 더불어 오버라이드를 허용하고 싶은 메서드나 프로퍼티 앞에도 open 변경자를 붙여줘야 한다. 하지만❗ 추상 멤버는 항상 열려있기 때문에 추상 클래스는 open 키워..

우아한테크코스/Level 1 | 정리

value class?

❓ value class and data class @JvmInline value class LottoNumber2(val number: Int){ init { require(number in 1..45) { "로또 번호는 1이상 45이하여야 합니다." } } } data class LottoNumber(val number: Int) { init { require(number in 1..45) { "로또 번호는 1이상 45이하여야 합니다." } } } LottoNumber, LottoNumber2 클래스는 숫자 하나를 감싸고있는 래퍼 클래스다. 이를 통해 가독성이 좋아지는 효과를 볼 수 있고, 원하는 값이 들어오지 않는 경우 예외를 날려줄 수 있다. 위에 작성한 코드를 디컴파일 해서 비교해보자. publ..

우아한테크코스/Level 1 | 정리

클래스 위임(Class Delegation): by 키워드 사용

💡 Intro Kotlin in Action의 말을 인용하면 시스템을 취약하게 만드는 문제는 보통 구현 상속에 의해 발생한다. 하위 클래스가 상위 클래스의 메서드 중 일부를 오버라이드하면 하위 클래스는 상위 클래스의 세부 구현 사항에 의존하게 되는데, 상위 클래스의 구현이 바뀌거나 상위 클래스에 새로운 메서드가 추가되면 하위클래스의 동작이 잘못될 수 있다. 즉, 하위 클래스가 상위 클래스에 대해 갖고있던 가정이 깨져서 코드가 정상적으로 동작하지 못하는 경우가 발생할 수 있다는 것이다. 코틀린은 이런 문제를 인식하고 기본적으로 클래스를 final로 취급하고 상속을 위해서는 open 키워드를 통해 열어두어야 한다. 열린 상위 클래스의 소스코드를 변경할 때는 open 키워드를 보고 "다른 클래스가 이 클래스를..

우아한테크코스/Level 1 | 정리

int와 Integer

💡 Intro 저번주 금요일에 졸업식을 가느라 우테코 수업에 참여하지 못했다. 여태까지 했던 수업들과는 좀 다르게 어려운 내용을 다루었던 것 같고 그 내용에 대해 크루들에게 자세하게 설명을 전해들었다. 그 중에서도 전 페어가(아크) 정리한 글의 내용이 한 번에 이해할 수 있을만큼 좋아서 그 내용을 참고하여 내가 이해한 방식으로 다시 정리해보려고 한다. ❓ 동등성(identity) 동일한 정보를 가지고 있는 오브젝트를 의미한다. 메모리 상에 다른 오브젝트가 존재하는 것이고, 오브젝트의 기준에 따라 동등하다고 판단한다. 자바에서 동등성을 비교하기 위해서는 == 이 아닌 .equals를 사용해야 한다. 하지만 코틀린에서 == 연산자는 내부적으로 .equals를 호출하기 때문에 코틀린에서 동등성을 비교하기 위해..

Krrong
'우아한테크코스/Level 1 | 정리' 카테고리의 글 목록