πŸ”‘ public / private / protected / static (Access Modifiers)

EthAnalogΒ·2025λ…„ 8μ›” 22일

Spring Boot

λͺ©λ‘ 보기
10/16
post-thumbnail

βœ… μ–΄λ–€ κΈ°λŠ₯을 λ§Œλ“œλŠ” 것인가?

μžλ°” 클래슀 μ•ˆμ—μ„œ λ³€μˆ˜λ‚˜ λ©”μ„œλ“œμ— μ ‘κ·Ό κΆŒν•œμ„ μ œμ–΄ν•˜λŠ” 문법(μ ‘κ·Ό μ œμ–΄μž, Access Modifier) λ₯Ό ν•™μŠ΅ν•©λ‹ˆλ‹€.
β†’ μ½”λ“œ 관리와 λ³΄μ•ˆμ„ μœ„ν•΄ μ€‘μš”ν•œ 기초 κ°œλ…μž…λ‹ˆλ‹€.


πŸ‘‰ μ™œ 이걸 λ°°μ›Œμ•Ό ν•˜μ§€?

  • μ‹€μˆ˜ λ°©μ§€: λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ ν•¨λΆ€λ‘œ 데이터λ₯Ό λ³€κ²½ λͺ»ν•˜κ²Œ λ§‰μŒ
  • μ•ˆμ „μ„± κ°•ν™”: 잘λͺ»λœ 값이 λ“€μ–΄κ°€λŠ” κ±Έ 막고 μ œμ•½μ„ 쀄 수 있음
  • μœ μ§€λ³΄μˆ˜ 용이: μ½”λ“œ ν™•μž₯μ΄λ‚˜ μˆ˜μ • μ‹œ μ•ˆμ •μ 
  • 클린 μ½”λ“œ: λ³€μˆ˜/λ©”μ„œλ“œ μ‚¬μš© λ²”μœ„λ₯Ό λͺ…ν™•ν•˜κ²Œ ꡬ뢄할 수 있음

πŸ“š κ°œλ… 정리

ν‚€μ›Œλ“œμ˜λ―ΈνŠΉμ§•/μ‚¬μš©μ²˜
publicμ–΄λ””μ„œλ“  μ ‘κ·Ό κ°€λŠ₯λ²”μš© λ³€μˆ˜, λ©”μ„œλ“œ
(default)아무 것도 μ•ˆμ“°λ©΄ 같은 νŒ¨ν‚€μ§€ μ•ˆμ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯ (package-private)νŒ¨ν‚€μ§€ λ‚΄λΆ€ ν˜‘μ—…μš©
private클래슀 λ‚΄λΆ€μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯정보 은닉, λ³΄μ•ˆ
protected같은 νŒ¨ν‚€μ§€ + 상속받은 ν΄λž˜μŠ€μ—μ„œ μ ‘κ·Ό κ°€λŠ₯상속 ꡬ쑰 ν™œμš© μ‹œ
static객체 생성 없이 클래슀λͺ…μœΌλ‘œ 직접 μ ‘κ·Ό κ°€λŠ₯μœ ν‹Έμ„± ν•¨μˆ˜, μ „μ—­ μƒμˆ˜

βš™οΈ κ΅¬ν˜„ 흐름 및 μ½”λ“œ

1. public

@Entity
public class Item {
    public String title;
    public Integer price;
}

// λ‹€λ₯Έ 클래슀
Item item = new Item();
item.title = "바보"; // μ‚¬μš© κ°€λŠ₯

2. package-private (default)

@Entity
public class Item {
    String title;
    Integer price;
}

// 같은 νŒ¨ν‚€μ§€ λ‚΄λΆ€
Item item = new Item();
item.title = "바보"; // κ°€λŠ₯

3. private

@Entity
public class Item {
    private String title;
    private Integer price;
}

// λ‹€λ₯Έ 클래슀
Item item = new Item();
item.title = "바보"; // ❌ λΆˆκ°€λŠ₯

4. protected

@Entity
public class Item {
    protected String title;
    protected Integer price;
}

// 같은 νŒ¨ν‚€μ§€ μ•ˆμ—μ„œλŠ” μ‚¬μš© κ°€λŠ₯
// λ‹€λ₯Έ νŒ¨ν‚€μ§€λ©΄ ❌ 단, 상속받은 ν΄λž˜μŠ€λŠ” μ ‘κ·Ό κ°€λŠ₯

5. static

@Entity
public class Item {
    public static String title;
    public static Integer price;
}

// 객체 생성 μ•ˆν•΄λ„ μ‚¬μš© κ°€λŠ₯
Item.title = "정적 λ³€μˆ˜";

6. private λ³€μˆ˜ μˆ˜μ • (Getter / Setter)

@Entity
public class Item {
    private String title;

    // getter
    public String getTitle() {
        return title;
    }

    // setter
    public void setTitle(String title) {
        this.title = title;
    }
}

// μ‚¬μš©
Item item = new Item();
item.setTitle("μ…”μΈ ");
System.out.println(item.getTitle());

Lombok μžλ™ 생성

@Entity
@Getter
@Setter
public class Item {
    private String title;
    private Integer price;
}

πŸ’‘ 이런 곳에 ν™œμš©ν•  수 μžˆμ–΄μš”

  • public: μ„œλΉ„μŠ€ λ©”μ„œλ“œ(API) 곡개
  • private: λΉ„λ°€λ²ˆν˜Έ, λ‚΄λΆ€ μƒνƒœ κ°’ 보호
  • protected: 상속 κ΅¬μ‘°μ—μ„œ ν•„μš”ν•œ 데이터 전달
  • static: 곡톡 μœ ν‹Έ ν•¨μˆ˜ (예: Math.random())

✍️ 개인 정리 및 회고

  • 무쑰건 public만 μ“°λ©΄ λ³΄μ•ˆμ— μ·¨μ•½ν•˜λ‹€.
  • private + getter/setter 방식이 μ•ˆμ „ν•˜κ³  μœ μ§€λ³΄μˆ˜μ—λ„ κ°•ν•˜λ‹€.
  • setter μ•ˆμ— 검증 둜직(if 쑰건 λ“±) 을 λ„£μœΌλ©΄ 데이터 μ•ˆμ •μ„±μ΄ μ˜¬λΌκ°„λ‹€.
  • static은 νŽΈλ¦¬ν•˜μ§€λ§Œ λ‚¨μš©ν•˜λ©΄ 객체지ν–₯의 μž₯점(볡사/μž¬μ‚¬μš©μ„±)을 μžƒλŠ”λ‹€.

πŸ”‘ 였늘 배운 핡심 3쀄 μš”μ•½

  1. public = μ–΄λ””μ„œλ‚˜ μ ‘κ·Ό κ°€λŠ₯ / private = 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯
  2. μ•ˆμ „μ„±μ„ μœ„ν•΄ private + getter/setter νŒ¨ν„΄μ„ 많이 μ“΄λ‹€.
  3. static은 객체 생성 없이 클래슀λͺ…μœΌλ‘œ λ°”λ‘œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

0개의 λŒ“κΈ€