Amenable
Amenable's Blog
Amenable
  • λΆ„λ₯˜ 전체보기 (189)
    • πŸ“‚ JAVA (87)
      • μ΄νŽ™ν‹°λΈŒ μžλ°” (65)
      • μ£Όμš” κ°œλ… (22)
    • πŸ“‚ 개발 μ„œμ  (22)
      • μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨Έ (1)
      • 객체지ν–₯의 사싀과 μ˜€ν•΄ (2)
      • 클린 μ½”λ“œ (8)
      • ν•¨κ»˜ 자라기 (1)
      • 그림으둜 λ°°μš°λŠ” HTTP&Network Basic (10)
    • πŸ“‚ λ°μ΄ν„°λ² μ΄μŠ€ (8)
      • κ°œλ… (8)
      • λ¬Έμ œν’€μ΄ (0)
    • πŸ“‚ λ„€νŠΈμ›Œν¬ (14)
      • κ°œλ… (6)
      • 성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리 (8)
    • πŸ“‚ μŠ€ν”„λ§ (13)
      • κΈ°λ³Έ κ°œλ… (13)
    • πŸ“‚ WEB (5)
    • πŸ“‚ 자료ꡬ쑰 (12)
      • κ°œλ… (2)
      • μ •λ ¬ (8)
      • 트리 (2)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜ (10)
      • μ΅œμ†Œμ‹ μž₯트리 (2)
      • μ΅œλ‹¨ 경둜 (2)
      • λ¬Έμžμ—΄ (2)
      • ETC (4)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜_λ¬Έμ œν’€μ΄ (4)
      • BOJ_λ°±μ€€ (4)
    • πŸ“‚ ν”„λ‘œκ·Έλž˜λ° (3)
    • πŸ“‚ DevOps (2)
      • 배포 (2)
    • πŸ“‚ ν›„κΈ° (8)
      • μš°μ•„ν•œ ν…Œν¬μ½”μŠ€(ν”„λ¦¬μ½”μŠ€) (4)
      • 2023λ…„ (3)
      • 2024λ…„ (1)
    • πŸ“‚ 회고 (1)
      • 2023λ…„ (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸš€ GitHub

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
Amenable
πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”

μŠ€νŠΈλ¦Όμ€ μ£Όμ˜ν•΄μ„œ μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ45)]

μŠ€νŠΈλ¦Όμ€ μ£Όμ˜ν•΄μ„œ μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ45)]
πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”

μŠ€νŠΈλ¦Όμ€ μ£Όμ˜ν•΄μ„œ μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ45)]

2023. 12. 9. 11:48

