목록분류 전체보기 (29)
Jisoo’s devlog
Module 1: Introduction to blockchain technology ▶︎ 블록체인이란? → 대표적인 분산 원장 기술(distributed ledger technology) → 그 중에서도 정보를 저장하고 있는 데이터베이스 → 정보 추가 가능, 수정 불가능, 각 데이터는 이전 데이터를 가리킴 → 블록체인에 새 블록이 연결되면서 데이터가 추가됨 ⇒ 새 블록의 데이터는 바로 이전 블록의 데이터를 참조한다. ↓ How? ▶︎ Hashing 데이터를 입력하고 고정된 길이의 데이터를 출력 → 해시값의 길이는 사용하는 해싱 알고리즘에 따라 달라짐 → 모든 블록에는 블록을 식별할 수 있는 각각의 고유한 해시값이 있음 ⇒ 새롭게 연결되는 블록의 해시값은 직전 블록의 해시값을 기반으로 생성됨 ⇒ 따라서,..
DSL을 사용하면 반복되는 코드의 효율적인 재사용이 가능하다? 메서드를 반복해서 호출하지 않고도 메서드를 호출할 수 있다. → Dsl은 메서드 호출 조합에 대한 인테페이스를 제공하기 때문에 일련의 과정을 반복하지 않고도 원하는 메서드를 불러올 수 있다. 그래서, 잘 설계된 dsl로 구현한 코드는 쉽게 유지 보수할 수 있다. → 이는 가장 빈번히 바뀌는 애플리케이션 부분에 특히 중요하다. 또한, 프로그래머가 특정 코드에 집중할 수 있어서 결과적으로 생산성이 좋아진다. 내부 DSL 내부 DSL이란 ‘독립적인 문법 구조를 가진 SQL과 같은 위부 DSL과는 달리 DSL의 핵심 장점을 유지하면서 범용언어(코틀린)를 동일한 문법으로 사용하는 것’ -> 추가로 안드로이드의 내부 DSL인 Anko 라이브러리에 대한 ..
제네릭 클래스를 인자로 사용하는 애노테이션 KClass → 클래스를 인자로 받을 때의 형식 KClass → 제네릭 클래스를 인자로 받을 때의 형식 ⇒ 애노테이션이 어떤 인자로 쓰일지 알 수 없기 때문에 스타 프로젝션을 사용한다. 리플렉션 → 객체에 접근 객체 + ::(더블콜론) + class ⇒ 객체에 접근가능하다. (자바에서는 객체 + . + class 형식으로 주어진다.) → JSON 직렬화 라이브러리는 실행 시점에 정보를 알 수 있도록 리플렉션은 객체에 접근할 수 있어야 하기 때문에 사용. 메타데이터란? → 다른 데이터를 설명하기 위한 데이터 → 애노테이션도 메타데이터의 종류이다. ⇒ 정보를 통제하고 접근할 수 있게 하는 정보유형을 정리한 2차 데이터 유형 : 메타데이터
스타 프로젝션과 Any 스타 프로젝션(*)는 어떤 타입이 들어올지 알 수 없어도 안전하게 사용할 수 있다. 하지만 구체적인 타입이 정해지면 해당 타입만 받을 수 있다. *는 구체적인 타입이 정해지기 전까지는 Any?로 취급된다. Any는 언제든지 모든 타입을 받을 수 있다. 모든 타입이 상속받는 최상위 타입. (자바로 디컴파일하면 Object 타입으로 변환됨.) reified ‘구체화’ reified type parameter 와 함께 inline 함수를 만들면 Class를 파라미터로 넘겨주지 않아도 런타임에 타입 T에 접근할 수 있다. → reified는 inline 함수와 조합해서 사용한다. → 인라인을 하고싶지 않으면 noinline 키워드를 붙여준다. ⇒ reified type과 인라인 함수가 호..
invoke 메서드를 구현하는 인터페이스란? 자바에서 invoke 메서드를 구현하려면 코드를 일일이 다 써야 한다. 하지만 코틀린에서는 함수 타입이 invoke 메서드를 구현하는 인터페이스이기 때문에 굳이 코드를 적지 않아도 invoke 메서드를 구현할 수 있다. 전략 패턴이란? → 4-2기에 알 수 있다.. ⇒ “어떤 행위를 처리할때 로직의 일부 전략을 캡슐화하여 이용하는 패턴” • 로직이나 알고리즘 변경시 해당 코드를 직접 변경하지 않고 이미 정의된 알고리즘을 교체하여 사용할 수 있다. ㄴ 객체가 할 수 있는 각각의 행위를 전략으로 만들고 행위를 수정해야 할 때 전략을 바꾸어 행위의 수정을 가능하도록 한다. 인라인 함수 : 람다의 경우 파라미터 개수에 따라 컴파일 단계에서 FunctioN 인터페이스로..
Anko - 안드로이드에서 코드를 작성할 때 복잡한 코드 또는 상용구를 제거하기 위해 JetBrains®에서 특별히 개발한 확장 기능 및 DSL 모음 https://github.com/Kotlin/anko 를 참조하여 Anko 라이브러리에 대해 참조할 수 있다. Anko 의 구성은 총 네 가지로, 아래와 같다. Anko Commons: 인텐트, 다이얼로그, 로그 등을 편리하게 사용하는 라이브러리 Anko Layouts: 안드로이드 레이아웃을 코드로 쉽게 작성하는 라이브러리 Anko SQLite: SQLite를 쉽게 사용하는 라이브러리 Anko Coroutions: 코루틴을 쉽게 사용하는 라이브러리 Anko 라이브러리 추가하기 1. Anko의 모든 구성 요소를 한 번에 추가하려면 아래와 같은 코드를 사용한..
DSL(영역 특화 언어 Domain Specific Language)을 사용해서 표현력 좋고 코틀린다운 API를 설계하는 방법 코틀린 DSL 설계는 코틀린 언어의 여러 특성을 활용한다. 1. 수신 객체 지정 람다 - 코드 블록에서 변수가 가리키는 대상을 결저앟는 방식 변경 가능 2. invoke 관례 - DSL 코드 안에서 람다와 프로퍼티를 유연하게 대입 가능 API에서 DSL로 목표: 코드의 가독성과 유지 보수성 향상 -> 인터페이스, 클래스의 API를 살펴봐야 한다 => 모든 개발자는 클래스 간의 상호작용을 이해하기 쉽고 명확하게 표현할 수 있어야 한다. 깔끔한 API를 작성할 수 있게 돕는 코틀린 기능 -> 확장 함수, 중위 함수 호출, 람다 구문에 사용할 수 있는 it 등의 문법적 편의, 연산자 ..
애노테이션과 리플렉션을 사용하면 소스코드에서 함수와 클래스 이름을 알지 못해도 임의의 클래스를 다룰 수 있다. 애노테이션 선언과 적용 애노테이션 적용 애노테이션을 적용할 때는 @과 애노테이션 이름을 입력하면 된다. ex_제이유닛 프레임워크(http://junit.org/junit4/) -> @Test 애노테이션 붙이기 @Deprecated 애노테이션 : replaceWith 파라미터를 사용하는 패턴 @Deprecated("Use removeAt(index) instead.", ReplaceWith("removeAt(index)")) fun remove(index: Int) { ... } ㄴ 애노테이션에 인자를 넘길 때는 일반 함수처럼 괄호 안에 인자를 넣는다. [애노테이션 인자를 지정하는 문법] 애노테이..
블록체인의 참여자 블록체인은 대부분 누구나 참여할 수 있는 퍼블릭 블록체인. (+프라이빗, 컨소시움, 하이브리드) 블록체인 네트워크의 참여자(들이 사용하는 기기) = 노드(node) 블록체인의 모든 데이터를 저장하고 기록 = 풀 노드 -> 많은 저장공간 필요, 현실적으로 어려움. 블록 헤더의 데이터만 저장, 검증이 필요할 때만 풀 노드와 대조 = 라이트 노드 -> 적은 저장공간으로도 네트워크 참여 가능. 블록이 생성되는 방식 개인 지갑 생성: RSA(공개키 암호화) 방식 - 개인키(private key) : like 계좌 비밀번호 - 공개키(public key) : like 계좌번호 트랜잭션 발생(송금 및 구매) - 해시함수 이용하여 트랜잭션의 해시 값을 구하기 -> 비밀키로 암호화: 전자서명을 만듦. ..
제네릭 타입 파라미터 제네릭스를 사용하면 타입 파라미터를 사용하는 타입을 정의할 수 있다. 타입 파라미터를 사용하면 구체적으로 원하는 타입을 정의할 수 있다. 코틀린에서는 타입 인자도 추론할 수 있다. val authors = listOf("Dmitry", "Svetlana") 두 값이 문자열이기 때문에 컴파일러는 여기서 생기는 리스트가 문자열을 담는 리스트라는 것을 추론할 수 있다. 만약 빈 리스트를 만든다고 하면 타입 인자를 추론할 수 없기 때문에 직접 변수의 타입 또는 타입 인자를 지정해야 한다. val readers: MutableList = mutableListOf() val readers = mutableListOf() ㄴ 이 두 선언은 동등하다. 제네릭 함수와 프로퍼티 제네릭 함수는 모든 리..