Search

클래슀

클래슀

β€œκ°μ²΄λ₯Ό μ •μ˜ν•œ 섀계도”
클래슀(Class)λŠ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ κΈ°λ³Έ ꡬ성 μš”μ†Œμž…λ‹ˆλ‹€. ν΄λž˜μŠ€λŠ” 객체의 섀계도 역할을 ν•˜λ©°, 이λ₯Ό 톡해 객체λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

INDEX

β€’
객체 (Object)
β€’
클래슀의 κ΅¬μ„±μš”μ†Œ
β—¦
1. ν•„λ“œ (Fields)
β—¦
2. λ©”μ†Œλ“œ (Method)
β—¦
3. μƒμ„±μž (Constructors)
β—¦
4. μ΄ˆκΈ°ν™” 블둝 (Initialization Blocks)
β€’
클래슀 문법사항
β—¦
1. 클래슀 μ„ μ–Έ ν‚€μ›Œλ“œ
β—¦
2. μ£Όμš” ν‚€μ›Œλ“œ
β—¦
3. 클래슀 μ’…λ₯˜
β—¦
4. 객체 생성 문법
β€’
클래슀 예제

객체 (Object)

'μƒνƒœ'와 '행동'을 κ°€μ§€λŠ” λŒ€μƒ
β€’
νŠΉμ§•: 싀세계에 μ‘΄μž¬ν•˜λŠ” λͺ¨λ“  것이 객체가 될 수 있음
β€’
ꡬ성: 객체의 'μƒνƒœ'λŠ” 'λ³€μˆ˜'둜, 객체의 '행동'은 'λ©”μ†Œλ“œ'둜 ν‘œν˜„
κ°œλ…
μ„€λͺ…
객체 (Object)
클래슀λ₯Ό 기반으둜 μƒμ„±λœ 싀체
μΈμŠ€ν„΄μŠ€ (Instance)
ν΄λž˜μŠ€λ‘œλΆ€ν„° μƒμ„±λœ 각각의 객체
μΈμŠ€ν„΄μŠ€ν™” (Instantiation)
ν΄λž˜μŠ€λ‘œλΆ€ν„° 객체λ₯Ό μƒμ„±ν•˜λŠ” κ³Όμ •

클래슀의 κ΅¬μ„±μš”μ†Œ

1.
ν•„λ“œ (Fields)
2.
λ©”μ†Œλ“œ (Method)
3.
μƒμ„±μž

1. ν•„λ“œ (Fields)