πŸ“™ 1. 슀트림의 νŠΉμ§•

  λ‹€λŸ‰μ˜ 데이터 처리 μž‘μ—…(μˆœμ°¨μ μ΄λ“  병렬적이든)을 λ•κ³ μž μžλ°” 8에 슀트림 APIκ°€ μΆ”κ°€λ˜μ—ˆλ‹€. 슀트림의 νŠΉμ§•μ€ μ•„λž˜μ™€ κ°™λ‹€.

  1. 슀트림 μ•ˆμ˜ 데이터 μ›μ†Œλ“€μ€ 객체 μ°Έμ‘°λ‚˜ κΈ°λ³Έ νƒ€μž… κ°’(int, long, double)이닀.
  2. 슀트림 νŒŒμ΄ν”„λΌμΈμ€ μ†ŒμŠ€ μŠ€νŠΈλ¦Όμ—μ„œ μ‹œμž‘ν•΄ 쒅단 μ—°μ‚°(terminal operation)으둜 λλ‚˜λ©°, κ·Έ 사이에 ν•˜λ‚˜ μ΄μƒμ˜ 쀑간 μ—°μ‚°(intermediate operation)이 μžˆμ„ 수 μžˆλ‹€.
      각 쀑간 연산은 μŠ€νŠΈλ¦Όμ„ μ–΄λ– ν•œ λ°©μ‹μœΌλ‘œ λ³€ν™˜ν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, 각 μ›μ†Œμ— ν•¨μˆ˜λ₯Ό μ μš©ν•˜κ±°λ‚˜ νŠΉμ • 쑰건을 만쑱 λͺ»ν•˜λŠ” μ›μ†Œλ₯Ό κ±ΈλŸ¬λ‚Ό 수 μžˆλ‹€.
  3. 슀트림 νŒŒμ΄ν”„λΌμΈμ€ μ§€μ—° 평가(lazy evaluation)λœλ‹€.
      ν‰κ°€λŠ” 쒅단 연산이 호좜될 λ•Œ 이뀄지며, 쒅단 연산에 쓰이지 μ•ŠλŠ” 데이터 μ›μ†ŒλŠ” 계산에 쓰지이 μ•ŠλŠ”λ‹€. μ΄λŸ¬ν•œ μ§€μ—° 평가가 λ¬΄ν•œ μŠ€νŠΈλ¦Όμ„ λ‹€λ£° 수 있게 ν•΄μ£ΌλŠ” μ—΄μ‡ λ‹€.
  4. 슀트림 APIλŠ” λ©”μ„œλ“œ 연쇄λ₯Ό μ§€μ›ν•˜λŠ” ν”Œλ£¨μ–ΈνŠΈ API(fluent API)λ‹€.
      νŒŒμ΄ν”„λΌμΈ ν•˜λ‚˜λ₯Ό κ΅¬μ„±ν•˜λŠ” λͺ¨λ“  ν˜ΈμΆœμ„ μ—°κ²°ν•˜μ—¬ 단 ν•˜λ‚˜μ˜ ν‘œν˜„μ‹μœΌλ‘œ μ™„μ„±ν•  수 μžˆλ‹€.
  5. 기본적으둜 슀트림 νŒŒμ΄ν”„λΌμΈμ€ 순차적으둜 μ§„ν–‰λœλ‹€.

 

  μœ„μ—μ„œ μ‚΄νŽ΄λ³Έ κ²ƒμ²˜λŸΌ μŠ€νŠΈλ¦Όμ€ 맀우 λ‹€μ–‘ν•œ κΈ°λŠ₯듀을 μ œκ³΅ν•œλ‹€. 슀트림 APIλ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  계산을 ν•΄λ‚Ό 수 μžˆλ‹€.

  ν•˜μ§€λ§Œ, μŠ€νŠΈλ¦Όμ„ 잘λͺ» μ‚¬μš©ν•˜λ©΄ 였히렀 읽기 μ–΄λ ΅κ³  μœ μ§€λ³΄μˆ˜λ„ νž˜λ“€μ–΄μ§„λ‹€. (μ–΅μ§€λ‘œ μŠ€νŠΈλ¦Όμ„ μ‚¬μš©ν–ˆλ˜ μ½”λ“œκ°€ λ„ˆλ¬΄ λ³΅μž‘ν•˜μ—¬ λ‹€μ‹œ 반볡문으둜 λ³€κ²½ν–ˆλ˜ 기얡이 μžˆλ‹€.)

  이번 글을 톡해 슀트림과 반볡문 쀑 μ–Έμ œ μ–΄λ– ν•œ 것을 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”μ§€ ν•œλ²ˆ μ‚΄νŽ΄λ³΄λ„λ‘ ν•˜μž.

 

