week8_jubin - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

์ž๋ฐ” 8 ํŠน์ง•

Lambda expression

  • ํ•จ์ˆ˜ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ

Method references

  • ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์ด๋ฆ„์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ฐธ์กฐ. ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ

Default method

  • interface ๋Š” ๊ธฐ๋ณธ์ ์ธ method ์˜ ๊ตฌํ˜„์ฒด๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

New tools

  • ์ข…์†์„ฑ์„ ์ฐพ๊ธฐ ์œ„ํ•ด jdeps ์ฒ˜๋Ÿผ ์ƒˆ๋กœ์šด Complier tools ๊ณผ utility ๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค.

Stream API

- ํŒŒ์ดํ”„ ๋ผ์ธ ์ฒ˜๋ฆฌ๋ฅผ ์šฉ์ดํ•˜๊ฒŒํ•˜๋Š” ์ƒˆ๋กœ์šด ์ŠคํŠธ๋ฆผ API.

Date Time API

  • ํ–ฅ์ƒ๋œ ๋‚ ์งœ, ์‹œ๊ฐ„ API

Optional

  • ์ ์ ˆํ•˜๊ฒŒ Null ๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ตœ๊ณ ์˜ ๋ฐฉ๋ฒ•์— ์ค‘์ ์„ ๋‘”๋‹ค.

NaShorn, Javascript Engine

  • Javascript code ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ Java ๊ธฐ๋ฐ˜ ์—”์ง„

  1. ๋žŒ๋‹ค
  2. Method reference
  3. Stream API
  4. Optional

์ฐธ๊ณ  : https://jamcode.tistory.com/63

  1. ๋žŒ๋‹ค์™€ ์ธํ„ฐํŽ˜์ด์Šค

    ๋žŒ๋‹ค : java ์—์„œ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹

    ํด๋ž˜์Šค ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ํ•จ์ˆ˜ ํ˜ธ์ถœ๋งŒ์œผ๋กœ ๊ธฐ๋Šฅ ์ˆ˜ํ–‰ (๋‚ด๋ถ€ ์ต๋ช…๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค)

    ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€ ?

    : ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ํ˜ธ์ถœ, ๋งค๊ฐœ๋ณ€์ˆ˜๋งŒ ์ด์šฉํ•˜๋Š” ํ•จ์ˆ˜๋กœ ์™ธ๋ถ€์™€ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๊ฐ€ ์—†์Œ

    : ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๋“ฑ ์•ˆ์ •์ ์ธ ํ™•์žฅ์„ฑ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹

    str -> { System.out.println(str); }
    str -> System.out.println(str);
    x, y -> return x+y; // ์•ˆ๋จ
    x, y -> x+y; // ๋จ
    
    int max = (x, y) -> (x>=y)? x : y;

    ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค: ํ•œ ๊ฐœ์˜ ์ถ”์ƒ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ–๋Š” ์ธํ„ฐํŽ˜์ด์Šค ( default method ๊ฐ€๋Šฅ)

    package lambda;
    
    interface PrintLambda{
        void printMethod(String str);
    
    }
    
    public class labmdaPractice {
        public static void main(String[] args){
            PrintLambda test1 = t -> System.out.println(t); //๊ตฌํ˜„๋ถ€
    				test1.printMethod("print1");
    				
    				print2(test1); //๊ตฌํ˜„ ๋ถ€ ๋„˜๊ฒจ์คŒ
    				
    				PrintLambda test3 = print3();
    				test3.printMethod("print"); 
    
        }
    		
    		public static void print2(PrintLambeda test2){
    			test2.printMethod("print2");
    		}
    
    		public static PrintLambda print3(){
    			return s -> System.out.println( s +"3!!");
    		}
    }
  2. Method reference

์ฐธ๊ณ : https://imcts.github.io/java-method-reference/

๋ฉ”์„œ๋“œ ์ด๋ฆ„์œผ๋กœ ๋„˜๊ฒจ์ฃผ๋Š”๋ฐฉ๋ฒ•

ํด๋ž˜์Šค::์ธ์Šคํ„ด์Šค๋ฉ”์†Œ๋“œ

