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

Amenable's Blog

ํƒ€์ž… ์•ˆ์ „ ์ด์ข… ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ณ ๋ คํ•˜๋ผ - [5์žฅ. ์ œ๋„ค๋ฆญ(์•„์ดํ…œ33)]
๐Ÿ“‚ JAVA/์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”

ํƒ€์ž… ์•ˆ์ „ ์ด์ข… ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ณ ๋ คํ•˜๋ผ - [5์žฅ. ์ œ๋„ค๋ฆญ(์•„์ดํ…œ33)]

2023. 6. 10. 20:34

1. ํƒ€์ž… ์•ˆ์ „ ์ด์ข… ์ปจํ…Œ์ด๋„ˆ ๐Ÿ™

  ํƒ€์ž… ์•ˆ์ „ ์ด์ข…(Heterogeneous) ์ปจํ…Œ์ด๋„ˆ๋ž€ ํ•œ ํƒ€์ž…์˜ ๊ฐ์ฒด๋งŒ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹Œ, ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ํƒ€์ž…(์ด์ข…)์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ํƒ€์ž… ์•ˆ์ „ํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งํ•œ๋‹ค.

  ์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์•Œ๊ณ  ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•œ ๊ฐ€์ง€ ํƒ€์ž…๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋‹ค.

public static void main(String[] args) {
    Set<String> names = new HashSet<>();
    names.add("amenable");
    // names.add(1); // ๋ถˆ๊ฐ€๋Šฅ

    Set<Integer> numbers = new HashSet<>();
    numbers.add(1);
    // numbers.add("amenable"); // ๋ถˆ๊ฐ€๋Šฅ
}

  ํ•˜์ง€๋งŒ, ๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ๋Š” ์ด์ข… ์ปจํ…Œ์ด๋„ˆ(= ๊ฐ™์€ ์ข…์ด ์•„๋‹Œ ํƒ€์ž…์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ)๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ด๋ฒˆ ์•„์ดํ…œ์˜ ์ฃผ์ œ์ธ ํƒ€์ž… ์•ˆ์ „ ์ด์ข… ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์„ ์•Œ์•„๋ณด์ž.

 

 

2. ๊ตฌํ˜„ ๐Ÿ˜

  ํƒ€์ž… ์•ˆ์ „ ์ด์ข… ์ปจํ…Œ์ด๋„ˆ์˜ ์˜ˆ์‹œ๋กœ ํƒ€์ž…๋ณ„๋กœ ์ฆ๊ฒจ ์ฐพ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ €์žฅํ•˜๊ณ (= putFavorite ๋ฉ”์„œ๋“œ) ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š”(= getFavorite ๋ฉ”์„œ๋“œ) Favorites ํด๋ž˜์Šค๋ฅผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์€ '์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹ˆ๋ผ "ํ‚ค"๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™” ํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ'์ด๋‹ค.

public class Favorites {

    private Map<Class<?>, Object> favorites = new HashMap<>();

    public <T> void putFavorite(Class<T> type, T instance) {
        favorites.put(Objects.requireNonNull(type), instance);
    }

    public <T> T getFavorite(Class<T> type) {
        return type.cast(favorites.get(type));
    }
}

  ๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜์™€ ๊ฐ ํƒ€์ž…๋ณ„๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

public static void main(String[] args) {
    Favorites favorites = new Favorites();
    favorites.putFavorite(String.class, "amenable");
    favorites.putFavorite(Integer.class, 1);

    String name = favorites.getFavorite(String.class); // amenable
    Integer number = favorites.getFavorite(Integer.class); // 1
}

  ์ฆ‰, Favorites ์ธ์Šคํ„ด์Šค๋Š” ํƒ€์ž… ์•ˆ์ „ํ•˜๊ณ , ์ผ๋ฐ˜์ ์ธ ๋งต๊ณผ ๋‹ฌ๋ฆฌ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํƒ€์ž…์˜ ์›์†Œ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Favorites๋Š” 'ํƒ€์ž… ์•ˆ์ „ ์ด์ข… ์ปจํ…Œ์ด๋„ˆ'๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  ์šฉ์–ด ํ•˜๋‚˜๋ฅผ ์งš๊ณ  ๋„˜์–ด๊ฐ€์ž๋ฉด ์ปดํŒŒ์ผํƒ€์ž„ ํƒ€์ž… ์ •๋ณด์™€ ๋Ÿฐํƒ€์ž„ ํƒ€์ž… ์ •๋ณด๋ฅผ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•ด ๋ฉ”์„œ๋“œ๋“ค์ด ์ฃผ๊ณ ๋ฐ›๋Š” class ๋ฆฌํ„ฐ๋Ÿด์„ ํƒ€์ž… ํ† ํฐ(Type Token)์ด๋ผ ํ•œ๋‹ค.

  class ๋ฆฌํ„ฐ๋Ÿด์˜ ํƒ€์ž…์€ Class๊ฐ€ ์•„๋‹Œ Class<T>์ด๊ณ , String.class์˜ ํƒ€์ž…์€ Class<String>, Integer.class์˜ ํƒ€์ž…์€ Class<Integer>์ธ ๊ฒƒ์ด๋‹ค.

 

 