πŸ“™ 2. 슀트림과 λ°˜λ³΅μ— λŒ€ν•΄μ„œ μ°Έκ³ ν• λ§Œν•œ μ§€μΉ¨

  슀트림 νŒŒμ΄ν”„λΌμΈμ€ λ˜ν’€μ΄λ˜λŠ” 계산을 ν•¨μˆ˜ 객체(주둜 λžŒλ‹€λ‚˜ λ©”μ„œλ“œ μ°Έμ‘°)둜 ν‘œν˜„ν•œλ‹€. 반면 반볡 μ½”λ“œμ—μ„œλŠ” μ½”λ“œ 블둝을 μ‚¬μš©ν•΄ ν‘œν˜„ν•œλ‹€.

  μŠ€νŠΈλ¦Όμ—μ„œ 반볡문으둜, λ°˜λ³΅λ¬Έμ—μ„œ 슀트림으둜 λ³€κ²½ν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ, μ•„λž˜μ™€ 같이 ν•¨μˆ˜ κ°μ²΄λ‘œλŠ” ν•  수 μ—†μ§€λ§Œ μ½”λ“œ λΈ”λ‘μœΌλ‘œλŠ” ν•  수 μžˆλŠ” 것듀이 μžˆλ‹€.

  • μ½”λ“œ λΈ”λ‘μ—μ„œλŠ” λ²”μœ„ μ•ˆμ˜ μ§€μ—­λ³€μˆ˜λ₯Ό 읽고 μˆ˜μ •ν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ λžŒλ‹€μ—μ„œλŠ” finalμ΄κ±°λ‚˜ 사싀상 final인 λ³€μˆ˜λ§Œ 읽을 수 있고, μ§€μ—­λ³€μˆ˜λ₯Ό μˆ˜μ •ν•˜λŠ” 건 λΆˆκ°€λŠ₯ν•˜λ‹€.
  • μ½”λ“œ λΈ”λ‘μ—μ„œλŠ” return 문을 μ‚¬μš©ν•΄ λ©”μ„œλ“œμ—μ„œ λΉ μ Έλ‚˜κ°€κ±°λ‚˜, breakλ‚˜ continue 문으둜 블둝 λ°”κΉ₯의 λ°˜λ³΅λ¬Έμ„ μ’…λ£Œν•˜κ±°λ‚˜ λ°˜λ³΅μ„ ν•œ 번 κ±΄λ„ˆλ›Έ 수 μžˆλ‹€. γ…λ˜ν•œ, λ©”μ„œλ“œ 선언에 λͺ…μ‹œλœ 검사 μ˜ˆμ™Έλ₯Ό 던질 수 μžˆλ‹€. ν•˜μ§€λ§Œ λž€λ‹€λ‘œλŠ” 이 쀑 μ–΄λ–€ 것도 ν•  수 μ—†λ‹€.

 

  λ°˜λ³΅λ¬Έλ³΄λ‹€ μŠ€νŠΈλ¦Όμ— λ”μš± μ•Œλ§žμ€ 상황은 λ‹€μŒκ³Ό κ°™λ‹€.

  • μ›μ†Œλ“€μ˜ μ‹œν€€μŠ€λ₯Ό μΌκ΄€λ˜κ²Œ λ³€ν™˜ν•œλ‹€.
  • μ›μ†Œλ“€μ˜ μ‹œν€€μŠ€λ₯Ό ν•„ν„°λ§ν•œλ‹€.
  • μ›μ†Œλ“€μ˜ μ‹œν€€μŠ€λ₯Ό ν•˜λ‚˜μ˜ 연산을 μ‚¬μš©ν•΄ κ²°ν•©ν•œλ‹€. (λ”ν•˜κΈ°, μ—°κ²°ν•˜κΈ°, μ΅œμ†Ÿκ°’ κ΅¬ν•˜κΈ° λ“±)
  • μ›μ†Œλ“€μ˜ μ‹œν€€μŠ€λ₯Ό 컬렉터에 λͺ¨μ€λ‹€. (μ•„λ§ˆλ„ κ³΅ν†΅λœ 속성을 κΈ°μ€€μœΌλ‘œ λ¬Άμ–΄κ°€λ©°)
  • μ›μ†Œλ“€μ˜ μ‹œν€€μŠ€μ—μ„œ νŠΉμ • 쑰건을 λ§Œμ‘±ν•˜λŠ” μ›μ†Œλ₯Ό μ°ΎλŠ”λ‹€.

 

