๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ ์ผ์ง€ ๐Ÿ‘ฉ‍๐Ÿ’ป

Jackson๊ณผ Inner Class, ์ง๋ ฌํ™”ํ•  ๋• ๊ผญ ์ด๊ฑธ ๊ธฐ์–ตํ•˜์„ธ์š”!

by chuyj15 2025. 6. 23.
728x90
๋ฐ˜์‘ํ˜•
SMALL

 

 

Java์—์„œ JSON์„ ๋‹ค๋ฃจ๋ ค๋ฉด ๊ฑฐ์˜ ํ•„์ˆ˜์ฒ˜๋Ÿผ ๋”ฐ๋ผ์˜ค๋Š” Jackson. ๊ทธ๋Ÿฐ๋ฐ ๊ฐ€๋” ์ด๋ ‡๊ฒŒ ์ƒ๋šฑ๋งž์€ ์—๋Ÿฌ ๋งŒ๋‚˜๋ณด์‹  ์  ์—†๋‚˜์š”?

Cannot construct instance of ... non-static inner classes like this 
can only be instantiated using a default, no-argument constructor

 

 

“์—ฅ? ์ƒ์„ฑ์ž๋„ ์žˆ๋Š”๋ฐ ์™œ ์•ˆ ๋˜์ง€?”
์ด๋Ÿฐ ์ƒ๊ฐ ๋“ค๋ฉด, ์•„๋งˆ non-static inner class๊ฐ€ ๋ฌธ์ œ์ผ ํ™•๋ฅ ์ด ๋†’์•„์š”.


๐Ÿšจ ์™œ ์ด๋Ÿฐ ์ผ์ด ๋ฒŒ์–ด์งˆ๊นŒ์š”?

์ž๋ฐ”์˜ non-static inner class๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์™ธ๋ถ€ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์— ๋‹ฌ๋ผ๋ถ™์–ด ์žˆ๋Š” ํด๋ž˜์Šค์˜ˆ์š”. ์‰ฝ๊ฒŒ ๋งํ•ด์„œ:

public class Outer {
    public class Inner {
        private String name;
    }
}

 

์œ„์ฒ˜๋Ÿผ ๋งŒ๋“ค๋ฉด new Outer().new Inner()์ฒ˜๋Ÿผ ์™ธ๋ถ€ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ์–ด์•ผ ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”.

๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๋Š”…
Jackson์€ ์ด๊ฑธ ๋ชจ๋ฅธ๋‹ค๋Š” ๊ฒƒ!
๊ทธ๋ƒฅ "Inner ํด๋ž˜์Šค์•ผ? new Inner()" ์ด๋ ‡๊ฒŒ๋งŒ ์‹œ๋„ํ•˜๋‹ˆ๊นŒ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ๊ฑฐ์ฃ .


โœ… ํ•ด๊ฒฐ๋ฒ•์€ ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•ด์š”!

1. static ๋ถ™์ด๊ธฐ! (๊ฐ€์žฅ ์ถ”์ฒœ)

public class Outer {
    public class Inner {
        private String name;
    }
}

static์„ ๋ถ™์ด๋ฉด ๋‚ด๋ถ€ ํด๋ž˜์Šค๋„ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜ ํด๋ž˜์Šค์ฒ˜๋Ÿผ ๋ณ€์‹ ํ•ฉ๋‹ˆ๋‹ค.
Jackson๋„ ๋ฌธ์ œ์—†์ด ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•ด์š”.
๊ฐ•๋ ฅ ์ถ”์ฒœ!


2. ์•„์˜ˆ ํด๋ž˜์Šค๋ฅผ ๋”ฐ๋กœ ๋นผ๊ธฐ

public class Outer {
    public class Inner {
        private String name;
    }
}

์ด๋ ‡๊ฒŒ ์™„์ „ํžˆ ํŒŒ์ผ์„ ๋‚˜๋ˆ ์„œ ์ž‘์„ฑํ•ด๋„ Jackson์€ ์ž˜ ์•Œ์•„๋จน์Šต๋‹ˆ๋‹ค.
“๋‚˜๋Š” inner class ์ž์ฒด๋ฅผ ์ง€์–‘ํ•œ๋‹ค” ํ•˜์‹ ๋‹ค๋ฉด ์ด ๋ฐฉ์‹๋„ ์ข‹์•„์š”.


3. ๊ผญ non-static ์จ์•ผ ํ•œ๋‹ค๋ฉด? @JsonCreator๋กœ ์ฒ˜๋ฆฌ

public class Outer {
    public class Inner {
        private String name;

        @JsonCreator
        public Inner(@JsonProperty("name") String name) {
            this.name = name;
        }
    }
}

์กฐ๊ธˆ ๋ณต์žกํ•˜์ง€๋งŒ, ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ด๋ ‡๊ฒŒ๋„ ๊ฐ€๋Šฅํ•ด์š”.
๋‹ค๋งŒ, Jackson ์ž…์žฅ์—์„œ ๊ฝค๋‚˜ ํž˜๋“  ์ž‘์—…์ด ๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋˜๋„๋ก static ์“ฐ๋Š” ๊ฒŒ ์† ํŽธํ•ด์š”.


