๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[Java][Android] ์ž๋ฐ”์˜ ์—ด๊ฑฐํ˜•(enum)์˜ ๋Œ€์ฒด๋กœ ๋‚˜์™”๋‹ค๋Š” @IntDef, ๊ทธ๋ ‡๋‹ค๋ฉด ์—ด๊ฑฐํ˜•์€ ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฑธ๊นŒ

์ถœ์ฒ˜

ChatGPT


@IntDef๋Š” Java์—์„œ ์—ด๊ฑฐํ˜•(enum)์˜ ๋Œ€์•ˆ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ฃผ๋กœ ์„ฑ๋Šฅ ์ตœ์ ํ™”์™€ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋˜์—ˆ๋‹ค. ์ด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด, ๋จผ์ € ์—ด๊ฑฐํ˜•๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ์ ์„ ์‚ดํŽด๋ณด๊ณ , @IntDef์˜ ์žฅ์ ์„ ์„ค๋ช…ํ•œ๋‹ค.

 

1. ์—ด๊ฑฐํ˜•(enum)์˜ ๋ฌธ์ œ์ 

Java์—์„œ ์—ด๊ฑฐํ˜•์€ ๋งค์šฐ ์œ ์šฉํ•˜์ง€๋งŒ, ๋ช‡ ๊ฐ€์ง€ ๋‹จ์ ์ด ์žˆ๋‹ค.

1. ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ

  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰: ์—ด๊ฑฐํ˜•์€ ๊ฐ์ฒด๋กœ ๊ตฌํ˜„๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ ์—ด๊ฑฐํ˜• ๊ฐ’์€ JVM ๋‚ด์—์„œ ๋ณ„๋„์˜ ๊ฐ์ฒด๋กœ ์กด์žฌํ•œ๋‹ค. ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ํŠนํžˆ ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ํ™˜๊ฒฝ์ด๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์ œ์•ฝ์ด ํฐ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ: ์—ด๊ฑฐํ˜•์€ ๊ฐ์ฒด๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ์ˆ˜(static final int)๋ณด๋‹ค ๋Š๋ฆด ์ˆ˜ ์žˆ๋‹ค.

2. ์ž๋ฐ” ๋ฒ„์ „ ์ œ์•ฝ:

  • ์—ด๊ฑฐํ˜•์€ ์ž๋ฐ” 5์—์„œ ์ฒ˜์Œ ๋„์ž…๋˜์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์ด์ „ ๋ฒ„์ „์˜ ์ž๋ฐ”๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†.

 

2. @IntDef์˜ ๋“ฑ์žฅ

@IntDef๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ๋„์ž…๋œ ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. ์ด๋Š” ์ •์ˆ˜ ์ƒ์ˆ˜(int constants)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ์ œ๊ณตํ•˜๋ฉด์„œ๋„, ์—ด๊ฑฐํ˜•๋ณด๋‹ค ์„ฑ๋Šฅ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์ธก๋ฉด์—์„œ ๋” ํšจ์œจ์ ์ด๋‹ค.

@IntDef์˜ ์žฅ์ 

1. ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ

  • @IntDef๋Š” ๋‹จ์ˆœํžˆ ์ •์ˆ˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์—ด๊ฑฐํ˜• ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ํ›จ์”ฌ ์ ๋‹ค. ์ด๋Š” ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ ํŠนํžˆ ์œ ๋ฆฌํ•˜๋‹ค.

2. ์„ฑ๋Šฅ

  • ์ •์ˆ˜ ๊ฐ’์€ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•(primitive type)์œผ๋กœ ์ทจ๊ธ‰๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ๊ฐ์ฒด๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ์—ด๊ฑฐํ˜•๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋œ๋‹ค.

3. ํƒ€์ž… ์•ˆ์ „์„ฑ

  • @IntDef๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ํŠน์ • ๋ฉ”์„œ๋“œ๋‚˜ ๋ณ€์ˆ˜์— ํ—ˆ์šฉ๋˜๋Š” ์ •์ˆ˜ ๊ฐ’์˜ ๋ฒ”์œ„๋ฅผ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์ž˜๋ชป๋œ ๊ฐ’์ด ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋ฉฐ, ์—ด๊ฑฐํ˜•์ด ์ œ๊ณตํ•˜๋Š” ํƒ€์ž… ์•ˆ์ „์„ฑ๊ณผ ๋น„์Šทํ•œ ํšจ๊ณผ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

