πŸ—£οΈ/Java

[Java] ν΄λž˜μŠ€μ™€ 객체

sssbin 2022. 2. 11. 23:00

 

객체 μ§€ν–₯

- 컴퓨터가 μˆ˜ν–‰ν•˜λŠ” μž‘μ—…μ„ 객체듀 κ°„μ˜ μƒν˜Έμž‘μš©μœΌλ‘œ ν‘œν˜„

- 클래슀 ν˜Ήμ€ κ°μ²΄λ“€μ˜ μ§‘ν•©μœΌλ‘œ ν”„λ‘œκ·Έλž¨ μž‘μ„±

 

μΊ‘μŠν™”

- 객체λ₯Ό 캑슐둜 μ‹Έμ„œ κ·Έ λ‚΄λΆ€λ₯Ό λ³΄ν˜Έν•˜κ³  λ³Ό 수 μ—†κ²Œ ν•˜λŠ” 것

 

상속

- μƒμœ„ 개체의 속성을 ν•˜μœ„ κ°œμ²΄μ— 물렀쀌.

 

λ‹€ν˜•μ„±

- 같은 μ΄λ¦„μ˜ λ©”μ†Œλ“œκ°€ ν΄λž˜μŠ€λ‚˜ 객체에 따라 λ‹€λ₯΄κ²Œ κ΅¬ν˜„λ˜λŠ” 것

- λ©”μ†Œλ“œ μ˜€λ²„λ‘œλ”©: ν•œ 클래슀 λ‚΄μ—μ„œ 같은 μ΄λ¦„μ΄μ§€λ§Œ λ‹€λ₯΄κ²Œ μž‘λ™ν•˜λŠ” μ—¬λŸ¬ λ©”μ†Œλ“œ

- λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ”©: 슈퍼클래슀의 λ©”μ†Œλ“œλ₯Ό λ™μΌν•œ μ΄λ¦„μœΌλ‘œ μ„œλΈŒ ν΄λž˜μŠ€λ§ˆλ‹€ λ‹€λ₯΄κ²Œ κ΅¬ν˜„

 

ν΄λž˜μŠ€μ™€ 객체

- 클래슀: 객체의 속성과 ν–‰μœ„ μ„ μ–Έ. 객체λ₯Ό λ§Œλ“€μ–΄λ‚΄κΈ° μœ„ν•œ ν‹€

- 객체λ₯Ό 클래슀의 μΈμŠ€ν„΄μŠ€λΌκ³  함.

- 객체듀은 ν΄λž˜μŠ€μ— μ„ μ–Έλœ λ™μΌν•œ 속성을 κ°€μ§€μ§€λ§Œ 속성 값은 μ„œλ‘œ λ‹€λ₯΄λ‹€.

 


μžλ°” 클래슀 λ§Œλ“€κΈ°

클래슀 ꡬ성

1. 클래슀 ꡬ성

- class ν‚€μ›Œλ“œλ‘œ 클래슀 μ„ μ–Έ

2. 클래슀 멀버

- 클래슀의 ꡬ성 μš”μ†Œ. ν•„λ“œμ™€ λ©”μ†Œλ“œ

- ν•„λ“œ: 객체의 μƒνƒœ 값을 μ €μž₯ν•  멀버 λ³€μˆ˜

- λ©”μ†Œλ“œ: μ‹€ν–‰ κ°€λŠ₯ν•œ ν•¨μˆ˜μ΄κ³  객체의 ν–‰μœ„λ₯Ό κ΅¬ν˜„

3. μ ‘κ·Ό μ§€μ •μž

- public: λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ 호좜, μ ‘κ·Ό κ°€λŠ₯ν•˜λ„λ‘ 곡개

μžλ°” 클래슀 μ„ μ–Έκ³Ό ꡬ성

 

객체 생성과 ν™œμš©