3. ์ œ์•ฝ ์‚ฌํ•ญ ๐Ÿš

  ์ง€๊ธˆ๊นŒ์ง€ ํƒ€์ž… ์ด์ข… ์ปจํ…Œ์ด๋„ˆ์ธ Favorites ํด๋ž˜์Šค๋ฅผ ์‚ดํŽด๋ณด์•˜๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ์•Œ์•„๋‘์–ด์•ผ ํ•  ์ œ์•ฝ์ด 2๊ฐ€์ง€ ์žˆ๋‹ค.

๐Ÿ“’ ์ œ์•ฝ 1. ์•…์˜์ ์ธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ Class ๊ฐ์ฒด๋ฅผ (์ œ๋„ค๋ฆญ์ด ์•„๋‹Œ) ๋กœ ํƒ€์ž…์œผ๋กœ ๋„˜๊ธฐ๋ฉด Favorites ์ธ์Šคํ„ด์Šค์˜ ํƒ€์ž… ์•ˆ์ „์„ฑ์ด ์‰ฝ๊ฒŒ ๊นจ์ง„๋‹ค.

public class Favorites {

    private Map<Class<?>, Object> favorites = new HashMap<>();

    public <T> void putFavorite(Class<T> type, T instance) {
        favorites.put(Objects.requireNonNull(type), instance);
    }

    public <T> T getFavorite(Class<T> type) {
        return type.cast(favorites.get(type));
    }
}

public static void main(String[] args) {
    Favorites favorites = new Favorites();
    favorites.putFavorite((Class) String.class, 1);
}

  putFavorite ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํด๋ž˜์Šค์˜ ํƒ€์ž…(String, Integer, ...)๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ Class๋กœ๋งŒ ๋„˜๊ธฐ๊ฒŒ ๋˜๋ฉด ์ฝ”๋“œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ instance์— ์•„๋ฌด ๊ฐ’์ด๋‚˜ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

  ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋“ฏ์ด putFavorite ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

public static void main(String[] args) {
    Favorites favorites = new Favorites();
    favorites.putFavorite((Class) String.class, 1);

    String str = favorites.getFavorite(String.class); // ClassCastException
}

  Integer ๊ฐ’์„ ๋„ฃ์—ˆ์ง€๋งŒ ๊ทธ๊ฒƒ์„ String์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ClassCastException์ด ๋ฐœ์ƒํ•œ๋‹ค.

 

  ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” putFavorite ๋ฉ”์„œ๋“œ์—์„œ ์ธ์ˆ˜๋กœ ์ฃผ์–ด์ง„ instance์˜ ํƒ€์ž…์ด type์œผ๋กœ ๋ช…์‹œํ•œ ํƒ€์ž…๊ณผ ๊ฐ™์€์ง€ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.

public class Favorites {

    ...

    public <T> void putFavorite(Class<T> type, T instance) {
        favorites.put(Objects.requireNonNull(type), type.cast(instance));
    }

    ...
}

public static void main(String[] args) {
    Favorites favorites = new Favorites();
    favorites.putFavorite((Class) String.class, 1); // ClassCastException

    String str = favorites.getFavorite(String.class);
}

  ๊ทธ๋Ÿฌ๋ฉด getFavorite๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ putFavorites์—์„œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์กฐ๊ธˆ ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์ด๊ธฐ๋Š” ํ•˜์ง€๋งŒ ๊ทผ๋ณธ์ ์œผ๋กœ ์ปดํŒŒ์ผ ํƒ€์ž„์—๋Š” ๋ง‰์„ ์ˆ˜ ์—†๋‹ค๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.

 