์ฒซ ๋ฒˆ์งธ ํ˜•ํƒœ์—์„œ๋Š” ์ฒซ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ฉ”์†Œ๋“œ์˜ ์ˆ˜์‹ ์ž๊ฐ€ ๋˜๊ณ , ๋‚˜๋จธ์ง€ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋กœ ์ „๋‹ฌ ๋ฉ๋‹ˆ๋‹ค.

ex) String::compareToIgnoreCase๋Š” (x, y) -> x.compareToIgnoreCase(y) ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํด๋ž˜์Šค::์ •์ ๋ฉ”์†Œ๋“œ

๋‘ ๋ฒˆ์งธ ํ˜•ํƒœ์—์„œ๋Š” ๋ชจ๋“  ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ •์  ๋ฉ”์†Œ๋“œ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

ex) Object::isNull์€ x -> Object.isNull(x) ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐ์ฒด::์ธ์Šคํ„ด์Šค๋ฉ”์†Œ๋“œ

์„ธ ๋ฒˆ์งธ ํ˜•ํƒœ์—์„œ๋Š” ์ฃผ์–ด์ง„ ๊ฐ์ฒด์—์„œ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ๋กœ ์ „๋‹ฌ ๋ฉ๋‹ˆ๋‹ค.

ex) System.out::println์€ x -> System.out.println(x)์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

3. ์ŠคํŠธ๋ฆผ API

  • ์ž๋ฃŒ ๋Œ€์ƒ๊ณผ ๊ด€๊ฒŒ์—†์ด ๋™์ผํ•œ ์—ฐ์‚ฐ ์ˆ˜ํ–‰

  • ํ•œ๋ฒˆ ์ƒ์„ฑํ•˜๊ณ  ๊ฐ€์šฉํ•œ ์ŠคํŠธ๋ฆผ ์‚ฌ์šฉ ๋ถˆ๊ฐ€

  • ์ผ๊ด€์„ฑ ์žˆ๋Š” ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ, ๋ฐฐ์—ด, ์ปฌ๋ ‰์…˜์— ๋™์ผํ•œ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋จ

  • ๊ธฐ์กด ์ž๋ฃŒ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค

  • ์ค‘๊ฐ„์—ฐ์‚ฐ/ ์ตœ์ข…์—ฐ์‚ฐ์œผ๋กœ ๊ตฌ๋ถ„๋จ

  • ์ตœ์ข…์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋˜์–ด์•ผ ๋ชจ๋“  ์—ฐ์‚ฐ ์ ์šฉ

    • ์ค‘๊ฐ„์—ฐ์‚ฐ?
      • filter(), map()

    ์ŠคํŠธ๋ฆผ์ƒ์„ฑ โ†’ ์ค‘๊ฐ„์—ฐ์‚ฐ โ†’ ์ตœ์ข…์—ฐ์‚ฐ

    sList.stream().filter(s->s.length() >= 5).forEach(s->System.out.println(s));
    // 
    customerList.stream().map( c -> c.getName() ).forEach(s->System.out.println(s));
  • ์ž๋ฃŒ๋ฅผ ์†Œ๋ชจํ•˜๋ฉด์„œ ์‚ฌ์šฉํ•จ. ์ตœ์ข…์—ฐ์‚ฐ ํ›„ ์žฌ์‚ฌ์šฉ ๋ถˆ๊ฐ€

Stream<String> stream = sList.stream();
stream.forEach(s->System.out.print(s+" "));

stream.filter() -> ์žฌ์‚ฌ์šฉ ๋ถˆ๊ฐ€
  • ์ตœ์ข…์—ฐ์‚ฐ
    • forEach

    • count

    • sum()

    • reduce()์—ฐ์‚ฐ : ์ง์ ‘ ์—ฐ์‚ฐ ์ง€์ • ๊ฐ€๋Šฅ

      Arrays.stream(arr).reduce(0, (a,b) -> a+b));
      0 : ์ดˆ๊ธฐ๊ฐ’
      a,b : ์ „๋‹ฌ์š”์†Œ
      a+b : ์ˆ˜ํ–‰์š”์†Œ

4. ์˜ต์…”๋„:

https://www.tutorialspoint.com/java8/java8_optional_class.htm

