[ISSUE] boolean์—์„œ is๊ฐ€ ์ƒ๋žต๋˜๋Š” ๋ฌธ์ œ

2024. 9. 6. 01:24ยท๐ŸŽฏ Programming
๋ฐ˜์‘ํ˜•

๐Ÿšจ ๋ฌธ์ œ ์ƒํ™ฉ

๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋‹ค๊ฐ€ ๋งŒ๋‚œ ์ด์Šˆ์ž…๋‹ˆ๋‹ค.

 

๊ธฐ์กด ์†Œ์…œ ๋กœ๊ทธ์ธ ์‘๋‹ต๊ฐ’์€ ์•„๋ž˜์™€ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

์†Œ์…œ ๋กœ๊ทธ์ธ ํ›„, ํšŒ์›๊ฐ€์ž… ์‹œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์œ ์ €์ธ์ง€ ์—ฌ๋ถ€๋ฅผ `isNewMember` ํ•„๋“œ๋ฅผ ํ†ตํ•ด ํ‘œ์‹œํ•ด์ฃผ๊ณ  ์žˆ์—ˆ์–ด์š”.

@Getter
@AllArgsConstructor
@NoArgsConstructor
public static class SignInResponse {

  private boolean isNewMember;
  private TokenInfo tokenInfo;
}

 

๊ทธ๋Ÿฐ๋ฐ ์›น ์ฐฝ์œผ๋กœ ๋กœ๊ทธ์ธ์„ ์™„๋ฃŒํ•œ ํ›„, ๋‚˜์˜จ ์‘๋‹ต๊ฐ’์„ ๋ณด๋ฉด 2๊ฐ€์ง€ ๋ฌธ์ œ์ ์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

{
  "tokenInfo": {
    ...
  },
  "newMember": false,
}

 

(1) `isNewMember`๊ฐ€ `newMember`๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒƒ

(2) ํ•ญ์ƒ `newMember`์˜ ๊ฐ’์ด `false`๋กœ ๋‚˜์˜ค๋Š” ๊ฒƒ.

 

๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” ๋กœ์ง ๊ตฌํ˜„์—์„œ์˜ ์˜ค๋ฅ˜์ผ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๊ทธ๋ฅผ ์ฐ์–ด๋ดค์Šต๋‹ˆ๋‹ค.

@Transactional
public SignInResponse signIn(SignInRequest request) {
  ...
  
  log.info("isNewMember = {}", isNewMember);

  return new SignInResponse(isNewMember, tokenInfo);
}

๋†€๋ž๊ฒŒ๋„ ๋กœ๊ทธ ๊ฒฐ๊ณผ๋Š” `true`๋กœ ์ž˜ ๋‚˜์™”์–ด์š”.

๊ทธ๋Ÿผ ๋„๋Œ€์ฒด ์–ด๋””๊ฐ€ ๋ฌธ์ œ์ผ๊นŒ์š”?


โœ… ์›์ธ ๋ถ„์„

์›์ธ์€ ๋ฐ”๋กœ @Getter ๋•Œ๋ฌธ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํ•˜๊ฒŒ ๋งํ•˜๋ฉด, ์ด ๋ฌธ์ œ๋Š” Lombok๊ณผ Jackson์˜ ํ•ฉ์ž‘์ด์—ˆ์Šต๋‹ˆ๋‹ค.

Lombok์€ JavaBeans ํ‘œ์ค€์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, JavaBeans์˜ ๊ทœ์น™์— ๋”ฐ๋ผ primitive ํƒ€์ž…์ธ boolean ๋ณ€์ˆ˜์— ๋Œ€ํ•ด getter ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์ด `is`๋กœ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.


๊ทธ๋ ‡๋‹ค๋ฉด ๋ณ€์ˆ˜๋ช…์ด `is`๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์–ด๋–จ๊นŒ์š”?

๊ณต์‹๋ฌธ์„œ
๊ณต์‹ ๋ฌธ์„œ: https://projectlombok.org/features/GetterSetter

 