๐Ÿ“’ ์ œ์•ฝ 2. ์‹ค์ฒดํ™” ๋ถˆ๊ฐ€ ํƒ€์ž…์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

  List.class๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์žˆ๋‹ค.

public static void main(String[] args) {
    Favorites favorites = new Favorites();
    favorites.putFavorite(List.class, List.of(1, 2, 3));

    List list = favorites.getFavorite(List.class);
    list.forEach(System.out::print); // 123
}

  ๋งŒ์•ฝ List.of(1, 2, 3)๊ณผ List.of("a", "b", "c")๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•˜๊ณ  ์‹ถ์–ด์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์“ด๋‹ค๋ฉด ๋’ค์— ๋‚˜์˜จ ๊ฒƒ์ด ์•ž์— ๋‚˜์˜จ ๊ฒƒ์„ ๋ฎ์–ด์“ฐ๊ฒŒ ๋œ๋‹ค.

public static void main(String[] args) {
    Favorites favorites = new Favorites();
    favorites.putFavorite(List.class, List.of(1, 2, 3));
    favorites.putFavorite(List.class, List.of("a", "b", "c")); // ๋ฎ์–ด์”€

    List list = favorites.getFavorite(List.class);
    list.forEach(System.out::print); // abc
}

  ๊ทธ๋ž˜์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์“ฐ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

public static void main(String[] args) {
    Favorites favorites = new Favorites();

    // ์‚ฌ์šฉ๋ถˆ๊ฐ€
    favorites.putFavorite(List<Integer>.class, List.of(1, 2, 3));
    favorites.putFavorite(List<String>.class, List.of("a", "b", "c"));

    List list = favorites.getFavorite(List.class);
    list.forEach(System.out::print); // abc
}

ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. List.class๋งŒ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด์ง€ List<Integer>.class, List<String>.class์™€ ๊ฐ™์€ ๊ฒƒ์€ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

  ์ด ์ œ์•ฝ์‚ฌํ•ญ์— ๋Œ€ํ•ด์„œ๋Š” ์™„๋ฒฝํžˆ ๋งŒ์กฑ์Šค๋Ÿฌ์šด ์šฐํšŒ๋กœ๋Š” ์—†๋‹ค. ๋‹ ๊ฐœํ”„ํ„ฐ(Neal Gafter)๊ฐ€ ์ œ์•ˆํ•œ ์Šˆํผ ํƒ€์ž… ํ† ํฐ(Super Type Token)์œผ๋กœ ์–ด๋А ์ •๋„ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ์Šˆํผ ํƒ€์ž… ํ† ํฐ๋„ ์™„๋ฒฝํ•˜์ง€๋Š” ์•Š์œผ๋‹ˆ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.

 

 

4. ํ•œ์ •์  ํƒ€์ž… ํ† ํฐ ๐Ÿ›

  ์ง€๊ธˆ๊นŒ์ง€ ์‚ดํŽด๋ณธ ํƒ€์ž… ํ† ํฐ์€ ๋น„ํ•œ์ •์ ์ด๋‹ค. ์ฆ‰, getFavorite์™€ putFavorite๋Š” ์–ด๋–ค Class ๊ฐ์ฒด๋“  ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๋‹ค.

  ๋•Œ๋กœ๋Š” ์ด ๋ฉ”์„œ๋“œ๋“ค์ด ํ—ˆ์šฉํ•˜๋Š” ํƒ€์ž…์„ ์ œํ•œํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋•Œ ํ•œ์ •์  ํƒ€์ž… ํ† ํฐ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•œ์ •์  ํƒ€์ž… ํ† ํฐ์ด๋ž€ ๋‹จ์ˆœํžˆ ํ•œ์ •์  ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋‚˜ ํ•œ์ •์  ์™€์ผ๋“œ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•œ ํƒ€์ž…์„ ์ œํ•œํ•˜๋Š” ํƒ€์ž… ํ† ํฐ์ด๋‹ค.

// FindMe
@Retention(RetentionPolicy.RUNTIME)
public @interface FindMe { }

// MyService
@FindMe
public class MyService { }

// PrintAnnotation
public class PrintAnnotation {

    static Annotation getAnnotation(AnnotatedElement element, String annotationTypeName) {
        Class<?> annotationType = null;
        try {
            annotationType = Class.forName(annotationTypeName);
        } catch (Exception ex) {
            throw new IllegalArgumentException(ex);
        }

        return element.getAnnotation(annotationType.asSubclass(Annotation.class));
    }
}