// λ°˜μ§€λ¦„κ³Ό 이름을 κ°€μ§„ Circle 클래슀λ₯Ό μž‘μ„±ν•˜κ³ ,
// Circle 클래슀의 객체 μƒμ„±ν•˜κΈ°

public class Circle {
	int radius;		// μ›μ˜ λ°˜μ§€λ¦„ ν•„λ“œ
	String name;	// μ›μ˜ 이름 ν•„λ“œ 
	
	public double getArea() {	// 멀버 λ©”μ†Œλ“œ 
		return 3.14*radius*radius;
	}
	
	public static void main(String[] args) {
		Circle pizza;	// 객체에 λŒ€ν•œ 레퍼런슀 λ³€μˆ˜ pizza μ„ μ–Έ
		pizza = new Circle();	// Circle 객체 생성 
		pizza.radius = 10;	// ν”Όμžμ˜ λ°˜μ§€λ¦„μ„ 10으둜 μ„€μ •
		pizza.name = "μžλ°”ν”Όμž";	// ν”Όμžμ˜ 이름 μ„€μ •
		double area = pizza.getArea();	// ν”Όμžμ˜ 면적 μ•Œμ•„λ‚΄κΈ°
		System.out.println(pizza.name + "의 면적은 " + area);
		
		Circle donut = new Circle();	// Circle 객체 생성 
		donut.radius = 2;	// λ„λ„›μ˜ λ°˜μ§€λ¦„μ„ 2둜 μ„€μ •
		donut.name = "μžλ°”λ„λ„›";	// λ„λ„›μ˜ 이름 μ„€μ •
		area = donut.getArea();	 // 도넛 면적 μ•Œμ•„λ‚΄κΈ°
		System.out.println(donut.name + "의 면적은 " + area);
	}
}

pizza와 donut 객체

1. 레퍼런슀 λ³€μˆ˜ μ„ μ–Έ

Circle pizza;
// 레퍼런슀 λ³€μˆ˜ pizza μ„ μ–Έ

2. 객체 생성

pizza = new Circle();
// new μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ Circle 객체 생성

3. 객체 멀버 μ ‘κ·Ό

객체레퍼런슀.멀버

pizza.radius = 10; // pizza 객체의 radius 값을 10으둜 μ„€μ •
pizza.name = "μžλ°”ν”Όμž"; // pizza 객체의 name에 "μžλ°”ν”Όμž" λŒ€μž…
double area = pizza.getArea(); // pizza 객체의 getArea() λ©”μ†Œλ“œ 호좜

μƒμ„±μž

- 객체가 생성될 λ•Œ μ΄ˆκΈ°ν™” λͺ©μ μœΌλ‘œ μ‹€ν–‰λ˜λŠ” λ©”μ†Œλ“œ

- 객체가 μƒμ„±λ˜λŠ” μˆœκ°„ μžλ™ 호좜 (리턴값 X)

package test1;

public class Circle2 {
	int radius;
	String name;
	
	public Circle2() {	// λ§€κ°œλ³€μˆ˜ μ—†λŠ” μƒμ„±μž 
		radius = 1; name= "";	// radius의 μ΄ˆκΈ°κ°’μ€ 1 
	}
	
	public Circle2(int r, String n) {	// λ§€κ°œλ³€μˆ˜λ₯Ό κ°€μ§„ μƒμ„±μž 
		radius = r; name = n;	// radius와 name ν•„λ“œ μ΄ˆκΈ°ν™” 
	}
	
	public double getArea() {
		return 3.14 * radius * radius;
	}
	
	public static void main(String[] args) {
		Circle2 pizza = new Circle2(10, "μžλ°”ν”Όμž");	// Circle2 객체 생성, λ°˜μ§€λ¦„ 10
		double area = pizza.getArea();
		System.out.println(pizza.name + "의 면적은 " + area);
		
		Circle2 donut = new Circle2();	// Circle2 객체 생성, λ°˜μ§€λ¦„ 1 
		donut.name = "λ„λ„›ν”Όμž";
		area = donut.getArea();
		System.out.println(donut.name + "의 면적은 " + area);
	}
}