클래슀의 μƒνƒœ(데이터)λ₯Ό μ €μž₯ν•˜λŠ” λ³€μˆ˜
β€’
μ’…λ₯˜
β—¦
μΈμŠ€ν„΄μŠ€ λ³€μˆ˜
β—¦
클래슀 λ³€μˆ˜(static)
class Person { String name; // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ int age; // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ static int count; // 클래슀 λ³€μˆ˜ }
Java
볡사

2. λ©”μ†Œλ“œ (Method)

클래슀의 행동(κΈ°λŠ₯)을 μ •μ˜ν•˜λŠ” μ½”λ“œ 블둝
β€’
μ’…λ₯˜
β—¦
μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ
β—¦
클래슀 λ©”μ†Œλ“œ(static)
class Person { // μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ void introduce() { System.out.println("My name is " + name); } // 클래슀 λ©”μ†Œλ“œ static int getCount() { return count; } }
Java
볡사

3. μƒμ„±μž (Constructors)

객체가 생성될 λ•Œ μ΄ˆκΈ°ν™”λ₯Ό λ‹΄λ‹Ήν•˜λŠ” νŠΉλ³„ν•œ λ©”μ†Œλ“œ
클래슀 이름과 동일, λ°˜ν™˜ νƒ€μž…μ΄ μ—†μŒ
객체의 λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” 역할을 ν•œλ‹€.
class Person { String name; int age; // μƒμ„±μž Person(String name, int age) { this.name = name; this.age = age; } }
Java
볡사

4. μ΄ˆκΈ°ν™” 블둝 (Initialization Blocks)

β€’
μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” 블둝: 객체 생성 μ‹œ μ‹€ν–‰
β€’
정적 μ΄ˆκΈ°ν™” 블둝: 클래슀 λ‘œλ”© μ‹œ μ‹€ν–‰
class Example { // μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” 블둝 { System.out.println("μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” 블둝 μ‹€ν–‰"); } // 정적 μ΄ˆκΈ°ν™” 블둝 static { System.out.println("정적 μ΄ˆκΈ°ν™” 블둝 μ‹€ν–‰"); } // μƒμ„±μž Example() { System.out.println("μƒμ„±μž μ‹€ν–‰"); } } // μ‚¬μš© μ˜ˆμ‹œ public class InitBlockTest { public static void main(String[] args) { System.out.println("Example 객체 생성 μ „"); Example ex = new Example(); System.out.println("Example 객체 생성 ν›„"); } } /* 좜λ ₯ κ²°κ³Ό: Example 객체 생성 μ „ 정적 μ΄ˆκΈ°ν™” 블둝 μ‹€ν–‰ (클래슀 λ‘œλ”© μ‹œ 1회만 μ‹€ν–‰) μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” 블둝 μ‹€ν–‰ (객체 생성 μ‹œλ§ˆλ‹€ μ‹€ν–‰) μƒμ„±μž μ‹€ν–‰ (객체 생성 μ‹œλ§ˆλ‹€ μ‹€ν–‰) Example 객체 생성 ν›„ */
Java
볡사

μ΄ˆκΈ°ν™” 블둝 vs μƒμ„±μž

μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” 블둝
정적 μ΄ˆκΈ°ν™” 블둝
μƒμ„±μž
μ‹€ν–‰ μ‹œμ 
객체 생성 μ‹œλ§ˆλ‹€
ν΄λž˜μŠ€κ°€ λ‘œλ“œλ  λ•Œ ν•œ 번만
객체 생성 μ‹œλ§ˆλ‹€
μ‚¬μš© λͺ©μ 
λͺ¨λ“  μƒμ„±μžμ—μ„œ κ³΅ν†΅μ μœΌλ‘œ μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ” μ½”λ“œ μ •μ˜
정적 λ³€μˆ˜ μ΄ˆκΈ°ν™”
객체 생성 μ‹œ ν•„μš”ν•œ μ½”λ“œ μ‹€ν–‰
μ‹€ν–‰ 횟수
객체 생성할 λ•Œλ§ˆλ‹€ 싀행됨
ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 λ”± ν•œ 번 싀행됨
객체 생성할 λ•Œλ§ˆλ‹€ 싀행됨

클래슀 문법사항

1. 클래슀 μ„ μ–Έ ν‚€μ›Œλ“œ

[μ ‘κ·Όμ œμ–΄μž] class 클래슀λͺ… [extends μƒμœ„ν΄λž˜μŠ€] [implements μΈν„°νŽ˜μ΄μŠ€] { // 클래슀 λ‚΄μš© }
Java
볡사

2. μ£Όμš” ν‚€μ›Œλ“œ

ν‚€μ›Œλ“œ
μ„€λͺ…
class
클래슀 μ •μ˜
static
클래슀 λ³€μˆ˜/λ©”μ†Œλ“œ μ •μ˜
this
ν˜„μž¬ 객체 μ°Έμ‘°
super
μƒμœ„ 클래슀 μ°Έμ‘°
final
상속/μ˜€λ²„λΌμ΄λ”© κΈˆμ§€
abstract
좔상 클래슀/λ©”μ†Œλ“œ μ •μ˜
public
λͺ¨λ“  ν΄λž˜μŠ€μ—μ„œ μ ‘κ·Ό κ°€λŠ₯
private
ν•΄λ‹Ή 클래슀 λ‚΄μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯
protected
같은 νŒ¨ν‚€μ§€μ™€ ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μ ‘κ·Ό κ°€λŠ₯

3. 클래슀 μ’…λ₯˜

클래슀 μ’…λ₯˜
μ„€λͺ…
νŠΉμ§•
일반 클래슀
기본적인 클래슀 ν˜•νƒœ
ν•„λ“œ, λ©”μ†Œλ“œ, μƒμ„±μž 등을 ν¬ν•¨ν•˜λŠ” κΈ°λ³Έ ν˜•νƒœ
좔상 클래슀
μΈμŠ€ν„΄μŠ€ν™”ν•  수 μ—†λŠ” 클래슀
적어도 ν•˜λ‚˜ μ΄μƒμ˜ 좔상 λ©”μ†Œλ“œλ₯Ό 포함할 수 있음
μΈν„°νŽ˜μ΄μŠ€
μ™„μ „ν•œ 좔상화
λͺ¨λ“  λ©”μ†Œλ“œκ°€ 좔상 λ©”μ†Œλ“œ(Java 8λΆ€ν„° default λ©”μ†Œλ“œ μ˜ˆμ™Έ), 닀쀑 상속 지원
λ‚΄λΆ€ 클래슀
λ‹€λ₯Έ 클래슀 내뢀에 μ •μ˜λœ 클래슀
μ™ΈλΆ€ 클래슀의 멀버에 μ‰½κ²Œ μ ‘κ·Ό κ°€λŠ₯
읡λͺ… 클래슀
이름이 μ—†λŠ” 일회용 클래슀
μΈν„°νŽ˜μ΄μŠ€λ‚˜ 좔상 클래슀λ₯Ό μ¦‰μ‹œ κ΅¬ν˜„ν•˜μ—¬ μ‚¬μš©
정적 클래슀
static ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ‚΄λΆ€ 클래슀
μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ 없이도 μ‚¬μš© κ°€λŠ₯
쀑첩 클래슀
λ‹€λ₯Έ 클래슀 내에 μ„ μ–Έλœ 클래슀
정적 쀑첩 ν΄λž˜μŠ€μ™€ 비정적 쀑첩 클래슀(λ‚΄λΆ€ 클래슀)둜 λ‚˜λ‰¨

각 클래슀 μ’…λ₯˜ μ½”λ“œ 예제

// 일반 클래슀 public class NormalClass { private String name; public void doSomething() { System.out.println("Doing something"); } } // 좔상 클래슀 abstract class AbstractClass { private String name; // 일반 λ©”μ†Œλ“œ public void normalMethod() { System.out.println("Normal method"); } // 좔상 λ©”μ†Œλ“œ (κ΅¬ν˜„λΆ€κ°€ μ—†μŒ) abstract void abstractMethod(); } // μΈν„°νŽ˜μ΄μŠ€ interface MyInterface { void methodOne(); // μžλ™μœΌλ‘œ public abstract // Java 8λΆ€ν„° default λ©”μ†Œλ“œ κ°€λŠ₯ default void defaultMethod() { System.out.println("Default implementation"); } } // λ‚΄λΆ€ 클래슀 예제 class OuterClass { private int value = 10; // λ‚΄λΆ€ 클래슀 class InnerClass { void printValue() { System.out.println("Value from outer class: " + value); } } // 정적 λ‚΄λΆ€ 클래슀 static class StaticNestedClass { void display() { // static λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ— 직접 μ ‘κ·Ό λΆˆκ°€ System.out.println("Static nested class"); } } // 읡λͺ… 클래슀 μ‚¬μš© 예 void createAnonymous() { Runnable r = new Runnable() { @Override public void run() { System.out.println("Anonymous class running"); } }; } }
Java
볡사

4. 객체 생성 문법

ν΄λž˜μŠ€νƒ€μž… 객체λͺ… = new 클래슀λͺ…( μ „λ‹¬μΈμž );
생성할 객체의 ν΄λž˜μŠ€νƒ€μž…μ„ μ§€μ •ν•˜κ³  직접 이름을 지은 객체λͺ…을 μ„ μ–Έν•©λ‹ˆλ‹€.
new ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄μ„œ 객체 생성 λͺ…령을 ν•©λ‹ˆλ‹€.
( ) κ΄„ν˜Έ μ•ˆμ—λŠ” 아무것도 없이 생성을 ν•˜λ©΄, 객체λ₯Ό κΈ°λ³Έ μƒμ„±ν•˜μ—¬ κΈ°λ³Έ μƒμ„±μžκ°€ 호좜되고, ( μ „λ‹¬μΈμž ) κ΄„ν˜Έ μ•ˆμ— μ „λ‹¬μΈμžλ₯Ό μ§€μ •ν•˜λ©΄, κ·Έ μ „λ‹¬μΈμžμ˜ 개수, μˆœμ„œ, νƒ€μž…κ³Ό 짝이 λ§žλŠ” μƒμ„±μžκ°€ ν˜ΈμΆœλ©λ‹ˆλ‹€.
Person person = new Person("홍길동", 25);
Java
볡사

클래슀 예제

public class Animal { // ν•„λ“œ(λ³€μˆ˜) private String name; private int age; private static int count = 0; // μƒμ„±μž public Animal(String name, int age) { this.name = name; this.age = age; count++; } // μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ public void makeSound() { System.out.println("Animal makes sound"); } // getter/setter λ©”μ†Œλ“œ public String getName() { return name; } public void setName(String name) { this.name = name; } // 클래슀 λ©”μ†Œλ“œ public static int getCount() { return count; } }
Java
볡사