๊ณต์‹๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด boolean ํ•„๋“œ๊ฐ€ `is`๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๊ทธ ๋’ค์— ๋Œ€๋ฌธ์ž๊ฐ€ ๋ฐ”๋กœ ์˜ค๋Š” ๊ฒฝ์šฐ, ์ถ”๊ฐ€์ ์ธ ์ ‘๋‘์‚ฌ ์—†์ด ๊ทธ๋Œ€๋กœ getter ๋ฉ”์„œ๋“œ ์ด๋ฆ„์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ฆ‰, `isNewMember` ๋ณ€์ˆ˜์— ๋Œ€ํ•ด getter ๋ฉ”์„œ๋“œ๊ฐ€ `getIsNewMember()`๊ฐ€ ์•„๋‹Œ, `isNewMember()`๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

"๊ทธ๋ ‡๋‹ค๋ฉด ์—ฌ๊ธฐ์„œ ๋ณ€์ˆ˜๋ช…์ด ์™œ `newMember`๋กœ ์ธ์‹๋˜๋Š” ๊ฒƒ์ผ๊นŒ์š”?"
์ด ์ด์œ ๋Š” Spring์˜ Jackson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์žˆ์Šต๋‹ˆ๋‹ค.

Jackson์€ JSON ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ๋ฐ, ์–˜๊ฐ€ JSON ์ง๋ ฌํ™”์™€ ์—ญ์ง๋ ฌํ™” ๊ณผ์ •์—์„œ ํด๋ž˜์Šค์˜ ํ•„๋“œ ์ž์ฒด๊ฐ€ ์•„๋‹Œ ๊ทธ ํ•„๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” getter์™€ setter ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ getter ๋ฉ”์„œ๋“œ์ธ `isNewMember()`๋ฅผ ๋”ฐ๋ผ ํ•„๋“œ๋ฅผ ์ธ์‹ํ•˜๋‹ค ๋ณด๋‹ˆ `newMember`๋ผ๋Š” ํ•„๋“œ๋กœ ์ธ์‹๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๐Ÿท ํ๋ฆ„ ์ •๋ฆฌ

  1. Lombok์˜ @Getter ์–ด๋…ธํ…Œ์ด์…˜์€ `isNewMember` ํ•„๋“œ์— ๋Œ€ํ•ด `isNewMember()`๋ผ๋Š” getter ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์„ฑ
  2. Jackson์€ ์ด getter ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ `newMember`๋ผ๋Š” ํ•„๋“œ๋ฅผ ์ธ์‹
  3. ํ•˜์ง€๋งŒ newMember๋ผ๋Š” ํ•„๋“œ์˜ ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ๊ธฐ์— ๋””ํดํŠธ ๊ฐ’์ธ `false`๋กœ ์ฒ˜๋ฆฌ

โœ… ํ•ด๊ฒฐ ๊ณผ์ •

