'프로그래밍/JAVA '에 해당되는 글 2건

RxJava는 Reactive java에서 이름을 따왔다.


Reactive programming(리액티브 프로그래밍) 패러다임을 자바에서 구현한 프로그래밍 라이브러리이다.


프로그래밍 패러다임에는 여러가지가 있는데 OOP(객체지향), Function(함수), Imperative(명령형) 등이 있다.


대체로 많은 프로그램들이 명령형 프로그래밍이라고 할 수 있고 여기에는 자바, 파이썬, C, Node.js등도 포함 되어 있다.

특정 언어라고 해서 한가지 프로그래밍 패러다임만 사용하는건 아니지만 특정 목적에 맞게 설계된 언어들이 있다.


여기에서 '패러다임(paradigm)'은 방법론 정도로 보면 된다.


여러가지 언어 중에서 자바는 OOP(Object Oriented Programming)라고 해서 객체지향형 프로그래밍의 대표 언어이고 Functional Programming(펑셔널 프로그래밍)을 대표하는건 파이썬, node.js등이라고 할 수 있다. 자바로 Reactive Programming을 해야할 일이 생겨서 이 라이브러리가 등장 하였다. 그리고 자바가 버젼이 올라가면서 여러가지 요즘 트렌드에 맞게 기술들이 추가 되어서 OOP기반이었던 자바가 Functional, Reactive 등의 프로그래밍 방법론으로도 개발이 가능하게 되었다.


리액티브란 외부에서 자극이 오고 그에 대해 반응 한다는 뜻이다. 


아래는 rxJava로 hello를 출력한 코드이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
import io.reactivex.Observable;
 
public class FirstExample {
    public void emit(){
        Observable.just("hello""rxjava2!!")
            .subscribe(System.out::println);
    }
    public static void main(String[] args) {
        FirstExample firstExample = new FirstExample();
        firstExample.emit();
    }
}
 
cs

코드를 잠깐 살펴보면 Observable와 .just()가 나오고 .subscribe()가 나오고 그 안으로 System.out::println이 들어가는 구조를 볼 수 있다.


Observer라는 것을 사용하는게 RxJava이다.


Function

Function은 쉽게 이야기 해서 제네릭으로 <기존타입, 리턴타입>을 받아서 .apply()를 하면 기존 타입의 연산 결과를 결과 타입으로 반환을 해준다.

소스코드는 아래와 같다.


1
2
3
4
5
6
7
8
9
10
import java.util.function.Function;
 
public class FunctionExample {
    public static void main(String[] args) {
        Function<String, Integer> function = str -> Integer.parseInt(str);
        Integer integer = function.apply("10");
        System.out.println(integer);
    }
}
 
cs


gradle로 빌드한 소스코드는 아래 repository에 올려 놓았다.

https://github.com/Kyeongrok/rxjava_helloworld/



Consumer(컨슈머)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Observable<Integer> source = Observable.create((ObservableEmitter<Integer> emitter) -> {
    emitter.onNext(100);
    emitter.onNext(200);
    emitter.onNext(300);
    emitter.onComplete();
 
});
 
// 람다 + 메소드 레퍼런스
source.subscribe(System.out::println);
 
// 그냥 코드
source.subscribe(new Consumer<Integer>() {
    @Override
    public void accept(Integer integer) throws Exception {
        System.out.println("result : " + integer);
    }
});
cs

컨슈머는 값을 받는 익명 void함수다.


위 코드 10번줄 처럼 한줄이면 끝나는 코드를 그냥 쓸려면 13~18 이렇게 길게 써야 한다.

'프로그래밍 > JAVA ' 카테고리의 다른 글

java paging class (자바 페이징 클래스)  (0) 2016.08.19
블로그 이미지

낭만가을

,

