반응형

분류 전체보기 303

코틀린 4편 (람다 Lamda)

1. 람다(Lamda) fun main() { println(square(2)) println(square2(2)) println(printNameAndAge("taein", 30)) } val square : (Int) -> (Int) = { number -> number * number} val square2 = { number : Int -> number * number} val printNameAndAge = { name : String, age : Int -> "name : ${name}, age : ${age}" } 출력 결과 square 변수는 (Int) -> (Int) 라는 변수 타입과 반환값 타입을 정의해 주었습니다. square2는 블럭 안에서 변수에 대한 타입만 정의해 주었습니다. p..

코틀린 2020.11.11

코틀린 3편 (클래스 생성자와 상속)

1. 클래스 파일명 코틀린은 자바와 다르게 파일명과 클래스 이름이 달라도 컴파일이 됩니다. 2. 클래스 생성과 멤버 변수, 메서드 fun main() { val person = Person() println("name is ${person.name}") val person2 = Person2() person2.eatNoddle() } // 멤버 변수 class Person { val name = "taein" } // 메서드 class Person2 { fun eatNoddle() { println("Yummy~~") } } 출력 결과 코틀린은 자바와 다르게, 객체 생성을 위해서 'new' 키워드를 사용하지 않습니다. 멤버 변수, 메서드는 위와 같이 사용 합니다. 2. 클래스의 생성자 class Pers..

코틀린 2020.11.10

코틀린 2편