๋จผ์ € getter๋ฅผ ์ง์ ‘ ์ •์˜ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. 

  @AllArgsConstructor
  @NoArgsConstructor
  public static class SignInResponse {

    private boolean isNewMember;
    private TokenInfo tokenInfo;

    public boolean getIsNewMember() {
      return isNewMember;
    }

    public TokenInfo getTokenInfo() {
      return tokenInfo;
    }

๊ฒฐ๊ณผ๊ฐ€ ์ž˜ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค!


Getter ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ํ•ด๊ฒฐํ•  ์ˆœ ์—†์„๊นŒ์š”?
๊ทธ๋ž˜์„œ primitive ํƒ€์ž…์ธ `boolean`์„ wrapper ํƒ€์ž…์ธ `Boolean`์œผ๋กœ ๋ณ€๊ฒฝํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

  @Getter
  @AllArgsConstructor
  @NoArgsConstructor
  public static class SignInResponse {
    private Boolean isNewMember;
    private TokenInfo tokenInfo;
  }

์ด ๋ฐฉ์‹๋„ ๊ฒฐ๊ณผ๊ฐ€ ์ž˜ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค!


๊ทธ ์ด์œ ๋Š” ๊ณต์‹๋ฌธ์„œ์— ๊ฐ€๋ฉด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://projectlombok.org/features/GetterSetter

 

boolean ํƒ€์ž…์€ is ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์ง€๋งŒ, Boolean๊ณผ ๊ฐ™์€ ๊ฐ์ฒด ํƒ€์ž…์€ is ๋Œ€์‹  get ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


ํ•˜์ง€๋งŒ Boolean ํ•„๋“œ๊ฐ’์ด null์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


๋‹ค์Œ์œผ๋กœ ๋‹จ์ˆœํ•˜๊ฒŒ ํ•„๋“œ๋ช…์„ `is` ์ ‘๋‘์‚ฌ๊ฐ€ ์—†๊ฒŒ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

  @Getter
  @AllArgsConstructor
  @NoArgsConstructor
  public static class SignInResponse {

    private boolean newMember;
    private TokenInfo tokenInfo;
  }

์ž˜ ํ•ด๊ฒฐ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.


๋งˆ์ง€๋ง‰์œผ๋กœ ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด, ์ด๋Ÿฐ ์„ค์ •์„ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ถœ์ฒ˜: https://projectlombok.org/features/GetterSetter

 

lombok.getter.noIsPrefix ๊ฐ’์„ true๋กœ ์„ค์ •ํ•˜๋ฉด boolean ๋ณ€์ˆ˜์— ๋Œ€ํ•ด getter๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, `get`์œผ๋กœ ์‹œ์ž‘ํ•˜๋„๋ก ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ง“๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ๋„ ํ•˜๋‚˜์˜ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ด ๋  ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”.


โœ… ํ•ด๊ฒฐ ๋ฐฉ์•ˆ ์ •๋ฆฌ

์ •๋ฆฌํ•˜์ž๋ฉด, ํ•ด๊ฒฐ๋ฐฉ์•ˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

(1) Getter ์ง์ ‘ ์ •์˜ํ•˜๊ธฐ

(2) boolean ๋Œ€์‹  Boolean ์“ฐ๊ธฐ

(3) ๋ณ€์ˆ˜๋ช… is ์ ‘๋‘์‚ฌ ์—†์• ๊ธฐ

(4) lombok.getter.noIsPrefix = true๋กœ ์„ค์ •ํ•˜๊ธฐ

 

์ €๋Š” ์ตœ์ข…์ ์œผ๋กœ is ์ ‘๋‘์‚ฌ๋ฅผ ์—†์• ๋Š” ๋ฐฉ์‹์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

'๐ŸŽฏ Programming' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JAVA] ์ค‘๋ณต ์ œ๊ฑฐ ๋ฐฉ๋ฒ•(+์ •๋ ฌ)  (1) 2025.01.31
[Github Action] build ์˜ค๋ฅ˜ ์›์ธ ๋” ์ž์„ธํžˆ ๋ณด๋Š” ๋ฒ•  (0) 2024.10.08
์ธํ„ฐํŽ˜์ด์Šค(Interface) vs ์ถ”์ƒ ํด๋ž˜์Šค(Abstract class)  (0) 2024.05.25
SOLID ์›์น™  (1) 2024.04.07
'๐ŸŽฏ Programming' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [JAVA] ์ค‘๋ณต ์ œ๊ฑฐ ๋ฐฉ๋ฒ•(+์ •๋ ฌ)
  • [Github Action] build ์˜ค๋ฅ˜ ์›์ธ ๋” ์ž์„ธํžˆ ๋ณด๋Š” ๋ฒ•
  • ์ธํ„ฐํŽ˜์ด์Šค(Interface) vs ์ถ”์ƒ ํด๋ž˜์Šค(Abstract class)
  • SOLID ์›์น™
dev-heyjin
dev-heyjin
  • dev-heyjin
    ๊ฐœ๋ฐœ ๊ธฐ๋ก
    dev-heyjin
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (56)
      • ๐ŸŽฏ Programming (8)
      • ๐Ÿ’ช Algorithm (16)
      • โš™๏ธ CS (31)
        • ๋„คํŠธ์›Œํฌ (15)
        • ์šด์˜์ฒด์ œ (15)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    DB
    ํ•ดํ‚น
    RDS
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
dev-heyjin
[ISSUE] boolean์—์„œ is๊ฐ€ ์ƒ๋žต๋˜๋Š” ๋ฌธ์ œ
์ƒ๋‹จ์œผ๋กœ

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