Search

μΈμŠ€ν„΄μŠ€ & static

μΈμŠ€ν„΄μŠ€ & static

μΈμŠ€ν„΄μŠ€(Instance)λž€?

클래슀λ₯Ό 기반으둜 μƒμ„±λœ 객체λ₯Ό μΈμŠ€ν„΄μŠ€(Instance)라고 ν•©λ‹ˆλ‹€.
κ°μ²΄λŠ” 클래슀의 μ‹€μ²΄ν™”λœ ν˜•νƒœλ‘œ, λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλ˜μ–΄ μ‹€μ œλ‘œ μ‚¬μš©ν•  수 μžˆλŠ” μƒνƒœκ°€ λ©λ‹ˆλ‹€.
// Person 클래슀 class Person { String name; int age; void introduce() { System.out.println("μ•ˆλ…•ν•˜μ„Έμš”, μ €λŠ” " + name + "이고, " + age + "μ‚΄μž…λ‹ˆλ‹€."); } } // 메인 λ©”μ†Œλ“œμ—μ„œ μΈμŠ€ν„΄μŠ€ 생성 public class Main { public static void main(String[] args) { // person1은 Person 클래슀의 μΈμŠ€ν„΄μŠ€ Person person1 = new Person(); person1.name = "홍길동"; person1.age = 25; person1.introduce(); // person2도 Person 클래슀의 μΈμŠ€ν„΄μŠ€ Person person2 = new Person(); person2.name = "κΉ€μ² μˆ˜"; person2.age = 30; person2.introduce(); } }
Java
볡사

staticμ΄λž€?

static은 'κ³ μ •λœ'μ΄λΌλŠ” 의미둜, μžλ°”μ—μ„œλŠ” ν΄λž˜μŠ€μ— κ³ μ •λœ 멀버λ₯Ό μ„ μ–Έν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
static ν‚€μ›Œλ“œκ°€ 뢙은 λ©€λ²„λŠ” 클래슀 λ ˆλ²¨μ— μ†ν•˜λ©°, μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

static λ³€μˆ˜ (클래슀 λ³€μˆ˜)

static λ³€μˆ˜λŠ” λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ κ³΅μœ ν•˜λŠ” λ³€μˆ˜μž…λ‹ˆλ‹€. μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ™€ 달리 ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬μ— λ‘œλ“œλ  λ•Œ ν•œ 번만 μƒμ„±λ˜μ–΄ λͺ¨λ“  μΈμŠ€ν„΄μŠ€μ—μ„œ 같은 값을 μ°Έμ‘°ν•©λ‹ˆλ‹€.
class Counter { // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ int instanceCount = 0; // 클래슀 λ³€μˆ˜ (static λ³€μˆ˜) static int staticCount = 0; public Counter() { instanceCount++; // 각 μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ 증가 staticCount++; // λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ κ³΅μœ ν•˜μ—¬ 증가 } } public class Main { public static void main(String[] args) { Counter c1 = new Counter(); System.out.println("c1 μΈμŠ€ν„΄μŠ€ 카운트: " + c1.instanceCount); // 1 System.out.println("c1 static 카운트: " + Counter.staticCount); // 1 Counter c2 = new Counter(); System.out.println("c2 μΈμŠ€ν„΄μŠ€ 카운트: " + c2.instanceCount); // 1 System.out.println("c2 static 카운트: " + Counter.staticCount); // 2 // 첫 번째 μΈμŠ€ν„΄μŠ€μ˜ static λ³€μˆ˜λ„ 변경됨 System.out.println("c1 static 카운트: " + c1.staticCount); // 2 } }
Java
볡사

static λ©”μ†Œλ“œ (클래슀 λ©”μ†Œλ“œ)

static λ©”μ†Œλ“œλŠ” μΈμŠ€ν„΄μŠ€ 생성 없이 클래슀 μ΄λ¦„μœΌλ‘œ 직접 ν˜ΈμΆœν•  수 μžˆλŠ” λ©”μ†Œλ“œμž…λ‹ˆλ‹€.
static λ©”μ†Œλ“œλŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ‚˜ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œμ— 직접 μ ‘κ·Όν•  수 μ—†μŠ΅λ‹ˆλ‹€.
class MathUtils { // static λ©”μ†Œλ“œ static int add(int a, int b) { return a + b; } // μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ int multiply(int a, int b) { return a * b; } } public class Main { public static void main(String[] args) { // static λ©”μ†Œλ“œλŠ” μΈμŠ€ν„΄μŠ€ 생성 없이 호좜 κ°€λŠ₯ int sum = MathUtils.add(5, 3); System.out.println("합계: " + sum); // 8 // μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλŠ” μΈμŠ€ν„΄μŠ€ 생성 ν›„ 호좜 κ°€λŠ₯ MathUtils utils = new MathUtils(); int product = utils.multiply(5, 3); System.out.println("κ³±: " + product); // 15 } }
Java
볡사

μΈμŠ€ν„΄μŠ€μ™€ static의 μ£Όμš” 차이점

ꡬ뢄
μΈμŠ€ν„΄μŠ€ 멀버
static 멀버
생성 μ‹œμ 
객체 생성 μ‹œ
클래슀 λ‘œλ”© μ‹œ
λ©”λͺ¨λ¦¬ ν• λ‹Ή
νž™ μ˜μ—­
λ©”μ†Œλ“œ μ˜μ—­(정적 μ˜μ—­)
μ‚¬μš© 방법
객체 생성 ν›„ μ°Έμ‘°λ³€μˆ˜λ‘œ μ ‘κ·Ό
클래슀 μ΄λ¦„μœΌλ‘œ 직접 μ ‘κ·Ό
생λͺ… μ£ΌκΈ°
객체가 μ†Œλ©Έλ˜λ©΄ ν•¨κ»˜ μ†Œλ©Έ
ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ  λ•ŒκΉŒμ§€ μœ μ§€
곡유 μ—¬λΆ€
각 μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ 별도 생성
λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ 곡유

static μ‚¬μš© μ‹œ μ£Όμ˜μ‚¬ν•­

β€’
static λ©”μ†Œλ“œλŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό 직접 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
β€’
static λ©”μ†Œλ“œλŠ” this ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
β€’
λ©”λͺ¨λ¦¬ λˆ„μˆ˜ μœ„ν—˜μ΄ μžˆμœΌλ―€λ‘œ κΌ­ ν•„μš”ν•œ κ²½μš°μ—λ§Œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
β€’
μƒμˆ˜(final static)둜 주둜 μ‚¬μš©λ©λ‹ˆλ‹€.
β€’
μœ ν‹Έλ¦¬ν‹° λ©”μ†Œλ“œλ‚˜ κ³΅ν†΅μœΌλ‘œ μ‚¬μš©λ˜λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν•  λ•Œ μœ μš©ν•©λ‹ˆλ‹€.