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

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

[Java] transient ์˜ˆ์•ฝ์–ด

์ถœ์ฒ˜

ChatGPT

Gemini


`transient`๋Š” ์ž๋ฐ”์—์„œ ๊ฐ์ฒด ์ง๋ ฌํ™”(Serialization) ๊ณผ์ •์—์„œ ํŠน์ • ํ•„๋“œ๋ฅผ ์ œ์™ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์•ฝ์–ด์ด๋‹ค. ์ง๋ ฌํ™”๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํŒŒ์ผ์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ „์†กํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ธ๋ฐ, `transient` ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ํ•„๋“œ๋Š” ์ง๋ ฌํ™” ๋Œ€์ƒ์—์„œ ์ œ์™ธ๋œ๋‹ค.

์ฃผ์š” ํŠน์ง•

1. ์ง๋ ฌํ™”์—์„œ ์ œ์™ธ

  •  `transient`๋กœ ์„ ์–ธ๋œ ํ•„๋“œ๋Š” `ObjectOutputStream`์„ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ™”ํ•  ๋•Œ ๋ฌด์‹œ๋œ๋‹ค.   
  • ์ด ํ•„๋“œ์˜ ๊ฐ’์€ ์ง๋ ฌํ™”๋œ ๊ฐ์ฒด๋ฅผ ๋ณต์›(deserialization)ํ•  ๋•Œ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •๋œ๋‹ค(์˜ˆ: ์ˆซ์žํ˜• ํ•„๋“œ๋Š” `0`, ๊ฐ์ฒดํ˜• ํ•„๋“œ๋Š” `null`).

2. ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ

์˜ˆ๋ฅผ ๋“ค์–ด, ๋น„๋ฐ€๋ฒˆํ˜ธ๋‚˜ ์‹ ์šฉ์นด๋“œ ์ •๋ณด์™€ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ™”ํ•  ๋•Œ, ์ด๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ํ•„๋“œ๋ฅผ `transient`๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ์‚ฌ์šฉ ์˜ˆ

import java.io.Serializable;

public class User implements Serializable {
    private String username;
    private transient String password; // ์ง๋ ฌํ™”์—์„œ ์ œ์™ธ๋จ

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    // getters and setters
}


์œ„ ์ฝ”๋“œ์—์„œ `password` ํ•„๋“œ๋Š” `transient`๋กœ ์„ ์–ธ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, `User` ๊ฐ์ฒด๊ฐ€ ์ง๋ ฌํ™”๋  ๋•Œ ์ด ํ•„๋“œ๋Š” ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

์‚ฌ์šฉ ๋ชฉ์ 

๋ณด์•ˆ

์•”ํ˜ธ, ์„ธ์…˜ ํ‚ค ๋“ฑ ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ์ง๋ ฌํ™” ๊ณผ์ •์—์„œ ๋…ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด transient๋กœ ์„ ์–ธํ•œ๋‹ค.

์ผ์‹œ์ ์ธ ๋ฐ์ดํ„ฐ

๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ผ์‹œ์ ์ธ ๋ฐ์ดํ„ฐ๋Š” ์ง๋ ฌํ™” ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

ํฐ ๊ฐ์ฒด

์ง๋ ฌํ™” ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•  ๋ณ€์ˆ˜๊ฐ€ ๋งŽ๊ฑฐ๋‚˜, ๋ณ€์ˆ˜์˜ ํฌ๊ธฐ๊ฐ€ ํด ๊ฒฝ์šฐ ์ง๋ ฌํ™” ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

์‚ฌ์šฉ ์‹œ ์ฃผ์˜์ 

ํ•„๋“œ ๋ณต์› ์‹œ ์ดˆ๊ธฐํ™” ๋ฌธ์ œ

์ง๋ ฌํ™”๋œ ๊ฐ์ฒด๋ฅผ ๋ณต์›ํ•  ๋•Œ `transient` ํ•„๋“œ๋Š” ์ง๋ ฌํ™” ๊ณผ์ •์—์„œ ์ œ์™ธ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ณต์›๋œ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ๋ณต์› ํ›„์— ํ•ด๋‹น ํ•„๋“œ๋ฅผ ๋‹ค์‹œ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜๋ฏธ ์žˆ๋Š” ๊ฐ’์˜ ์†์‹ค ๊ฐ€๋Šฅ์„ฑ

`transient` ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ํ•ด๋‹น ํ•„๋“œ๊ฐ€ ์ง๋ ฌํ™” ๊ณผ์ •์—์„œ ์ œ์™ธ๋˜์–ด๋„ ๊ฐ์ฒด์˜ ๋ฌด๊ฒฐ์„ฑ๊ณผ ๊ธฐ๋Šฅ์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€ ์‹ ์ค‘ํ•˜๊ฒŒ ํŒ๋‹จํ•ด์•ผ ํ•œ๋‹ค.

์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•œ ํด๋ž˜์Šค

transient ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํด๋ž˜์Šค๊ฐ€ Serializable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

๋‹ค๋ฅธ ์˜ˆ์•ฝ์–ด์™€์˜ ์‚ฌ์šฉ

transient์™€ static

static ๋ณ€์ˆ˜๋Š” ํด๋ž˜์Šค ๋ณ€์ˆ˜์ด๋ฏ€๋กœ ๊ฐ์ฒด์˜ ์ƒํƒœ์™€ ๊ด€๋ จ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ง๋ ฌํ™” ๋Œ€์ƒ์—์„œ ์ž๋™์œผ๋กœ ์ œ์™ธ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, transient ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

transient์™€ final

final ๋ณ€์ˆ˜๋Š” ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ง๋ ฌํ™”ํ•ด๋„ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค. ํ•˜์ง€๋งŒ, transient๋กœ ์„ ์–ธํ•  ์ˆ˜๋Š” ์žˆ๋‹ค.