본문 바로가기

Kotlin15

Delegate Pattern 위임패턴 Delegate Pattern (위임패턴)1. 위임 패턴이란?객체가 직접 작업을 수행하지 않고 다른 도우미 객체에게 그 작업을 맡기는 디자인 패턴. 이 도우미 객체를 위임 객체(Delegate)라고 한다.2. 위임 패턴의 대표적 예시 - by lazy() 프로퍼티 초기화 지연지연 초기화(lazy initialization)객체의 일부분을 초기화하지 않고 남겨두었다가, 실제로 그 부분의 값이 필요할 경우 초기화한다.지연 초기화를 사용하는 경우초기화 과정에서 자원을 많이 사용하거나객체를 사용할 때 마다 꼭 초기화하지 않아도 되는 프로퍼티일 때예시Person 클래스: 자신이 작성한 메일 리스트를 제공한다이메일들이 db에 저장되어있으며, 불러오면 시간이 걸린다 가정하자.그래서 이메일 프로퍼티의 값을 최초로 사용.. 2024. 8. 20.
Kotlin14. null 문제, 스코프함수 1. null 클래스를 많이 쓰게되면, 여러가지 객체들이 변수에 대입되어 사용하게 된다. 여기서 중요한게!! 변수에 객체가 대입되어 보관이 되어있는가를 살펴봐야한다!! (안그러면 에러니까) 개발자는 변수에 객체가 있다고 생각했지만, 막상 안에는 null값이라면?? 에러다. 그래서 코틀린에서는 변수에는 null 대입을 기본적으로 인정하지않는다. class를 지정한 변수의 경우, 거기에 null을 대입하는것은 불가능하다. 또 프로퍼티의 경우, 반드시 객체가 대입될 수 있도록 초기화를 해야한다. 코틀린에서 초기화가 안된 프로퍼티(즉, 이 상태는 null의 상태이다)는 프로퍼티로 인정하지 않는다. 2. null 대응과 관련된 연산자 그런데 경우에 따라서는 null이 필요한 경우도 있을것이다. 코틀린에서는 nul.. 2023. 8. 13.
Kotlin13. class의 다른 확장 - Pair, 확장메소드/프로퍼티.. 1. 복수의 값을 토해내는 리턴값 (메인)함수나 메소드는 기본적으로 하나만 리턴한다. 그런데 경우에 따라서는 2,3개를 반환해야할때도 있다. Pair, Triple이라는 클래스를 이용하면 편하다. ※attribute : 속성 2개의 값을 다루는 Pair class first 첫번째 값 second 두번째 값 3개의 값을 다루는 Triple class first 첫번째 값 second 두번째 값 third 세번째 값 fun main() { val t = Person("아테나", "안", 12) val (n1,n2) = t.getName() //리턴값이 2개이므로 복수의 변수를 준비해야한다. val (at1,at2,at3) = t.getArrt() //리턴값이 3개이므로 복수의 변수를 준비해야한다. prin.. 2023. 8. 13.
Kotlin12. class의 다른 확장 - Delegation, observable... 1. 위임 (Delegation) class A와 class B가 인터페이스C를 implement 했다고 치자. A와 B는 아무런 관계가 없다. 다만 C를 implement 받았을 뿐.. 그런데 A가 갖고있는 기능을 그대로 B에게 양도해서 B를 정의하고 싶다면?? 이런식으로 클래스의 기능을 양도해서 별도의 클래스를 작성하는 것을 위임이라고한다. fun main() { val p = Person("아테나",10) println("==========================") p.show() println(p.message) val s = Student(p) println("==========================") s.show() println(s.message) } interface Hum.. 2023. 8. 13.
Kotlin11. interface, abstract, Singleton 1. interface 인터페이스 : 클래스에 준비되어야할 프로퍼티나 메소드를 정의해둔것 클래스와 다르게 메소드에는 구체적인 기능을 쓰는게 아니다! 메소드는 이름만 갖고있다. (이 이름으로 통일할꺼야! ) (자바에서는 implement로 구현된다. kotlin에서는 : 으로 가져온다. 상속과 똑같음) 인터페이스는 다중구현이 가능하다. (클래스는 다중상속이 불가능하다.) 인터페이스를 받은 클래스는, 인터페이스에 준비되어있는 프로퍼티나 메소드를 오버라이드해서 사용해야한다. fun main() { val me = Person("고양이", "cat@cat.cat") val you = Student("갈색푸들") val he = Person("코코") val she = Student("테나아",30) val da.. 2023. 8. 13.
Kotlin10. class와 OOP 1. 객체지향 C는 절차지향 , 함수를 쓰는 순서가 중요하다. 어느정도 프로그램이 복잡해지면 , 변수나 함수들이 점점 늘어나게된다. 이렇게 많아진 함수나 변수는 정리되지 않으며 나중에 코드를 보기 힘들어진다. 그 방법 중 하나로, 대규모 프로젝트를 만들때 주류가 되는 개념이 「객체지향」이다. 객체라는 덩어리로 프로그램을 구축한다. 객체는??? 변수나 함수를 덩어리로 만들어서, 항상 그 내용을 뱃속에 보존하고 이용할 수 있게 만든 것이다. 객체는 함수와 변수를 같이 갖고있다. 이 객체가 갖고 있는 능력을 class라 부른다. 이미 존재하는 class(Random,, 등)가 존재하고, 내가 class를 만들수도 있다. fun main() { var p = Person() p.name = "cake" p.ma.. 2023. 8. 6.