- μƒμ„±μž 이름은 클래슀 이름과 λ™μΌν•˜λ‹€.

- μƒμ„±μžλ₯Ό μ—¬λŸ¬ 개 μž‘μ„±ν•  수 μžˆλ‹€.

- μƒμ„±μžλŠ” 객체λ₯Ό 생성할 λ•Œ ν•œ 번만 ν˜ΈμΆœλœλ‹€.

- μƒμ„±μžμ— 리턴 νƒ€μž…μ„ μ§€μ •ν•  수 μ—†λ‹€.

- μƒμ„±μžμ˜ λͺ©μ μ€ 객체가 생성될 λ•Œ, ν•„μš”ν•œ 초기 μž‘μ—…μ„ μœ„ν•¨μ΄λ‹€.

 

κΈ°λ³Έ μƒμ„±μž

class Circle {
	public Circle() { }	// κΈ°λ³Έ μƒμ„±μž
}

- 맀개 λ³€μˆ˜κ°€ μ—†κ³  μ‹€ν–‰ μ½”λ“œκ°€ μ—†μ–΄ 아무 일도 ν•˜μ§€ μ•Šκ³  λ‹¨μˆœ λ¦¬ν„΄ν•˜λŠ” μƒμ„±μž

- λ””ν΄νŠΈ μƒμ„±μžλΌκ³ λ„ λΆ€λ₯Έλ‹€.

- ν΄λž˜μŠ€μ— μƒμ„±μžκ°€ ν•˜λ‚˜λ„ μ„ μ–Έλ˜μ–΄ μžˆμ§€ μ•Šμ€ 경우, μ»΄νŒŒμΌλŸ¬λŠ” κΈ°λ³Έ μƒμ„±μžλ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•œλ‹€.

 

this 레퍼런슀

- 객체 μžμ‹ μ— λŒ€ν•œ λ ˆνΌλŸ°μŠ€λ‘œμ„œ λ©”μ†Œλ“œ μ•ˆμ—μ„œ μ‚¬μš©λœλ‹€.

- ν˜„μž¬ 객체λ₯Ό 가리킨닀.

- static λ©”μ†Œλ“œμ—μ„œλŠ” μ‚¬μš©ν•  수 μ—†λ‹€.

class Circle {
	int radius;
	public Circle() { this.radius = 1; }
	public Circle(int radius) { this.radius = radius; }
	public double getArea() { return 3.14*this.radius*this.radius; }
	...
}

 

this()

- 클래슀 λ‚΄μ—μ„œ μƒμ„±μžκ°€ λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  λ•Œ μ‚¬μš©

- μƒμ„±μžμ—μ„œλ§Œ μ‚¬μš©λœλ‹€.

- λ°˜λ“œμ‹œ 같은 클래슀의 λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  λ•Œ μ‚¬μš©λœλ‹€.

- λ°˜λ“œμ‹œ μƒμ„±μžμ˜ 첫 번째 λ¬Έμž₯으둜 μ‚¬μš©λ˜μ–΄μ•Ό ν•œλ‹€.

public class Book {
	String title;
	String author;
	
	void show() { System.out.println(title + " " + author); }
	
	public Book() {
		this("", "");
		System.out.println("μƒμ„±μž 호좜됨");
	}
	
	public Book(String title) {
		this(title, "μž‘μžλ―Έμƒ");
	}
	
	public Book(String title, String author) {
		this.title = title;
		this.author = author;
	}
	
	public static void main(String[] args) {
		Book littePrince = new Book("μ–΄λ¦°μ™•μž", "생텍μ₯νŽ˜λ¦¬");
		Book loveStory = new Book("좘ν–₯μ „");
		Book emptyBook = new Book();
		loveStory.show();
	}
}

μ‹€ν–‰κ²°κ³Ό

 


객체 λ°°μ—΄

