Hello

Java 8

|

자바 8 변경점 요약

1. 람다 표현식(Lambda Expression)

  • 메소드를 간단하게 식으로 표현하는 방법

2. 함수적 인터페이스(Functional Interface)

  • Consumer
  • Supplier
  • Function
  • Operator
  • Predicate

3. 기본 메서드(Default Methods)

  • 인터페이스 구현(implements)시 해당 메소드를 구현하지 않으면, 실행되는 메소드
  • 인터페이스 -> 추상 클래스 -> 구현 클래스 구조에서 추상클래스에 구현하던 메소드를 인터페이스에 직접 구현 가능

4. 스트림(Streams)

  • 고전적인 loop 순환 방식을 추상화 시켜 보다 간결하고, 가독성 있게 코드 작성 가능
  • 병렬 처리 방식 지원

5. 날짜 시간 API 변경(Date/Time API Changes)

  • JSR-310
  • LocalDate > ZonedDate : 일자
  • LocalTime > ZonedTime : 시간
  • LocalDateTime > ZonedDateTime : 일시
  • Instant : 시점
  • Duration : 짧은 기간(시분초 단위)
  • Period : 기간(년월일 단위)

6. 기타

  • Optional
  • Comparator
  • WatchService

References

  • https://howtodoinjava.com/java-8-tutorial/

Java Functional Interface

|

자바 함수적 인터페이스

1. 함수적 인터페이스?

  • 어렴풋이 알던 내용 정리
  • java.util.function
  • 람다식 사용

2. 종류

1. Consumer

  • 매개값은 있고, 리턴값은 없다.
  • 매개값 -> Consumer
  • interface : accept(), andThen()
Consumer<String> c1 = t -> System.out.println(t + "8");
c1.accept("consumer");

c1.andThen(after -> {
    System.out.println("andThen");	
}).accept("consumer");

BiConsumer<String, String> c2 = (t, u) -> System.out.println(t + u);
c2.accept("consumer", "8");

DoubleConsumer dc = d -> System.out.println("consumer" + d);
dc.accept(8.0);

IntConsumer ic = i -> System.out.println("consumer" + i);
ic.accept(8);

LongConsumer lc = l -> System.out.println("consumer" + l);
lc.accept(8);

ObjDoubleConsumer<String> odc = (t, d) -> System.out.println(t + d);
odc.accept("consumer", 8.0);

ObjIntConsumer<String> oic = (t, i) -> System.out.println(t + i);
oic.accept("consumer", 8);

ObjLongConsumer<String> olc = (t, l) -> System.out.println(t + l);
olc.accept("consumer", 8);

2. Supplier

  • 매개값은 없고, 리턴값은 있다.
  • Supplier -> 리턴값
  • interface : get()
Supplier<String> supplier = () -> {
    return "1";
};
System.out.println("supplier" + supplier.get());

IntSupplier is = () -> {
    int a = (int) (Math.random() * 6) + 1;
    return a;
};
System.out.println("supplier" + is.getAsInt());

3. Function

  • 매개값도 있고, 리턴값도 있다. (매개값을 리턴값으로 매핑(형변환))
  • 매개값 -> Function -> 리턴값
  • interface : apply(), compose(), andThen()
Function<Integer, String> function = t -> {
    return "function" + t;
};

// compose (before function)
System.out.println(function.compose(t -> {
    return Integer.parseInt((String) t); 
}).apply("8"));

// andThen (after function)
System.out.println(function.andThen(f -> {
    return f + "andThen";
}).apply(8));

// apply
System.out.println(function.apply(8));

4. Operator

  • 매개값도 있고, 리턴값도 있다. (매개값을 연산하고 결과 리턴)
  • 매개값 -> Function -> 리턴값
// BiFunction 하위 인터페이스
// apply(), compose(), andThen()
BinaryOperator<String> bo = (l, r) -> {
    return l + r;
};
System.out.println(bo.apply("java", "8"));

