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
static ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ํญ์ ์ฌ๋ผ๊ฐ ์๋์?
๋ง์ ๊ฐ๋ฐ์๋ถ๋ค์ด static = ํญ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ์์์ด๋ผ๊ณ ์๊ฐํ์๋๋ฐ, ๊ทธ๊ฑด ์ฝ๊ฐ ์คํด๊ฐ ์์ ์ ์์ด์. ์์ธํ ์ค๋ช ํด๋ณผ๊ฒ์. ๐ ๐ static ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ํญ์ ์ฌ๋ผ๊ฐ ์๋์?๊ฒฐ๋ก ๋ถ
chuyj15.tistory.com
#Java #Jackson #์ง๋ ฌํ #InnerClass #static #JSON #SpringBoot #๋ฐฑ์๋๊ฐ๋ฐ #Lombok #๊ฐ๋ฐํ #๊ฐ๋ฐ์๋ก๊ทธ
'๊ฐ๋ฐ ์ผ์ง ๐ฉโ๐ป' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Spring Boot) ๋ก์ปฌ์์ HTTP/2.0 ์ฐ๋ ๋ฐฉ๋ฒ (3) | 2025.06.27 |
|---|---|
| ๋งฅ๋ถ์์ window์ ์๊ฒฉ๋ฐ์คํฌํ ์ ์ํ๋ ๋ฐฉ๋ฒ (2025๋ 6์) (13) | 2025.06.25 |
| Jackson์ด๋? (0) | 2025.06.23 |
| static ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ํญ์ ์ฌ๋ผ๊ฐ ์๋์? (2) | 2025.06.23 |
| ๐ ๏ธ minSdk์ targetSdk๋ ๊ฐ๋ฐ์๊ฐ ์ค์ ๊ฐ๋ฅํ ๊น? (3) | 2025.06.18 |