- 객체에 λŒ€ν•œ 레퍼런슀λ₯Ό μ›μ†Œλ‘œ κ°–λŠ” λ°°μ—΄

// 5개의 Circle 객체 배열을 μƒμ„±ν•˜κ³  ν™œμš©ν•˜λŠ” μ½”λ“œ 

Circle [] c;	// Circle 배열에 λŒ€ν•œ 레퍼런슀 λ³€μˆ˜ c μ„ μ–Έ 
c = new Circle[5];	// 레퍼런슀 λ°°μ—΄ 생성 

for (int i=0; i<c.length; i++)
	c[i] = new Circle(i);	// 각 μ›μ†Œ 객체 생성 

for (int i=0; i<c.length; i++)
	System.out.print((int)(c[i].getArea()) + " ");	// λ°°μ—΄μ˜ μ›μ†Œ 객체 μ‚¬μš©

Circle 객체 λ°°μ—΄μ˜ 생성 κ³Όμ •

 

λ°°μ—΄ μ„ μ–Έ 및 생성

1. 배열에 λŒ€ν•œ 레퍼런슀 μ„ μ–Έ

- 레퍼런슀 λ³€μˆ˜λ§Œ μ„ μ–Έν•  뿐 배열을 μƒμ„±ν•˜λŠ” 것은 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— λ°°μ—΄μ˜ 개수λ₯Ό μ§€μ •ν•˜λ©΄ μ•ˆ λœλ‹€.

Circle [] c;

2. 레퍼런슀 λ°°μ—΄ 생성

c = new Circle[5];	// Circle 객체에 λŒ€ν•œ 레퍼런슀 5개 생성

3. 객체 생성

- λ‹€μŒ μ½”λ“œλŠ” Circle 객체λ₯Ό ν•˜λ‚˜μ”© μƒμ„±ν•˜μ—¬ λ°°μ—΄ c[]의 각 λ ˆνΌλŸ°μŠ€μ— λŒ€μž…ν•œλ‹€.

for (int i=0; i<c.length; i++)
	c[i] = new Circle(i);

 

λ°°μ—΄μ˜ μ›μ†Œ 객체 μ ‘κ·Ό

- λ‹€μŒκ³Ό 같이 λ°°μ—΄ c의 i번째 객체λ₯Ό μ ‘κ·Όν•˜κΈ° μœ„ν•΄μ„œλŠ” c[i] 레퍼런슀λ₯Ό μ‚¬μš©ν•œλ‹€.

for (int i=0; i<c.length; i++)
	System.out.print((int)(c[i].getArea()) + " ");

 


λ©”μ†Œλ“œ ν™œμš©κ³Ό 객체 μΉ˜ν™˜

λ©”μ†Œλ“œ ν˜•μ‹

μžλ°”μ˜ λ©”μ†Œλ“œ ν˜•μ‹

1. μ ‘κ·Ό μ§€μ •μž

- public: 클래슀 λ‚΄λΆ€/μ™ΈλΆ€μ—μ„œ λͺ¨λ‘ 호좜 κ°€λŠ₯

- private: 클래슀 λ©€λ²„λ“€λ§Œ 호좜 κ°€λŠ₯

- protected: λ™μΌν•œ νŒ¨ν‚€μ§€μ˜ ν΄λž˜μŠ€λ“€κ³Ό 상속받은 μ„œλΈŒ ν΄λž˜μŠ€μ—μ„œ 호좜 κ°€λŠ₯

- λ””ν΄νŠΈ μ ‘κ·Ό μ§€μ •(μƒλž΅): λ™μΌν•œ νŒ¨ν‚€μ§€ λ‚΄μ˜ λͺ¨λ“  ν΄λž˜μŠ€μ—μ„œ 호좜 κ°€λŠ₯

2.  λ¦¬ν„΄ νƒ€μž…

- λ©”μ†Œλ“œκ°€ ν˜ΈμΆœμžμ—κ²Œ 리턴할 κ°’μ˜ νƒ€μž…

 

