본문 바로가기
  • GDSC Ewha Tech Team Blog

3-1기 스터디82

[3-2, 5주차] 연산자 오버로딩과 기타 관례(4) 1. 위임 프로퍼티 class Foo { var p : Type by Delegate() } p 프로퍼티는 접근자 로직을 다른 객체에게 위임한다. Delegate 클래스의 인스턴스를 위임 객체로 사용하며 by 뒤에 있는 식을 계산해서 위임에 쓰일 객체를 얻는다. class Foo { private val delegate = Delegate() // 컴파일러가 생성한 도우미 프로퍼티 var p: Type set(Value:Type) = delegate.setValue(..., Value) get() = delegate.getValue(...) } 다음과 같이 컴파일러는 숨겨진 도우미 프로퍼티를 만들고, 그 프로퍼티를 위임 객체의 인스턴스로 초기화 한다. p 프로퍼티는 바로 그 위임 객체에게 자신의 작업을 .. 2022. 5. 31.
[3-2, 3주차] 연산자 오버로딩과 기타 관례(3) - 구조 분해를 사용하면 복합적인 값을 분해해서 여러 다른 변수를 한꺼번에 초기화할 수 있다. 내부에서 구조 분해 선언은 관례를 사용하는데, 각 변수를 초기화하기 위해 다음과 같이 componentN이라는 함수를 호출한다. val (a,b) = p ---> val a = p.component1() val b = p.component2() data 클래스의 주 생성자에 들어있는 프로퍼티에 대해서는 자동으로 componentN 함수가 만들어진다. 구조 분해 선언은 함수에서 여러 값을 반환하게 할 때 유용하다. data class NameComponents(val name:String, val extension: String) fun splitFilename(fullName:String): NameCompon.. 2022. 5. 17.
[3-2, 2주차] 연산자 오버로딩과 기타 관례(2) 1. 동등성 연산자: equals - 코틀린은 관례에 따라 == 연산자 호출을 equals 메소드 호출로 컴파일한다. != 연산자를 사용하는 식도 equals 호출로 컴파일된다. 이 연산자의 경우 내부에서 인자가 널인지 검사해서 널이 아닌 경우에만 equals를 호출한다. a == b -> a?.equals(b) ?: (b==null) class Point2(val x:Int, val y:Int){ override fun equals(obj: Any?): Boolean{ if(obj === this) return true //최적화: 파라미터가 this와 같은 객체인지 if(obj !is Point) return false return obj.x==x && obj.y==y //Point로 스마트 캐스트 .. 2022. 5. 7.
[3-2, 1주차] 연산자 오버로딩과 기타 관례(1) 어떤 언어 기능과 미리 정해진 이름의 함수를 연결해주는 기법을 코틀린에서는 관례라고 부른다. 언어 기능을 타입에 의존하는 자바와 달리 코틀린은 관례에 의존한다. 1. 이항 산술 연산 오버로딩 data class Point(val x:Int, val y:Int){ operator fun plus(other:Point):Point{ return Point(x+other.x, y+other.y) } } >>>val p1 = Point(10, 20) >>>val p2 = Point(30, 40) >>>println(p1 + p2) Point(x=40, y=60) 연산자를 오버로딩하는 함수 앞에는 꼭 operator가 있어야 한다. operator 키워드를 붙임으로써 어떤 함수가 관례를 따르는 함수임을 명확히 할.. 2022. 4. 6.
[14주차] 19. Symbol Property, 20. Symbol 함수 메소드, 21. Map 오브젝트, 22. WeakMap 오브젝트, 23. Set 오브젝트, 24. WeakSet 오브젝트 14주차에는 '자바스크립트 중고급:근본 핵심 논리'에서 Symbol 프로퍼티와 함수,메서드, Map, WeakMap, Set, WeakSet 오브젝트를 공부했습니다. 😁 19. Symbol Property Well-Known Symbols 스펙에서 알고리즘에 이름을 부여하고 이름에서 참조하기 위한 빌트인 Symbol 값 @@ Well-Known Symbol을 나타내는 기호 개발자 코드 우선 실행 match()를 실행하면 디폴트로 @@match를 실행 소스코드에 Symbol.match를 작성하면 @@match가 실행되지 않고 Symbol.match가 실행됨 개발자 코드로 디폴트 기능을 오버라이딩할 수 있음 Symbol.toStringTag Object.prototype.toString()의 확장 toStr.. 2022. 2. 11.
[9주차] 6.this, 7.논리적 정리 9주차에는 '자바스크립트 중고급:근본 핵심 논리'에서 this문법과 논리적 정리를 공부했습니다. 😁 this this 개요 함수에서 this로 인스턴스를 참조함 실행 콘텍스트의 this 바인딩 컴포넌트에 바인딩 this와 글로벌 오브젝트 글로벌 오브젝트에서 this는 글로벌 오브젝트 참조 Host 오브젝트 개념 적용 this와 strict 모드 strict모드 글로벌 오브젝트로 작성 window.book()의 window. 와같이 작성 함수 앞에 오브젝트를 작성하지 않으면 this 바인딩 컴포넌트에 undefined가 설정되어 this로 window를 참조할 수 없음 function book(){ "use strict"; return this; }; var result = book();​ this 참조 .. 2022. 2. 8.