πŸ“™ 3. 슀트림으둜 μ²˜λ¦¬ν•˜κΈ° μ–΄λ €μš΄ 경우

  슀트림으둜 μ²˜λ¦¬ν•˜κΈ° μ–΄λ €μš΄ 상황과 그에 λŒ€ν•œ 해결책에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž.

  λŒ€ν‘œμ μΈ μƒν™©μœΌλ‘œλŠ”, ν•œ 데이터가 νŒŒμ΄ν”„λΌμΈμ˜ μ—¬λŸ¬ 단계(stage)λ₯Ό 톡과할 λ•Œ 이 λ°μ΄ν„°μ˜ 각 λ‹¨κ³„μ—μ„œμ˜ 값듀에 λ™μ‹œμ— μ ‘κ·Όν•˜κΈ° μ–΄λ €μš΄ κ²½μš°λ‹€. κ°„λ‹¨ν•˜κ²Œ λ§ν•˜λ©΄, 이미 μ§€λ‚˜μΉœ 단계에 λŒ€ν•΄μ„œ κ·Έ 값에 μ ‘κ·Όν•˜κΈ° μ–΄λ ΅λ‹€λŠ” 것이닀.

  ν•΄κ²°μ±…μœΌλ‘œλŠ” μ•ž λ‹¨κ³„μ˜ 값이 ν•„μš”ν•  λ•Œ 맀핑을 거꾸둜 μˆ˜ν–‰ν•˜λŠ” 방법이 μžˆλ‹€. (쀑간 값듀을 μ €μž₯ν•˜λŠ” 방법이 있긴 ν•˜μ§€λ§Œ 그리 μ μ ˆν•œ 방법은 μ•„λ‹ˆλ‹€.)

 

  λ‹€μŒκ³Ό 같이 처음 5개의 λ©”λ₯΄μ„Ό μ†Œμˆ˜(Mersenne prime)λ₯Ό 좜λ ₯ν•œλ‹€κ³  ν•΄λ³΄μž. λ©”λ₯΄μ„Ό μˆ˜λŠ” 2^p - 1의 ν˜•νƒœμ˜ μˆ˜λ‹€. λ©”λ₯΄μ„Ό μ†Œμˆ˜λž€ pκ°€ μ†Œμˆ˜μ΄λ©΄ ν•΄λ‹Ή λ©”λ₯΄μ„Ό μˆ˜λ„ μ†Œμˆ˜μΌ μˆ˜ μžˆλ‹€λŠ” κ²ƒμ΄λ‹€.

private static final int COUNT = 5;

public static void main(String[] args) {

    primes().map(p -> TWO.pow(p.intValueExact()).subtract(ONE))
            .filter(mersenne -> mersenne.isProbablePrime(50))
            .limit(COUNT)
            .forEach(System.out::println);
    // κ²°κ³Όκ°’
    // 3 
    // 7 
    // 31 
    // 127 
    // 8191
}

static Stream<BigInteger> primes() {
    return Stream.iterate(TWO, BigInteger::nextProbablePrime);
}

  λ§Œμ•½, λ©”λ₯΄μ„Ό μ†Œμˆ˜κ°€ μ•„λ‹ˆλΌ μ§€μˆ˜(p)λ₯Ό 좜λ ₯ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒ? μ•„λž˜μ™€ κ°™μ΄ μ€‘κ°„ μ—°μ‚°μ—μ„œ μˆ˜ν–‰ν•œ λ§€ν•‘을 κ±°κΎΈλ‘œ μˆ˜ν–‰ν•΄ λ©”λ₯΄μ„Ό μˆ˜μ˜ μ§€μˆ˜(p)λ₯Ό μ‰½κ²Œ κ³„μ‚°ν•  μˆ˜ μžˆλ‹€.

private static final int COUNT = 5;