3. @IntDef ์‚ฌ์šฉ ์˜ˆ์‹œ

import androidx.annotation.IntDef;

public class NetworkManager {

    public static final int WIFI = 0;
    public static final int MOBILE = 1;
    public static final int ETHERNET = 2;

    @IntDef({WIFI, MOBILE, ETHERNET})
    public @interface NetworkType {}

    private int currentNetworkType;

    public void setNetworkType(@NetworkType int networkType) {
        this.currentNetworkType = networkType;
    }

    @NetworkType
    public int getNetworkType() {
        return currentNetworkType;
    }
}

 

 

  • ์ •์ˆ˜ ์ƒ์ˆ˜ ์ •์˜: WIFI, MOBILE, ETHERNET๋ฅผ ์ •์ˆ˜ ์ƒ์ˆ˜๋กœ ์ •์˜ํ–ˆ๋‹ค.
  • @IntDef ์• ๋…ธํ…Œ์ด์…˜: @IntDef ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด NetworkType์ด๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๊ณ , ํ—ˆ์šฉ๋˜๋Š” ์ •์ˆ˜ ๊ฐ’์„ WIFI, MOBILE, ETHERNET๋กœ ์ œํ•œํ–ˆ๋‹ค.
  • ํƒ€์ž… ์•ˆ์ „์„ฑ: setNetworkType() ๋ฉ”์„œ๋“œ๋Š” @NetworkType์œผ๋กœ ์ •์˜๋œ ์ •์ˆ˜ ๊ฐ’๋งŒ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ž˜๋ชป๋œ ์ •์ˆ˜ ๊ฐ’์ด ์ „๋‹ฌ๋  ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๋ฅผ ํ•ด์ค€๋‹ค.

 

4. ์–ธ์ œ ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

์—ด๊ฑฐํ˜•์ด ๋ฌด์กฐ๊ฑด ๋‚˜์œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์—ด๊ฑฐํ˜•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์—ฌ์ „ํžˆ ์œ ์šฉํ•˜๋‹ค.

  • ๊ธฐ๋Šฅ์  ์š”๊ตฌ ์‚ฌํ•ญ: ์—ด๊ฑฐํ˜•์€ ๋‹จ์ˆœํ•œ ์ƒ์ˆ˜ ๊ฐ’๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๊ฐ ๊ฐ’์— ๋Œ€ํ•ด ์ถ”๊ฐ€์ ์ธ ๋ฉ”์„œ๋“œ๋‚˜ ํ•„๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒํƒœ(state)๋ฅผ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜ ๊ฐ ๊ฐ’์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๋™์ž‘์„ ์ •์˜ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.
  • ๊ฐ€๋…์„ฑ: ์—ด๊ฑฐํ˜•์€ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค. ํŠน์ • ๊ฐ’์ด ์–ด๋–ค ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋Š”์ง€ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๊ฒฐ๋ก 

@IntDef๋Š” ์„ฑ๋Šฅ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์ด ์ค‘์š”ํ•œ ์•ˆ๋“œ๋กœ์ด๋“œ์™€ ๊ฐ™์€ ํ™˜๊ฒฝ์—์„œ, ์—ด๊ฑฐํ˜• ๋Œ€์‹  ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ๋Œ€์•ˆ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ด๊ฑฐํ˜•์ด ์ œ๊ณตํ•˜๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ๊ฐ€๋…์„ฑ์ด ๋” ์ค‘์š”ํ•œ ๊ฒฝ์šฐ๋ผ๋ฉด, ์—ฌ์ „ํžˆ ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ์ˆ˜ ์žˆ๋‹ค. ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 


์ฝ”ํ‹€๋ฆฐ enum class๋„ ์ž๋ฐ”์˜ enum๊ณผ ๋น„์Šทํ•œ ์ด์œ ๋กœ @IntDef๋กœ ๋Œ€์ฒดํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.