๐Ÿ” ์‹ค์ œ ์˜ˆ์ œ๋กœ ๋ณผ๊นŒ์š”?

โŒ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ์ฝ”๋“œ

@Data
public class MonitoringDeviceDTO {
    private String groupId;
    private String groupName;
    private List<MonitoringDevice> list;

    @Data
    public class MonitoringDevice {
        private String deviceId;
        private String deviceName;
    }
}

์ด ์ƒํƒœ๋กœ JSON์„ ์—ญ์ง๋ ฌํ™”ํ•˜๋ฉด ์œ„ ์—๋Ÿฌ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

โœ… ํ•ด๊ฒฐ๋œ ์ฝ”๋“œ

@Data
public class MonitoringDeviceDTO {
    private String groupId;
    private String groupName;
    private List<MonitoringDevice> list;

    @Data
    public static class MonitoringDevice {
        private String deviceId;
        private String deviceName;
    }
}

static ํ•œ ์ค„๋กœ Jackson์ด ํ–‰๋ณตํ•ด์ง‘๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋„ ์—๋Ÿฌ ์—†์ด ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ณ ์š” ๐Ÿ˜Š


๐Ÿ’ก ๋ช‡ ๊ฐ€์ง€ ํŒ!

  • static inner class๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์— ์ ‘๊ทผ ๋ชปํ•˜์ง€๋งŒ, Jackson ์ž…์žฅ์—์„  ํ›จ์”ฌ ๋‹ค๋ฃจ๊ธฐ ์‰ฌ์›Œ์š”.
  • Lombok์˜ @Data๋ฅผ ํ•จ๊ป˜ ์“ฐ๋ฉด getter/setter/์ƒ์„ฑ์ž๊นŒ์ง€ ์ž๋™์œผ๋กœ ์ฑ™๊ฒจ์ฃผ๋‹ˆ ๋” ํŽธํ•ฉ๋‹ˆ๋‹ค.
  • ์ปค์Šคํ…€ ๋กœ์ง์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—” @JsonCreator, @JsonProperty, ์ปค์Šคํ…€ Serializer๋„ ๊ณ ๋ คํ•ด๋ณด์„ธ์š”.

โœจ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

Jackson์ด๋ž‘ ์นœํ•˜๊ฒŒ ์ง€๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด?
inner class์—” ๋ฌด์กฐ๊ฑด static ๋ถ™์ด๊ธฐ!
์ด๊ฒƒ๋งŒ ๊ธฐ์–ตํ•ด๋„ ๋งŽ์€ ์—๋Ÿฌ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

 

* ํ•จ๊ป˜ ๋ณด๋ฉด ์ข‹์€ ํฌ์ŠคํŒ…

2025.06.23 - [๊ฐœ๋ฐœ ์ผ์ง€ ๐Ÿ‘ฉ‍๐Ÿ’ป] - Jackson์ด๋ž€?

 

Jackson์ด๋ž€?

Jackson์€ Java์—์„œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜์˜ˆ์š”.์ข€ ๋” ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด:Java ๊ฐ์ฒด๋ฅผ JSON ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜ (์ง๋ ฌํ™”), JSON ๋ฌธ์ž์—ด์„ Java ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” (์—ญ์ง๋ ฌํ™”) ๋„

chuyj15.tistory.com

2025.06.23 - [๊ฐœ๋ฐœ ์ผ์ง€ ๐Ÿ‘ฉ‍๐Ÿ’ป] - static ํด๋ž˜์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ํ•ญ์ƒ ์˜ฌ๋ผ๊ฐ€ ์žˆ๋‚˜์š”?

 

static ํด๋ž˜์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ํ•ญ์ƒ ์˜ฌ๋ผ๊ฐ€ ์žˆ๋‚˜์š”?

๋งŽ์€ ๊ฐœ๋ฐœ์ž๋ถ„๋“ค์ด static = ํ•ญ์ƒ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€ ์žˆ์Œ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋Š”๋ฐ, ๊ทธ๊ฑด ์•ฝ๊ฐ„ ์˜คํ•ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์–ด์š”. ์ž์„ธํžˆ ์„ค๋ช…ํ•ด๋ณผ๊ฒŒ์š”. ๐Ÿ˜Š ๐Ÿ” static ํด๋ž˜์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ํ•ญ์ƒ ์˜ฌ๋ผ๊ฐ€ ์žˆ๋‚˜์š”?๊ฒฐ๋ก ๋ถ€

chuyj15.tistory.com

 

 

 

#Java #Jackson #์ง๋ ฌํ™” #InnerClass #static #JSON #SpringBoot #๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ #Lombok #๊ฐœ๋ฐœํŒ #๊ฐœ๋ฐœ์ž๋กœ๊ทธ

728x90
๋ฐ˜์‘ํ˜•
LIST