// Function 하위 인터페이스
// apply(), compose(), andThen()
UnaryOperator<String> uo = t -> {
    return t + "8";
};
System.out.println(uo.apply("java"));

// 2개의 int 연산
IntBinaryOperator ibo = (l, r) -> {
    return l + r;
};
System.out.println("1 + 2 = " + ibo.applyAsInt(1, 2));

5. Predicate

  • 매개값은 있고, 리턴타입은 boolean (매개값 조사후 boolean 리턴)
  • 매개값 -> Function -> boolean
  • interface : test(), negate(), and(), or(), isEqual()
public static void main(String[] args) {
    Predicate<Example> examplePredicate = t -> {
        return t.getField().equals("java");
    };
    System.out.println(examplePredicate.test(new Example("java")));
    System.out.println(examplePredicate.test(new Example("")));
}

@Getter
@Setter
@ToString
@AllArgsConstructor
public class Example {
    private String field;
}

3. Reference

  • https://altongmon.tistory.com/245

윈도우10에서 우분투 사용하기(Windows 10 Bash)

|

윈도우10에서 우분투 사용하기(Windows 10 Bash)

Windows 10 Bash

  • 윈도우에서 Linux환경을 가상머신이나 컨테이너 없이 구동시켜주는 환경
  • 리눅스중 우분투를 기반으로 하고 있음
  • 실행 화면 AltText

설치 과정

  1. 윈도우 최신버전으로 업데이트
  2. 제어판 설정
    • 제어판 - 프로그램 - 프로그램 및 기능 - Windows 기능 켜기/끄기 - Linux용 Windows 하위 시스템 체크
  3. Bash 설치
    • cmd prompt 들어가서 bash 입력
    • 설치 진행

사용후 느낀 장단점

  • 장점
    • 왠만한 Linux 애플리케이션 실행 가능 (저 같은 경우 jekyll이 윈도우 환경을 지원하지 않아 이걸 사용해보기 위해 설치해서 사용했는데 별 무리 없이 사용 가능 했음)
    • SSH 연결 도구(putty 같은 프로그램 없이 bash shell에서 ssh 접속 환경 지원)
  • 단점
    • 복잡한 애플리케이션은 아직은 구동 불가능(Docker, Apache)
    • Bash에서 Windows파일 시스템은 접근 가능하지만 그 반대의 경우는 아직은 불가능

오픈소스 라이선스

|

오픈소스 라이선스

1. 오픈소스 라이선스란

  • 기본적으로 모든 SW는 저작권, 특허권, 상표권, 영업비밀등의 지적재산권에 의해 보호받고 라이선스에 의해 해당 SW의 사용, 복제, 배포, 수정권한등을 규정하고 있음
  • 오픈소스 라이선스란 오픈소스SW 개발자와 이용자간에 사용 방법 및 조건의 범위를 명시한 계약
  • 참고로 freeware != 오픈소스sw 이기 때문에 사용에 주의가 필요
  • 모든 오픈소스 라이선스는 기본적으로 사용자의 자유로운 사용, 수정, 배포를 보장
  • 하지만, 라이센스 종류별로 배포시 소스코드 공개여부, 상업적 이용 가능여부등 몇몇 부분의 차이점이 존재

2. 주요 오픈소스 라이선스 종류

2.1. GPL 2.0 License(GNU 일반 공중 라이선스)

  • 자유 소프트웨어 재단(OSF)에서 만든 자유 소프트웨어 라이선스
  • 미국의 리처드 스톨만(Richard Stallman)이 GNU-프로젝트로 배포된 프로그램의 라이선스로 사용하기 위해 작성
  • GPL 2.0 License는 자유 소프트웨어를 공유하고 수정할 수 있는 자유를 보장하기 위해 만들어짐
  • 수정한 소스코드 혹은 GPL 소스코드를 활용한 소프트웨어 모두 GPL로 공개 의무
  • 제약조건 : 상
  • Mozilla Firefox, Linux 커널, MariaDB, Wordpress, Git