public static void main(String[] args) {

    primes().map(p -> TWO.pow(p.intValueExact()).subtract(ONE))
            .filter(mersenne -> mersenne.isProbablePrime(50))
            .limit(COUNT)
            .forEach(mp -> System.out.println(mp.bitLength() + ": " + mp));
    
    // κ²°κ³Όκ°’
    // 2: 3
    // 3: 7
    // 5: 31
    // 7: 127
    // 13: 8191
}

static Stream<BigInteger> primes() {
    return Stream.iterate(TWO, BigInteger::nextProbablePrime);
}

('isProbablePrime(50)'에 μžˆλŠ” λ§€μ§λ„˜λ²„ 50은 μ†Œμˆ˜μ„± κ²€μ‚¬μ˜ 정확도λ₯Ό λ†’μ—¬μ£ΌλŠ” 값이닀. λ§€μ§λ„˜λ²„ 10을 넣어도 μ†Œμˆ˜μΌ ν™•λ₯ μ΄ 99%κ°€ λ„˜μ§€λ§Œ, 더 높은 정확도λ₯Ό μœ„ν•˜μ—¬ 50을 λ„£μ–΄μ£Όμ—ˆλ‹€.)

 

πŸ“™ 4. 슀트림과 반볡 쀑 선택이 μ–΄λ €μš΄ 경우

  μ§€κΈˆκΉŒμ§€ 슀트림과 λ°˜λ³΅μ½”λ“œλ₯Ό μ–Έμ œ μ‚¬μš©ν•˜λŠ” 게 더 λ‚˜μ€μ§€ μ•Œμ•„λ³΄μ•˜λ‹€.

  ν•˜μ§€λ§Œ, 슀트림과 반볡 쀑 μ–΄λŠ μͺ½μ„ 써야 ν• μ§€ λ°”λ‘œ μ•ŒκΈ° μ–΄λ €μš΄ μž‘μ—…λ„ λ§Žλ‹€. 데카λ₯΄νŠΈ 곱을 μ΄μš©ν•˜μ—¬ μΉ΄λ“œμ˜ λͺ¨λ“  쑰합을 κ³„μ‚°ν•˜λŠ” μž‘μ—…μ„ 생각해 보자. μΉ΄λ“œλŠ” 숫자(rank)와 무늬(suit)λ₯Ό 묢은 λΆˆλ³€ κ°’ 클래슀이고, μˆ«μžμ™€ λ¬΄λŠ¬λŠ” λͺ¨λ‘ μ—΄κ±°νƒ€μž…μ΄λΌκ³  ν•˜μž.

// λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•˜λŠ” 경우
public static void main(String[] args) {
    private static List<Card> newDeck() {
        List<Card> result = new ArrayList<>();
        for(Suit suit : Suit.values())
            for(Rank rank : Rank.values())
                result.add(new Card(suit, rank));

        return result;
    }
}

// μŠ€νŠΈλ¦Όμ„ μ‚¬μš©ν•˜λŠ” 경우
public static void main(String[] args) {
    private static List<Card> newDeck() {
        return Stream.of(Suit.values())
                .flatMap(suit ->
                        Stream.of(Rank.values())
                                .map(rank -> new Card(suit, rank)))
                .collect(toList());
    }
}

  μ–΄λŠ μͺ½μ΄ 더 λ‚˜μ€ κ²ƒμΌκΉŒ? 결ꡭ은 개인 μ·¨ν–₯κ³Ό ν”„λ‘œκ·Έλž˜λ° ν™˜κ²½μ˜ λ¬Έμ œλ‹€. 처음 방식은 더 λ‹¨μˆœν•˜κ³  더 μžμ—°μŠ€λŸ¬μ›Œ 보일 것이닀. ν•˜μ§€λ§Œ, μŠ€νŠΈλ¦Ό λ°©μ‹μ΄ μ΅μˆ™ν•˜λ‹€λ©΄ λ‘ λ²ˆμ§Έ λ°©μ‹λ„ νŽΈν•˜κ²Œ μƒκ°ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μžˆμ„ κ²ƒμ΄λ‹€.

 

  μ–΄λŠ μͺ½μ„ μ„ νƒν•˜λŠ” ν™•κ³ λΆ€λ™ν•œ κ·œμΉ™μ€ μ—†μ§€λ§Œ 이전에 μ‚΄νŽ΄λ³Έ κ²ƒμ²˜λŸΌ μ°Έκ³ ν•  λ§Œν•œ μ§€μΉ¨ μ •λ„λŠ” μ‘΄μž¬ν•œλ‹€. 슀트림과 반볡 쀑 μ–΄λŠ μͺ½μ΄ λ‚˜μ€μ§€ ν™•μ‹ ν•˜κΈ° μ–΄λ ΅λ‹€λ©΄ λ‘˜ λ‹€ 해보고 더 λ‚˜μ€ μͺ½μ„ μ„ νƒν•˜λ„λ‘ ν•˜μž.

 

