전체 글
  • 확장함수 기존 자바 API를 재작성하지 않고도 자바 코드를 변환할 수 있어야한다. 어떤 클래스의 멤버 메서드인것처럼 호출할 수 있지만 그 클래스의 밖에 선언된 함수다. 확장함수를 만들려면 추가하려는 함수 이름 앞에 그 함수가 확장할 클래스의 이름을 덧붙이기만 하면 된다. - 객체 타입 : 클래스 이름 - 수신 객체 : 확장 함수가 호출되는 대상이 되는 값 확장 함수가 캡슐화를 깨지는 않는다. 클래스 안에서 정의한 메서드와 달리 확장 함수 안에서는 클래스 내부에서만 사용할 수 있는 비공개(private) 멤버나 보호된(protected) 멤버를 사용할 수 없다. 클래스의 멤버 메서드와 확장 함수를 모두 '메서드'라고 부르자. 클라이언트에게 자신이 호출하려는 메서드가 확장함수인지 멤버 메서드인지의 여부는 중..

    Read more
  • 카프카 브로커 카프카 클라이언트와 데이터를 주고받기 위해 사용하는 주체이자, 데이터를 분산 저장하여 장애가 발생하더라도 안전하게 사용할 수 있도록 도와주는 애플리케이션이다. 하나의 서버에는 한 개의 카프카 브로커 프로세스가 실행된다. 데이터를 안전하게 보관하고 처리하기 위해 3개 이상의 브로커 서버를 1개의 클러스터로 묶어서 운영한다. 카프카 클러스터로 묶인 브로커들은 프로듀서가 보낸 데이터 를 안전하게 분산 저장하고 복제하는 역할을 수행한다. 카프카 브로커가 프로듀서로부터 데이터를 전달받았을때 프로듀서가 요청한 토픽의 파티션에 데이터를 저장하고, 컨슈머가 데이터를 요청하면 파티션에 저장된 데이터를 전달한다. 프로듀서로부터 전달된 데이터는 파일 시스템에 저장된다. 카프카는 메모리나 데이터베이스에 저장하지..

    Read more
  • "책으로 공부하는 Apache Kafka" 카프카 설치 교재에서는 AWS EC2를 사용하여 설치하고 있지만, Docker를 사용하여 실습해보자. https://devfunny.tistory.com/429 docker로 Kafka, Zookeeper 설치 (with docker-compose) Docker 이미지 설치 1) Kafka 설치 docker pull wurstmeister/kafka 2) zookeeper 설치 docker pull wurstmeister/zookeeper docker-compose 파일 생성 1) docker-compose.yml 파일 생성 (local PC에 경로는 자유.. devfunny.tistory.com Mac Docker 설치 https://docs.docker.co..

    Read more
  • "책으로 공부하는 Apache Kafka" 아파치 카프카 (Apache Kafka) 아파치 카프카란, 대용량 또는 대규모 메시지 데이터를 빠르게 처리할 수 있도록 개발된 분산 메시징 플랫폼이다. 카프카는 각각의 애플리케이션끼리 연결하여 데이터를 처리하는 것이 아니라 한곳에 모아 처리할 수 있도록 중앙집중화했다. 카프카를 통해 데이터 스트림을 한 곳에서 실시간으로 관리할 수 있다. 카프카 내부에 데이터가 저장되는 파티션의 동작은 FIFO(First In First Out) 방식의 큐 자료구조와 유사하다. 프로듀서 (Producer) : 큐에 데이터를 보낸다. 컨슈머 (Consumer) : 큐에서 데이터를 가져간다. 카프카 특징 카프카를 통해 전달할 수 있는 데이터 포맷은 제한이 없다. 직렬화, 역직렬화를 ..

    Read more
  • 코틀린 함수 이름 명시 val list = listOf(1, 2, 3) println(list) // [1, 2, 3] 만약 (1; 2; 3) 처럼 원소 사이를 세미콜론(;)으로 구분하고 괄호로 리스트를 둘러싸고싶다면? (1; 2; 3) 코틀린은 이런 요구 사항을 처리할 수 있는 함수가 표준 라이브러리에 이미 들어있다. 코틀린이 지원하는 기능을 사용하지 않고 직접 구현해보자. 직접 구현하기 /* 이 함수는 어떤 타입의 값을 원소로 하는 컬렉션이든 처리할 수 있다. */ fun joinToString( collection: Collection, separator: String, prefix: String, postfix: String ): String { val result = StringBuilder(p..

    Read more
  • 코틀린에서의 컬렉션 코틀린은 자신만의 컬렉션 기능을 제공하지 않고, 자바 컬렉션을 활용한다. 코틀린에서는 변경 가능한(mutable) 컬렉션과 변경 불가능한(immutable) 컬렉션으로 구분하여 사용한다. Set 데이터 순서가 없으며, 중복이 불가능하다. 기본적으로 변경 불가능(immutable)하며, mutableSetOf(), hashSetOf(), linkedSetOf(), sortedSetOf()로 변경 가능한 Set 생성이 가능하다. fun main() { val set = hashSetOf(1, 7, 53) // 객체가 어떤 클래스에 속하는지 추측하기 println(set.javaClass) // Java의 getClass() } Map key와 value가 한 쌍의 데이터로 이루어진 컬렉션..

    Read more
  • throw 예외처리 코틀린의 예외 처리는 자바나 다른 언어의 예외 처리와 비슷하다. 코틀린에서의 throw 예외처리 특징을 알아보자. new 연산자를 사용하지 않아도 된다. fun main() { val i = 50 if (i !in 0.. 100) { // new 연산자를 사용하지 않아도 된다. throw IllegalArgumentException("exception : $i") } val percentage = exam(50) println(percentage) } throw는 식이다. 다른 식에 포함될 수 있다. fun main() { val percentage = exam(101) println(percentage) } fun exam(i: Int) { val percentage = if (i ..

    Read more
  • while, do~while Kotlin에서 while, do~while문 사용은 Java와 동일하다. 새로 추가된 기능도 없다. for루프 코틀린에는 자바의 for에 해당하는 요소가 없다. 이런 루프의 가장 흔한 용례인 초기값, 증가값, 최종값을 사용한 루프를 대신하기 위해 코틀린에서는 범위(range)를 사용한다. 범위는 기본저긍로 두 값으로 이뤄진 구간이다. 보통은 그 두 값은 정수 등의 숫자 타입의 값이며, .. 연산자로 시작 값과 끝 값을 연결해서 범위를 만든다. // 양 끝을 포함하는 구간 : 10까지 포함 val oneToTen = 1..10 어떤 범위에 속한 값을 일정한 순서로 이터레이션하는 경우를 수열(progression)이라고 부른다. 예제 fun fizzBuzz(i: Int) = w..

    Read more
  • enum enum은 class 앞에 있을때는 특별한 의미를 지니지만, 다른 곳에서는 이름에 사용할 수 있다. 이를 소프트 키워드(soft keyword)라고 부른다. enum class Color { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET; } 이름에 사용할 수 있다? 예를들어 class는 키워드다. class는 이름 자체로 사용할 수 없어서, class 라는 이름을 사용하려면 clazz 또는 aClass 등과 같이 사용해야한다. enum 예제 구현해보기 enum class Color2 ( val r: Int, val g: Int, val b: Int // 상수의 프로퍼티를 정의한다. ) { RED(255, 0, 0), ORANGE(255, 165, 0),..

    Read more
  • 클래스 선언 Kotlin은 기본적으로 public class가 생성된다. package _기본문법._4_클래스_프로퍼티 // default : public class `4_클래스`(val name: String) 프로퍼티 package _기본문법._4_클래스_프로퍼티 class `5_프로퍼티` ( val name: String, var isMarried: Boolean, ) 읽기 전용 프로퍼티 비공개 필드 필드를 읽는 단순한 공개 getter 를 만든다. val name: String, 쓸 수 있는 프로퍼티 비공개 필드 필드를 읽는 공개 getter 를 만든다. 필드를 쓰는 공개 setter 를 만든다. var isMarried: Boolean, getter 메서드를 직접 생성할 수 있다. package..

    Read more
  • 타입 추론 (Type Inference) 코를린은 변수 타입 생략이 가능하다. val answer = 42 // Type 생략 가능 val answer2 : Int = 42 // Type 명시 가능 변수 선언시 초기화를 함께 해주지 않는 경우, 타입을 명시해줘야한다. val answer3: Int // 초기화하지 않을시, 타입을 명시해줘야한다. nswer3 = 42 val - 변경이 불가능한 변수 (Immutable) val로 선언된 변수는 일단 초기화하고 나면, 재대입이 불가능하다. Java의 final 변수에 해당한다. // 변경 불가능한 함수 val a = 1 // a = 2 :변경이 불가능하다. val 참조 자체는 불변일지라도, 그 참조가 가리키는 객체의 내부 값은 변경이 가능하다. // val ..

    Read more
  • 코틀린 코드 맛보기 data class Person(val name: String, val age: Int? = null) fun main(args: Array) { val persons = listOf(Person("영희"), Person("철수", age = 29)) val oldest = persons.maxByOrNull {it.age ?: 0} println("나이가 가장 많은 사람 : $oldest") } JAVA 코드에 익숙해서 그런지, 코드가 눈에 잘 들어오지 않는다. 한줄 한줄 분석해보자. 아래의 내용들이 전부 이해는 되지 않지만, 책을 읽어가면서 내용들을 배울 때마다 아래 내용들에 포스팅 URL을 채워나갈 예정이다. property -> name, age Int? -> null이 될 수..

    Read more
  • Kotlin 첫 입문 프로젝트 생성 인텔리J 프로젝트 생성 : [File] - [New] - [Project...] Main 클래스 생성 Main.kt 잘못된 예제 (X) Java 와 동일하게 Main 클래스 안에 main 메서드를 두었다. class Main { fun main(args: Array) { print("hello world") } } 정상적인 예제 (O) Kotlin은 Main 클래스 외부에 main 메서드를 선언한다. class Main { } // 코틀린은 main 메서드를 클래스 외부에 생성한다. fun main(args: Array) { print("hello world") } 결과 hello world

    Read more
  • 문제 https://www.acmicpc.net/problem/2636 2636번: 치즈 첫째 줄에는 사각형 모양 판의 세로와 가로의 길이가 양의 정수로 주어진다. 세로와 가로의 길이는 최대 100이다. 판의 각 가로줄의 모양이 윗 줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진 www.acmicpc.net 풀이코드 package com.algorithm._00_._Current; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; /** * @Date 2022/05/04 * @URL https://www.acmicpc.net/problem/2636 */ public class A2636_치즈 { static int..

    Read more
  • 문제 https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 풀이코드 package com.algorithm._00_._Current; import java.util.Arrays; import java.util.Scanner; import java.util.stream.IntStream; /** * @Date 2022/04/14 * @URL https://www.acmicpc.net/problem/11399 */ public class A11399_ATM { static int N..

    Read more
  • Copyright 2024. GRAVITY all rights reserved