본문 바로가기

분류 전체보기

(64)
[코틀린] 순수함수로 정의 될 수 있는 함수 순수함수를 한마디로 정의하면 부수효과가 발생하지 않는, 그래서 같은 매개변수 값으로 함수를 이용하면 항상 같은 값을 반환하는 함수를 의미한다. 여기서 말하는 부수효과는 뭘까? - 함수 외부의 다른 값을 변경하지 않는다. - 함수 내부에서 별도의 입출력이 발생하지 않는다. (파일, 데이터베이스, 네트워크 등) [랜덤 값이 발생하는 함수] fun some(a:Int):Int{ return (Math.random()*a.toInt() } 위의 함수는 매번 some(10)으로 호출하더라도 결과값이 매번 다르게 반환하므로 순수함수가 아니다. [파일 입출력이 발생하는 함수] fun some1(a:String):Boolean{ try{ val file = File("a.txt") val out = FileWriter..
[코틀린] 함수형 프로그래밍이란? 현대의 프로그래밍 언어에서 함수형 프로그래밍은 중요한 이슈 중 하나이다. 코틀린도 마찬가지로 함수형 프로그래밍(Functional Programming, 약어로 FP)을 위한 많은 기법을 제공한다. 일단, 함수형 프로그래밍이란 일종의 프로그래밍 패러다임이다. 소프트웨어 개발 패러다임의 역사가 절차지향에서 객체지향으로 변화했듯이 요즘에는 함수형 프로그래밍이 떠오르고 있다. 각 프로그래밍 패러다임을 아래와 같이 정리할 수 있다. * 절차지향 프로그래밍 - 알고리즘과 로직 중심으로 문제 해결이 주목적 (ex c, pascal) * 객체지향 프로그래밍 - 클래스 선언이 최우선, 데이터와 데이터를 처리할 메서드를 하나로 묶어 객체로 만들고 객체를 조합해서 프로그래밍을 작성 객체를 만들기 위한 추상화, 캡슐화, 상..
[RxJava] ConnectableObservable 클래스 이전에 Observable의 수많은 변형을 다루었다. 주어진 데이터를 발행하기위해 just()나 fromArray() 함수를 사용할 때도 있었고 PublishSubject, AsyncSubject 클래스 등 처럼 Observable이면서 옵서버도 되는 Subject 클래스도 살펴봤다. 이번에 살펴볼 ConnectableObservable 클래스는 Subject 클래스처럼 차가운 Observable을 뜨거운 Observable로 변환한다. Observable을 여러 구독자에게 공유할 수 있으므로 원 데이터 하나를 여러 구독자에게 동시에 전달할 때 사용한다. 특이한 점은 subscribe() 함수를 호출해도 아무 동작이 일어나지 않는다는 점이다. 그럼 어떻게 발행해?? 바로 connect() 함수를 호출한 ..
[RxJava] 데이터 발행자와 수신자 지금까지 Observable을 살펴보면서 다양한 용어를 새롭게 배웠다. 처음 공부하기 때문에 좀 헷갈려서 간단한 기준으로 분류하려고한다. 크게 데이터를 발행하는 쪽과 데이터를 수신하는 쪽으로 나눌 수 있다. 데이터 발행자(data source) 데이터 수신자 Observable 구독자(Subscriber) Single 옵서버(Observer) Maybe 소비자(Consumer) Subject Completable 데이터 발행자는 클래스의 개념이기에 명확하게 구분된다. 하지만, 데이터 수신자는 몇 가지 용어를 번갈아 가면서 사용하므로 개념이 명확히 구분이 되지 않는다. 1. 구독자 - RxJava에서 Observable을 연결할 때는 subscribe() 함수를 호출한다. 이 과정이 구독이므로 구독자가 된..
[RxJava] Subject 클래스 - ReplaySubject 클래스 마지막으로 소개할 ReplaySubject 클래스는 가장 특이하고, 사용할 때 주의해야하는 클래스이다. Subject 클래스의 목적은 뜨거운 Observable을 활용하는 것인데, ReplaySubject 클래스는 차가운 Observable처럼 동작하기 때문이다. ReplaySubject 클래스는 구독자가 새로 생기면 항상 데이터의 처음부터 끝까지 발행하는 것을 보장한다. 마치 테이프로 전체 내용을 녹음해두었다가 새로운 사람이 들어오면 정해진 음악을 처음부터 들려주는 것 처럼 말이다. 그렇기에 모든 데이터 내용을 저장해두는 과정 중 메모리 누수가 발생할 가능성을 염두해두고 사용할 때 주의해야한다. 아래그림은 ReplaySubject 마블 다이어그램이다. 첫번째 구독자가 subscribe() 함수를 호출하..
[RxJava] Subject 클래스 - PublishSubject 클래스 PublishSubject 클래스는 Subject 클래스 중 가장 평범한 클래스이다. 구독자가 subscribe() 함수를 호출하면 값을 발행하기 시작한다. AsyncSubject 클래스처럼 마지막 값만 발행하거나 BehaviorSubject 클래스처럼 발행한 값이 없을 때 기본값을 대신 발행하지도 않는다. 오직 해당 시간에 발생한 데이터를 그대로 구독자에게 전달받는다. 아래 그림은 PublishSubject의 마블 다이어그램이다. 첫번째 구독자가 subscribe()를 하게 되면 '빨간색 원'과 '초록색 원' 데이터를 발행하게 된다. 두번째 구독자가 subscribe()를 하게 되면 '파란색 원' 데이터를 발행하게 되고 완료가된다. 즉, 첫번째 구독자는 Subject 클래스가 발행한 '빨간색 원', '..
[RxJava] Subject 클래스 - BehaviorSubject 클래스 이전 글에서 Subject 클래스의 기본과 AsyncSubject 클래스에 대해서 다뤘다. 이번 글에서는 BehaviorSubject 클래스에 대해서 알아보도록 하자. BehaviorSubject는 (구독자가) 구독을 하면 가장 최근 값 혹은 기본값을 넘겨주는 클래스이다. 예를 들어서, 온도 센서에서 값을 받아온다면 가장 최근 온도 값을 받아오는 동작을 구현할 수 있다. 또한 온도를 처음 얻을 때는 초깃값(예를 들어 0)을 반환하기도 한다. BehaviorSubject의 마블 다이어그램은 위와 같은 그림으로 표현된다. 여기서 '핑크색 원'은 BehaviorSubject 클래스를 생성할 때 넘긴 초깃값이 된다. 첫번째 구독자는 초깃값인 '핑크색 원'을 받고 다음에 '빨간색 원'부터 수신하게 된다. 두번째 ..
[안드로이드 기본] 그리드뷰 사용방법 그리드뷰는 격자모양으로 아이템을 배치할 수 있는 컨테이너이다. 일반적으로, 이미지를 격자모양으로 배치할 때 사용을 주로 하지만, 텍스트와 더불어 버튼까지도 배치하는 것이 가능하다. 그리드뷰는 뷰 그룹이기때문에 최상단에 올 수가 있다. [activity_main.xml] 그리드뷰는 위의 코드와 같이 선언한다. 여기서 제일 중요한 부분은 numColumns 속성인데, 한줄에 5개의 아이템이 들어가는 속성이다. 그리드뷰는 각각의 아이템을 그려주기 위해서 어댑터 클래스를 사용해야한다. 어댑터는 데이터를 매칭시켜주는 역할을 한다. 나는 ImageAdapter를 만들어서 그리드뷰에 설정해주었다. [ImageAdapter.kt] package com.practice.demogridview import android...