인자 전달

- 값에 μ˜ν•œ 호좜 (call-by-value)

- ν˜ΈμΆœν•˜λŠ” μ‹€μΈμžμ˜ 값이 λ³΅μ‚¬λ˜μ–΄ λ©”μ†Œλ“œμ˜ 맀개 λ³€μˆ˜μ— μ „λ‹¬λœλ‹€.

1. κΈ°λ³Έ νƒ€μž…μ˜ 값이 μ „λ‹¬λ˜λŠ” 경우

- ν˜ΈμΆœμžκ°€ κ±΄λ„€λŠ” 값이 λ©”μ†Œλ“œμ˜ 맀개 λ³€μˆ˜μ— λ³΅μ‚¬λ˜μ–΄ 전달

public class CallbyValue {
	public static void main(String[] args) {
		int n = 10;
		
		increase(n);	// increase λ©”μ†Œλ“œ 호좜
		
		System.out.println(n);	// increase()κ°€ λλ‚˜κ³  μ§€μ—­ λ³€μˆ˜ n의 값은 μ—¬μ „νžˆ 10
	}
	
    	// 싀행될 λ•Œ, 맀개 λ³€μˆ˜ m이 생기고 n의 값을 전달받아 10으둜 μ΄ˆκΈ°ν™”
	static void increase(int m) {	
		m = m + 1;	// m의 값을 1 μ¦κ°€μ‹œν‚€μ§€λ§Œ, λ³€μˆ˜ n의 값을 λ°”κΎΈμ§€λŠ” λͺ»ν•œλ‹€.
	}
}

2. 객체가 μ „λ‹¬λ˜λŠ” 경우

- 객체의 레퍼런슀 값이 μ „λ‹¬λœλ‹€.

public class ReferencePassing {
	public static void main(String[] args) {
		Circle pizza = new Circle(10);
		
		increase(pizza);	// increase λ©”μ†Œλ“œ 호좜
		
		System.out.println(pizza.radius);	// 11 좜λ ₯
	}
	
    	// λ§€κ°œλ³€μˆ˜ m이 생기고, pizza λ³€μˆ˜μ— μ €μž₯된 κ°’(레퍼런슀)이 m에 λ³΅μ‚¬λ˜μ–΄, 
    	// m은 pizzaκ°€ κ°€λ¦¬ν‚€λŠ” 객체λ₯Ό ν•¨κ»˜ κ°€λ¦¬ν‚€κ²Œ λœλ‹€.
	static void increase(Circle m) {	
		m.radius++; // radiusλŠ” 11둜 λ³€κ²½λ˜κ³  increase()κ°€ μ’…λ£Œν•΄λ„ κ·ΈλŒ€λ‘œ λ‚¨λŠ”λ‹€.
	}
}

3. 배열이 μ „λ‹¬λ˜λŠ” 경우

- 배열에 λŒ€ν•œ 레퍼런슀만 μ „λ‹¬λœλ‹€.

public class ArrayPassing {

	public static void main(String[] args) {
		int a[] = {1, 2, 3, 4, 5};
		
		increase(a);
		
		for (int i=0; i<a.length; i++)
			System.out.print(a[i] + " ");
	}
	
	// λ§€κ°œλ³€μˆ˜ arrayλŠ” μ •μˆ˜ν˜• 배열에 λŒ€ν•œ λ ˆνΌλŸ°μŠ€λ‘œμ„œ
	// λ°°μ—΄ aλ₯Ό κ°€λ¦¬ν‚€κ²Œ λ˜μ–΄ 두 λ ˆνΌλŸ°μŠ€λŠ” ν•˜λ‚˜μ˜ 배열을 κ³΅μœ ν•œλ‹€. 
	static void increase(int[] array) {
		for (int i=0; i<array.length; i++)
			array[i]++;
	}

}

 