ν•΄λ‹Ή 글은 Joshua Bloch λ‹˜μ˜ 'Effective Java 3/E'λ₯Ό μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

 

 

'πŸ“‚ JAVA > μ΄νŽ™ν‹°λΈŒ μžλ°”' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

λ°˜ν™˜ νƒ€μž…μœΌλ‘œλŠ” μŠ€νŠΈλ¦Όλ³΄λ‹€ μ»¬λ ‰μ…˜μ΄ λ‚«λ‹€ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ47)]  (1) 2023.12.09
μŠ€νŠΈλ¦Όμ—μ„œλŠ” λΆ€μž‘μš© μ—†λŠ” ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ46)]  (0) 2023.12.09
ν‘œμ€€ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ44)]  (0) 2023.07.24
λžŒλ‹€λ³΄λ‹€λŠ” λ©”μ„œλ“œ μ°Έμ‘°λ₯Ό μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ43)]  (0) 2023.07.18
읡λͺ… ν΄λž˜μŠ€λ³΄λ‹€λŠ” λžŒλ‹€λ₯Ό μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ42)]  (0) 2023.07.10
  • πŸ“™ 1. 슀트림의 νŠΉμ§•
  • πŸ“™ 2. 슀트림과 λ°˜λ³΅μ— λŒ€ν•΄μ„œ μ°Έκ³ ν• λ§Œν•œ μ§€μΉ¨
  • πŸ“™ 3. 슀트림으둜 μ²˜λ¦¬ν•˜κΈ° μ–΄λ €μš΄ 경우
  • πŸ“™ 4. 슀트림과 반볡 쀑 선택이 μ–΄λ €μš΄ 경우
'πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • λ°˜ν™˜ νƒ€μž…μœΌλ‘œλŠ” μŠ€νŠΈλ¦Όλ³΄λ‹€ μ»¬λ ‰μ…˜μ΄ λ‚«λ‹€ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ47)]
  • μŠ€νŠΈλ¦Όμ—μ„œλŠ” λΆ€μž‘μš© μ—†λŠ” ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ46)]
  • ν‘œμ€€ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ44)]
  • λžŒλ‹€λ³΄λ‹€λŠ” λ©”μ„œλ“œ μ°Έμ‘°λ₯Ό μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ43)]
Amenable
Amenable
CS, μžλ°”, 자료ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜, μŠ€ν”„λ§, μŠ€ν”„λ§ λΆ€νŠΈμ— ν•΄λ‹Ήν•˜λŠ” κ°œλ°œμ— κ΄€ν•œ λ‚΄μš©μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”

단좕킀

λ‚΄ λΈ”λ‘œκ·Έ

λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
Q
Q
μƒˆ κΈ€ μ“°κΈ°
W
W

λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
E
E
λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
C
C

λͺ¨λ“  μ˜μ—­

이 νŽ˜μ΄μ§€μ˜ URL 볡사
S
S
맨 μœ„λ‘œ 이동
T
T
ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
H
H
단좕킀 μ•ˆλ‚΄
Shift + /
⇧ + /

* λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.