public class Page {

String name;// 이름

//user setting var

int itemTotalCount = 0; //아이템크기

int pageItemCount = 10; //페이지에 한번에 보여줄 아이템크기

int pageCount = 1; //페이지수 보여줄 개수

//user chioce var

int currentItem = 1; //현재 아이템 번호

public Page() {

}

public Page(String name) {

this.name=name;

}

public Page(String name, int itemTotalCount, int pageItemCount, int pageCount, int currentItem) {

setName(name);

setItemTotalCount(itemTotalCount);

setPageCount(pageCount);

setCurrentItem(currentItem);

}

public String getName() {

return name;

}

public Page setName(String name) {

this.name = name;

return this;

}

//아이템크기

public int getItemTotalCount() {

return itemTotalCount;

}

public Page setItemTotalCount(int itemTotalCount) {

if(itemTotalCount < 1){

itemTotalCount = 0;

}

this.itemTotalCount = itemTotalCount;

return this;

}

//페이지에 한번에 보여줄 아이템크기

public int getPageItemCount() {

return pageItemCount;

}

//페이지당 보여줄 아이템개수

public Page setPageItemCount(int pageItemCount) {

this.pageItemCount = pageItemCount;

return this;

}

//페이지수 보여줄 개수

public int getPageCount() {

return pageCount;

}

public Page setPageCount(int pageCount) {

this.pageCount = pageCount;

return this;

}

///////////////////////////settting

//현재 페이지 번호

public int getCurrentPage() {

int currentPage = (currentItem/pageItemCount) + ((currentItem%pageItemCount)>0?1:0); //현재위치 / 페이지에보여줄아이템수  + 나머지0이상있는경우 +1

int pageMax = getPageMax();

int pageMin = getPageMin();

if(currentPage>pageMax){

currentPage=pageMax;

}else if(currentPage < 1){

currentPage = pageMin;

}

return currentPage;

}

public Page setCurrentPage(int currentPage) {

currentItem = (pageItemCount*currentPage - 1) + 1; //바로전페이지로 이동후 +1로 아이템위치셋팅

int totalCont = getItemTotalCount();

if(currentItem>getItemTotalCount()){

currentItem = totalCont;

}else if(currentItem<1){

currentItem=0;

}

int pageMax = getPageMax();

int pageMin = getPageMin();

if(currentPage>pageMax){

currentPage=pageMax;

}else if(currentPage<1){

currentPage = pageMin;

}

return this;

}

//현재 아이템 번호

public int getCurrentItem() {

return currentItem;

}

public Page setCurrentItem(int currentItem) throws IllegalArgumentException {

if(currentItem>getItemTotalCount()){

throw new IllegalArgumentException("max over");

}

this.currentItem = currentItem;

return this;

}

//////auto------

// public int[] getPage() {

// return page;

// }

public int getPageMin() {

return 1;

}

public int getPageMax() {

int max = (itemTotalCount/pageItemCount) + ((itemTotalCount%pageItemCount)>0?1:0);

int pageMin = getPageMin();

if(max<1){

max = pageMin;

}

return max;

}

//현재 페이지의 아이템 최소값

public int getCurrentPageItemMin() {

return (getCurrentPage() - 1 ) * getPageItemCount() + 1; //전페이지 

}

//현재 페이지의 아이템 최대값

public int getCurrentPageItemMax() {

int itemTotatCount = getItemTotalCount();

int max = getCurrentPageItemMin()+ getPageItemCount() - 1;

if(max>itemTotatCount){

max = itemTotatCount;

}

return max;

}

//페이징 표시의   처음 페이지  값

public int getCurrentPageMin() {

int currentPage = getCurrentPage();

int currentPageMin = currentPage - (getPageCount() / 2);

if(currentPageMin < 1){

currentPageMin = 1;

}

return currentPageMin;

}

//페이징 표시의   최대 페이지  값

public int getCurrentPageMax() {

int pageMax = getPageMax();

int currentPageMin = getCurrentPageMin() + (getPageCount()) - 1;

if(currentPageMin>pageMax){

currentPageMin = pageMax;

}

return currentPageMin;

}

public void process(){

getName();

getItemTotalCount();

getPageItemCount();

getPageCount();

getCurrentPage();

getCurrentItem();

getPageMin();

getPageMax();

getCurrentPageMin();

getCurrentPageMax();

}


@Override

public String toString() {

process();

return "getName()=" + getName() + ", \r\n getItemTotalCount(총아이템수)="

+ getItemTotalCount() + ",\r\n getPageItemCount(한페이지당 표시 아이템수)="

+ getPageItemCount() + ",\r\n getPageCount(페이징쪽에 페이지표시 보여줄수)=" + getPageCount()

+ ",\r\n getCurrentPage(현재페이지)=" + getCurrentPage()

+ ",\r\n getCurrentItem(현재아이템위치)=" + getCurrentItem() + ",\r\n getPageMin()="

+ getPageMin() + ",\r\n getPageMax(마지막 페이지 번호)=" + getPageMax()

+ ",\r\n getCurrentPageMin(보여질페이지에 처음페이지 번호)=" + getCurrentPageMin()

+ ",\r\n getCurrentPageMax(보여질페이지에 마지막페이지 번호)=" + getCurrentPageMax()

+ ",\r\n getCurrentPageItemMin(현재페이지 처음 아이템 번호)=" + getCurrentPageItemMin()

+ ",\r\n getCurrentPageItemMax(현재페이지 마지막 아이템 번호)=" + getCurrentPageItemMax()

;

}

// public static void main(String[] args) {

// Page page = new Page();

// page.setItemTotalCount(94);//총개수

// //page.setPageCount(1); //페이지수 보여질수

// page.setPageItemCount(10);

// page.setCurrentPage(1);

// System.out.println(page);

// }

}

'프로그래밍 > JAVA ' 카테고리의 다른 글

Rxjava 는 무엇인가?  (0) 2018.06.13
블로그 이미지

낭만가을

,