1. Array fun arrayExp() { val array : Array = arrayOf(1, 2, 3) val array2 : Array = arrayOf(1, "d", 3.4f) array[0] = 3 } Array는 사이즈가 고정되어 있습니다. 따라서 메모리가 이미 할당이 되면서 초기화가 이루어 집니다. 원소값이 모두 Int 형이기 때문에, 제네릭 타입이 Int 입니다. array2는 원소 타입이 다양하므로 제네릭 타입으로 Any가 쓰였습니다. 2. List fun listExp() { val list : List = listOf(1, 2, 3) val list2 : List = listOf(1, "d", 11L) var result : Int = list.get(0) val arrayLis..

코틀린 2020.11.10

상속과 다형성 3(Program to interface)

1. 인터페이스에 대고 프로그래밍 하기(Program to interface) 객체 지향의 유명한 규칙 중 다음과 같은 규칙이 있습니다. "인터페이스에 대고 프로그래밍 하기(program to interface)" 즉, 이 말은 실제 구현을 제공하는 콘크르티 클래스(구현 클래스)를 사용해서 프로그래밍 하지 말고, 기능을 정의한 인터페이스를 사용해서 프로그래밍하라는 뜻 입니다. 그런데, 인터페이스는 최초 설계에서 바로 도출되기 보다는, 요구 사항의 변화와 함께 점진적으로 도출이 됩니다. 상속과 다형성 2(추상 타입을 이용한 구현 교체의 유연함) 상속과 다형성 1 객체 지향이 주는 장점은 구현 변경의 유연함 입니다. 객체는 캡슐화를 통해서 객체를 사용하는 다른 코드에 영향을 최소화 하면서 객체의 내부 구현을..

Java 2020.11.07

상속과 다형성 2(추상 타입을 이용한 구현 교체의 유연함)

상속과 다형성 1 객체 지향이 주는 장점은 구현 변경의 유연함 입니다. 객체는 캡슐화를 통해서 객체를 사용하는 다른 코드에 영향을 최소화 하면서 객체의 내부 구현을 변경할 수 있는 유연함을 얻을 수 있습니 coding-food-court.tistory.com 1. 추상 타입을 이용한 구현 교체의 유연함 public class FlowController { public void process() { FileDataReader reader = new FileDataReader(); byte[] data = reader.read(); Encryptor encryptor = new Encryptor(); byte[] encryptedData = encryptor.encrypt(data); FileDataWrit..

Java 2020.11.05

상속과 다형성 1

객체 지향이 주는 장점은 구현 변경의 유연함 입니다. 객체는 캡슐화를 통해서 객체를 사용하는 다른 코드에 영향을 최소화 하면서 객체의 내부 구현을 변경할 수 있는 유연함을 얻을 수 있습니다. 유연함을 얻을 수 있도록 해주는 또 다른 방법은 추상화에 있습니다. 추상화를 가능하게 해주는 다형성에 대해서 알아보겠습니다. 1. 다형성(Polymorphism) 다형성(Polymorphism)은 한 객체가 여러 가지(poly) 모습(morph)을 갖는다는 것을 의미 합니다. 여기서 모습은 타입을 의미 합니다. 따라서, 다형성이란 한 객체가 여러 타입을 가질 수 있다는 것을 의미 합니다. 여기서, 객체를 타입A로도 사용할 수 있고, 타입B로도 사용할 수 있고, 타입C로도 사용할 수 있습니다. 타입 상속은 크게 인터페..

Java 2020.11.04

리액티브 프로그래밍 (Reactive Programming) RxJava

1. 리액티브 프로그래밍 리액티브 프로그래밍은 데이터 흐름을 먼저 정의하고 데이터가 변경되었을 때 연관되는 함수나 수식에 의해서 업데이트되는 방식 입니다. 리액티브 연산자를 활용하여 함수형 프로그래밍 방식으로 스레드에 안전한 비동기 프로그래밍 방식 입니다. 2. 명령형 프로그래밍 vs 리액티브 프로그래밍 명령형 프로그래밍 : 어떤 기능을 직접 실행 하여, 데이터를 새로 계산하는 당겨오는 방식 입니다. (pull 방식) 리액티브 프로그래밍 : 어떤 기능을 직접 실행 하는 것이 아니라, 시스템에 어떤 이벤트가 발생했을 때 처리하는 방식 입니다. (push 방식) 3. 엑셀 프로그램 리액티브 프로그래밍의 예시로 엑셀(Excel)이 있습니다. 각 셀에 매출을 입력하여, 1월 ~ 5월 까지의 합계를 계산 합니다...

Reactive Programing 2020.11.01

Java API를 RxJava와 통합 하는 방법

1. Observable.fromCallable() Java의 Callable을 통합하기 위해서 Observable.fromCallable을 사용할수 있습니다. Observable.fromCallable(() -> someOperation()) .subscribeOn(Schedulers.io()) 2. Observable.fromFuture() Java의 Future을 통합하기 위해서 Observable.fromFuture을 사용할수 있습니다. Observable.fromFuture(new FutureTask(() -> longRunningOperation())) 3. Emitter(이미터) 인터페이스 사용 Emitter(이미터) 인터페이스를 사용하여 아이템 방출을 수동적으로 제어 할수 있습니다. .on..

Reactive Programing 2020.10.31

Flowable 배압(BackPressure) 대응

Flowable은 Observable과 사용 방식은 같습니다. 또한, Flowable과 Observable을 사이의 호환도 toObservable(), toFlowable() 함수를 지원합니다. Flowable은 RxJava 2.x 부터 새롭게 도입된 클래스 입니다.그러면 Observable과 Flowable의 차이점은 무엇 일까요? 1. subscribeOn() subscribeOn() 함수는 Observable에서 구독자가 subscribe() 함수를 호출했을 때 데이터 흐름을 발행하는 스레드를 지정 합니다. static void sleep(long millseconds) { try{ Thread.sleep(millseconds); }catch (InterruptedException ex){ ex.p..

Reactive Programing 2020.10.30

점수가 비슷한 학생들 끼리 조편성 알고리즘

1. 문제 학생들의 점수 목록이 배열로 주어진다. 그리고 k개 그룹으로 학생들을 묶을려고 합니다. 이때, 그룹별로 학생들의 점수 차이가 비슷 한 학생들 끼리 묶을려고 합니다. 그룹들의 점수가 가장 높은 친구의 점수와 가장 낮은 점수 차이들의 합이 최소값을 출력 하시오. 학생들의 점수 배열은 오름차순으로 정렬되어 입력 됩니다. 입력 점수 배열 입력 조 그룹 인원 출력 {1, 3, 7, 8, 10, 15} 3 5 {1, 2, 12, 14, 15} 2 4 2. 접근 1. 점수 목록 배열을 가지고 구간 별 차이를 구합니다. 2. 구간 차이가 작을수록 같은 그룹이 될 확률이 높습니다. 3. 구간 차이가 크면 다른 그룹으로 분리 시켜야할 기준이 됩니다. 3. 구간 차이 배열에서 값이 가장 큰 순서대로 k개를 뽑습니..

Algorithm 2020.10.29
반응형