// ๋ช…์‹œํ•œ ํด๋ž˜์Šค์˜ ๋ช…์‹œํ•œ ์• ๋„ˆํ…Œ์ด์…˜์„ ์ถœ๋ ฅํ•˜๋Š” ํ…Œ์ŠคํŠธ ํ”„๋กœ๊ทธ๋žจ
public static void main(String[] args) {
    System.out.println(getAnnotation(MyService.class, FindMe.class.getName()));
}

  asSubclass ๋ฉ”์„œ๋“œ๋Š” ํ˜ธ์ถœ๋œ ์ธ์Šคํ„ด์Šค ์ž์‹ ์˜ Class ๊ฐ์ฒด๋ฅผ ์ธ์ˆ˜๊ฐ€ ๋ช…์‹œํ•œ ํด๋ž˜์Šค๋กœ ํ˜•๋ณ€ํ™˜ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ asSubclass๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•œ์ •์  ํƒ€์ž… ํ† ํฐ์„ ์•ˆ์ „ํ•˜๊ฒŒ ํ˜•๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ•ด๋‹น ๊ธ€์€ ๋ฐฑ๊ธฐ์„  ๋‹˜์˜ '์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” ์™„๋ฒฝ ๊ณต๋žต'์„ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

'๐Ÿ“‚ JAVA > ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

int ์ƒ์ˆ˜ ๋Œ€์‹  ์—ด๊ฑฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ผ - [6์žฅ. ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์• ๋„ˆํ…Œ์ด์…˜(์•„์ดํ…œ34)] - (2)  (0) 2023.07.01
int ์ƒ์ˆ˜ ๋Œ€์‹  ์—ด๊ฑฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ผ - [6์žฅ. ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์• ๋„ˆํ…Œ์ด์…˜(์•„์ดํ…œ34)] - (1)  (0) 2023.07.01
์ œ๋„ค๋ฆญ๊ณผ ๊ฐ€๋ณ€์ธ์ˆ˜๋ฅผ ํ•จ๊ป˜ ์“ธ ๋•Œ๋Š” ์‹ ์ค‘ํ•˜๋ผ - [5์žฅ. ์ œ๋„ค๋ฆญ(์•„์ดํ…œ32)]  (0) 2023.06.03
ํ•œ์ •์  ์™€์ผ๋“œ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•ด API ์œ ์—ฐ์„ฑ์„ ๋†’์ด๋ผ - [5์žฅ. ์ œ๋„ค๋ฆญ(์•„์ดํ…œ31)]  (0) 2023.06.01
์ด์™•์ด๋ฉด ์ œ๋„ค๋ฆญ ๋ฉ”์„œ๋“œ๋กœ ๋งŒ๋“ค๋ผ - [5์žฅ. ์ œ๋„ค๋ฆญ(์•„์ดํ…œ30)]  (0) 2023.05.31
    '๐Ÿ“‚ JAVA/์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • int ์ƒ์ˆ˜ ๋Œ€์‹  ์—ด๊ฑฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ผ - [6์žฅ. ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์• ๋„ˆํ…Œ์ด์…˜(์•„์ดํ…œ34)] - (2)
    • int ์ƒ์ˆ˜ ๋Œ€์‹  ์—ด๊ฑฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ผ - [6์žฅ. ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์• ๋„ˆํ…Œ์ด์…˜(์•„์ดํ…œ34)] - (1)
    • ์ œ๋„ค๋ฆญ๊ณผ ๊ฐ€๋ณ€์ธ์ˆ˜๋ฅผ ํ•จ๊ป˜ ์“ธ ๋•Œ๋Š” ์‹ ์ค‘ํ•˜๋ผ - [5์žฅ. ์ œ๋„ค๋ฆญ(์•„์ดํ…œ32)]
    • ํ•œ์ •์  ์™€์ผ๋“œ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•ด API ์œ ์—ฐ์„ฑ์„ ๋†’์ด๋ผ - [5์žฅ. ์ œ๋„ค๋ฆญ(์•„์ดํ…œ31)]
    Amenable
    Amenable
    CS, ์ž๋ฐ”, ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํ”„๋ง, ์Šคํ”„๋ง ๋ถ€ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋ฐœ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”