λ©”μ†Œλ“œ μ˜€λ²„λ‘œλ”©

- 클래슀 내에 이름이 κ°™μ§€λ§Œ 맀개 λ³€μˆ˜μ˜ νƒ€μž…μ΄λ‚˜ κ°œμˆ˜κ°€ μ„œλ‘œ λ‹€λ₯Έ μ—¬λŸ¬ 개의 λ©”μ†Œλ“œ

- λ©”μ†Œλ“œμ˜ 리턴 νƒ€μž…μ€ μƒκ΄€μ—†μŒ.

public static void main(String args[]) {
	MethodSample a = new MethodSample();
	
	int i = a.getSum(1, 2);
	
	int j = a.getSum(1, 2, 3);
	
	double k = a.getSum(1.1, 2.2);
}

public class MethodSample {
	public int getSum(int i, int j) {
		return i + j;
	}
	
	public int getSum(int i, int j, int k) {
		return i + j + k;
	}
	
	public double getSum(double i, double j) {
		return i + j;
	}
}

 

객체 μΉ˜ν™˜ μ‹œ μ£Όμ˜ν•  점

- 객체의 μΉ˜ν™˜μ€ 객체λ₯Ό λ³΅μ‚¬ν•˜λŠ” 것이 μ•„λ‹ˆλ‹€.

public class Samp {
	int id;
	public Samp(int x) {this.id = x;}
	public void set(int x) {this.id = x;}
	public int get() {return this.id;}
	
	public static void main(String[] args) {
		Samp ob1 = new Samp(3);
		Samp ob2 = new Samp(4);
		Samp s;
		
		s = ob2; 
        	// 객체의 μΉ˜ν™˜. sλŠ” ob2의 객체λ₯Ό 가리킴 
		ob1 = ob2; 
        	// 객체의 μΉ˜ν™˜. ob1은 ob2의 객체λ₯Ό κ°€λ¦¬ν‚€κ²Œ 됨 
        	// μ›λž˜ ob1이 κ°€λ¦¬ν‚€λ˜ κ°μ²΄λŠ” 아무것도 가리킀지 μ•Šκ²Œ λ˜μ–΄,
        	// 더이상 ν”„λ‘œκ·Έλž¨μ—μ„œ μ ‘κ·Όν•  수 μ—†λŠ” μƒνƒœκ°€ λœλ‹€. => κ°€λΉ„μ§€
		System.out.println("ob1.id="+ob1.get());
		System.out.println("ob2.id="+ob2.get());
	}
}

 


κ°€λΉ„μ§€

- μ°Έμ‘°ν•˜λŠ” λ ˆνΌλŸ°μŠ€κ°€ ν•˜λ‚˜λ„ μ—†λŠ” κ°μ²΄λ‚˜ λ°°μ—΄

- ν”„λ‘œκ·Έλž¨μ—μ„œ 더이상 μ ‘κ·Όν•  수 μ—†λ‹€.

 

κ°€λΉ„μ§€ μ»¬λ ‰μ…˜

- κ°€λΉ„μ§€κ°€ λ§Žμ•„μ§€λ©΄ μ‘μš© ν”„λ‘œκ·Έλž¨μ—κ²Œ 할당해쀄 수 μžˆλŠ” κ°€μš© λ©”λͺ¨λ¦¬μ˜ 양이 쀄어든닀.

- κ°€λΉ„μ§€κ°€ 점점 λŠ˜μ–΄λ‚˜ κ°€μš© λ©”λͺ¨λ¦¬κ°€ 0이 되면, μžλ°” μ‘μš©ν”„λ‘œκ·Έλž¨μ€ 더이상 μ‹€ν–‰ν•  수 μ—†λ‹€.

- κ°€μš© λ©”λͺ¨λ¦¬ 곡간이 일정 크기 μ΄ν•˜λ‘œ 쀄어듀면, μžλ°” 가상 κΈ°κ³„λŠ” μžλ™μœΌλ‘œ κ°€λΉ„μ§€λ₯Ό νšŒμˆ˜ν•˜μ—¬ κ°€μš© λ©”λͺ¨λ¦¬ 곡간을 λŠ˜λ¦°λ‹€.

 

κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ κ°•μ œ μˆ˜ν–‰

- System λ˜λŠ” Runtime 객체의 gc() λ©”μ†Œλ“œ 호좜

Systme.gc()	// κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ μžλ™ μš”μ²­

 


μ ‘κ·Ό μ§€μ •μž

νŒ¨ν‚€μ§€

- μžλ°”μ—μ„œλŠ” μƒν˜Έ κ΄€λ ¨ μžˆλŠ” 클래슀 νŒŒμΌλ“€μ„ νŒ¨ν‚€μ§€μ— μ €μž₯ν•˜μ—¬ κ΄€λ¦¬ν•œλ‹€.

- μžλ°” ν”„λ‘œκ·Έλž¨μ€ ν•˜λ‚˜ μ΄μƒμ˜ νŒ¨ν‚€μ§€λ‘œ κ΅¬μ„±λœλ‹€.

 

μ ‘κ·Ό μ§€μ •μž

- private (μ™ΈλΆ€λ‘œλΆ€ν„° μ™„λ²½ 차단)

- λ””ν΄νŠΈ (동일 νŒ¨ν‚€μ§€ ν—ˆμš©)

- protected (동일 νŒ¨ν‚€μ§€ + μžμ‹ 클래슀 ν—ˆμš©)

- public (λͺ¨λ“  클래슀)

 


static 멀버

νŠΉμ„±

- ν΄λž˜μŠ€λ‹Ή ν•˜λ‚˜λ§Œ μƒμ„±λ˜λŠ” 멀버

- λ™μΌν•œ 클래슀의 λͺ¨λ“  객체듀이 곡유

- 클래슀 멀버라고 뢀름. (non-static λ©€λ²„λŠ” μΈμŠ€ν„΄μŠ€ 멀버)

- 객체가 μƒμ„±ν•˜κΈ° μ „, μ†Œλ©Έλœ 후에도 static λ©€λ²„λŠ” 곡간을 μ°¨μ§€ν•˜κ³  μžˆλ‹€. (외뢀에 λ³„λ„λ‘œ 쑴재)

 

μ‚¬μš©

- 객체 μ΄λ¦„μ΄λ‚˜ 클래슀 μ΄λ¦„μœΌλ‘œ λͺ¨λ‘ ν™œμš©ν•  수 μžˆλ‹€.

StaticSample.m = 3; // 클래슀 μ΄λ¦„μœΌλ‘œ static ν•„λ“œ μ ‘κ·Ό
StaticSample.f(); // 클래슀 μ΄λ¦„μœΌλ‘œ static λ©”μ†Œλ“œ 호좜

 

ν™œμš©

- μ „μ—­ λ³€μˆ˜μ™€ μ „μ—­ ν•¨μˆ˜λ₯Ό λ§Œλ“€ λ•Œ ν™œμš©

- 곡유 멀버λ₯Ό λ§Œλ“€κ³ μž ν•  λ•Œ ν™œμš©

 

μ œμ•½ 쑰건

- static λ©”μ†Œλ“œλŠ” 였직 static λ©€λ²„λ§Œ μ ‘κ·Όν•  수 μžˆλ‹€.

- static λ©”μ†Œλ“œμ—μ„œλŠ” thisλ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€.

 


final

final 클래슀

- 더이상 클래슀 상속 λΆˆκ°€λŠ₯

 

final λ©”μ†Œλ“œ

- 더이상 μ˜€λ²„λΌμ΄λ”© λΆˆκ°€λŠ₯

 

final ν•„λ“œ

- μƒμˆ˜ μ„ μ–Έ

- μ΄ˆκΈ°κ°’ μ§€μ •. 싀행쀑 κ°’ λ³€κ²½ X