optional : http://homoefficio.github.io/2019/10/03/Java-Optional-๋ฐ”๋ฅด๊ฒŒ-์“ฐ๊ธฐ/

: isPresent()-get() ๋Œ€์‹  orElse() , orElseGet() , orElseThrow() ์“ฐ๊ธฐ

Optional<String> test = ...;
return test.orElse(null);

if(test.isPresent()){
// ใ„ดใ„ด
}

: optional๊ฐ์ฒด.OrElse(methodA) -- methodA๋Š” ์˜ต์…”๋„์ด ๋ญ๋˜ ๋ฌด์กฐ๊ฑด ์‹คํ–‰๋œ๋‹ค

: optional๊ฐ์ฒด.OrElseGet(Supplier) โ€” supplier ๋Š” ๊ฐ์ฒด์— ๊ฐ’์ด ์—†์„ ๋•Œ๋งŒ ์‹คํ–‰๋œ๋‹ค.

test.orElse(Collections.emptyList()); 
test.orElseGet(supplier);

: ๋‹จ์ˆœ ๊ฐ’ ํ™•์ธ์ด๋ผ๋ฉด Optional ๋ณด๋‹ค๋Š” ๋น„๊ต ๋กœ์ง์ด ๋‚ซ๋‹ค

return status != null ? status: READY;
return status != null ? status : Collections.emptyList();

:JPA ์—์„œ๋Š” ๋น„์–ด์žˆ๋Š” ์ปฌ๋ ‰์…˜์œผ๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋ฏ€๋กœ ์“ธ ํ•„์š”๊ฐ€ ์—†๋‹ค.

: ํ•„๋“œ๋กœ ์“ฐ๋Š” ๊ฒƒ์„ ์ง€์–‘ํ•œ๋‹ค

: ๋ฉ”์„œ๋“œ ์ธ์ž๋กœ ์“ฐ๋Š” ๊ฒƒ์„ ์ง€์–‘ํ•œ๋‹ค

: ofNull() ๊ณผ ofNullable()์ฐจ์ด

: 1. ๋„์ธ๊ฑธ ํ™•์‹ ํ•  ๋•Œ, 2. ๋„ ์ผ์ˆ˜๋„ ์žˆ์„ ๋•Œ

:Optional ๋Œ€์‹  OptionalInt ์‚ฌ์šฉ


์ž๋ฐ” ์ŠคํŠธ๋ง, ์ŠคํŠธ๋ง๋นŒ๋”, ์ŠคํŠธ๋ง๋ฒ„ํผ ์ฐจ์ด

image

  • concat ์ด๋‚˜ + ์“ฐ๋ฉด ๋‹ค๋ฅธ ์ฃผ์†Œ๊ฐ’ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋จ
String test1 = new String("hi");
String test2 = new String("ใ…Žใ…‡");

System.out.println(System.identityCode((test1));

test1 = test1.concat(test2); //or test1 = test1 += test2;

System.out.println(System.identityCode((test1)); //๋‹ค๋ฆ„

๋ฌธ์ž์—ด ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ ์‹œ ํž™์— GC๊ฐ€ ๊ด€๋ฆฌํ•ด์•ผ๋  ์ž„์‹œ ๊ฐ€๋น„์ง€๊ฐ€ ์ƒ์„ฑ ๋ผ ํž™๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์„ ์•ผ๊ธฐํ•จ

๊ตฌ์กฐ

  • String
final byte[] value;
  • StringBuilder / StringBuffer

    byte[] value

StringBuilder VS StringBuffer

  • String Builder:

    ๋™๊ธฐํ™” ์ง€์› ์•ˆํ•จ

  • String Buffer:

    ๋™๊ธฐํ™” ์ง€์›, thread safe

String: ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ด ์ ๊ณ  ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ์ผ ๊ฒฝ์šฐ

StringBuilder : ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ด ๋งŽ๊ณ  ๋‹จ์ผ์“ฐ๋ ˆ๋“œ์ผ ๊ฒฝ์šฐ

StringBuffer : ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ด ๋งŽ๊ณ  ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์ผ ๊ฒฝ์šฐ (synchronized ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)

StringBuffer -> String : toString() ์ด์šฉ

โš ๏ธ **GitHub.com Fallback** โš ๏ธ