2.2. LGPL 2.1 License

  • 라이브러리는 공유하되 개발된 제품에 대해서는 소스를 공개하지 않고 상용 SW 판매가 가능한 GPL 보다 완화된 라이선스
  • 본 라이선스는 GNU 라이브러리 일반 공중 라이선스 2.0의 후속판으로 간주되기 때문에 버전 번호를 2.1로 붙임
  • 수정한 소스코드 LGPL로 공개(단순 활용시 공개의무 없음)
  • 제약조건 : 중
  • Mozilla Firefox

2.3. MPL(Mozilla Public) License

  • 모질라 공중 라이선스(Mozilla Public License, MPL)는 오픈 소스와 자유 소프트웨어 라이선스
  • 1.0판은 넷스케이프 커뮤니케이션즈 코퍼레이션의 변호사로 일하고 있던 미첼 베이커에 의해 작성되었고, 1.1판은 모질라 재단이 작성
  • MPL은 변형 BSD 사용 라이선스와 GNU 일반 공중 사용 라이선스의 혼합적 성격을 띠고 있음
  • 수정한 소스코드 MPL로 공개(단순 활용시 공개의무 없음)
  • 제약조건 : 중
  • Mozilla Firefox, Mozilla Thunderbird

2.4. Apache License

  • 아파치 소프트웨어 재단 자체적으로 만든 라이선스
  • 소스코드에 대한 공개 의무 등의 의무사항은 없지만 아파치 라이선스의 소스코드를 수정하여 배포하는 경우 아파치 라이선스, 버전 2.0을 꼭 포함시켜야 하며 아파치 재단에서 만든 소프트웨어임을 밝혀야 함
  • 제약조건 : 하
  • Android, Hadoop

2.5. BSD(Berkeley Software Distribution) License

  • 버클리의 캘리포니아 대학에서 배포하는 공개 소프트웨어의 라이선스
  • BSD 라이선스의 경우에는 BSD 자체가 공공기관에서 만들어낸 것이므로 공공의 몫으로 돌려주자는 의미가 강하므로 라이선스 자체에는 아무런 제한 없이 누구나 자신의 용도로 사용할 수 있도록 만들어진 것으로 라이선스 및 저작권 표시 조건 외에 굉장히 자유로운 라이선스 중 하나
  • 제약조건 : 하
  • Nginx

2.6. MIT License

  • 미국 매사추세츠 공과대학교(MIT)에서 해당 대학의 소프트웨어 공학도들을 돕기 위해 개발한 라이선스
  • MIT 라이선스를 따르는 소프트웨어를 개조한 제품을 반드시 오픈 소스로 배포해야 한다는 규정이 없음
  • 제약조건 : 하
  • Bootstrap, Angular.js, Backbone,js, jQuery

2.7. Beerware License

  • 사용자가 원할경우 제작자에게 보답으로 맥주를 사주면 되는 이스터에그성 라이선스
  • 제약조건 : beer
  • 비슷한 라이선스로 careware, charityware, helpware, goodware등이 있다.

2.8. 이밖에 Eclipse License, Artistic License등 70여종에 다양한 종류의 오픈소스 라이선스들이 존재하기 때문에 모르는 라이선스는 사용전 어떤 라이선스인지에 대한 파악 필요

2. 요약

  • 복제,배포,수정가능
  • 보증의부인
  • 책임의제한
  • 배포시 라이선스사본 첨부
  • 저작권 고지사항 유지
  • 배포시 소스코드 공개 의무
  • 수정시 수정내용 고지
  • 이름,상표,상호에대한사용제한

3. Reference

  • https://olis.or.kr/
  • http://codenamu.org/2014/10/10/popular-opensource-license
  • https://namu.wiki/w/%EC%98%A4%ED%94%88%20%EC%86%8C%EC%8A%A4
  • 첨부 PDF파일

12_spark_streaming

|