PlayData/Java

[Day7 | Java] 클래슀 / λ©”λͺ¨λ¦¬ / μΈμŠ€ν„΄μŠ€λ©€λ²„μ™€ 정적멀버

κΉ€μœ λ‹ˆμ½˜ 2021. 11. 17. 17:45

Book02.class 와 Cla02.class의 파일 

class 파일이 μ›λž˜ λ”°λ‘œ λ§Œλ“€μ–΄μ§€λŠ” κ²ƒμœΌλ‘œ 생각해야. 

 

 

ν•œ νŒ¨ν‚€μ§€μ— μ‘΄μž¬ν•˜λŠ” λͺ¨λ“  νŒŒμΌμ€ μ•”λ¬΅μ μœΌλ‘œ importλ˜μ–΄μžˆλ‚˜? --> λ°˜μ€ λ§žλŠ” 이야기 

어떀건 import ν•΄μ•Όν•˜κ³  어떀건 μ•„λ‹ˆμ–΄μ•Ό ν•˜λ‚˜..? 

 

μžλ°”λŠ” 같은 곡간 디렉토리에 λ“€μ–΄κ°€κΈ° λ•Œλ¬Έμ—, ν΄λž˜μŠ€μ— λ„˜λ²„λ§μ„ ν•˜λ©΄ μ’‹μŒ 

 

 

If, λ‚˜λ§Œ μ“Έκ±°μ•Ό  --> λ©€λ²„λ³€μˆ˜ μžˆλŠ” 클래슀 μœ„μ— μ“΄λ‹€.

if,  λ‹€λ₯Έ κ³³μ—μ„œλ„ μ“Έκ±°μ•Ό --> 클래슀 λΆ„λ¦¬ν•΄μ„œ μ“΄λ‹€ --> λ©”λͺ¨λ¦¬ μ„±λŠ₯ 상 더 μ’‹μŒ 

더보기

 

//사칙연산 클래슀
class Calc03{
	void Sum(int i, int j) { System.out.println(i+j);} 

}

public class Cla03 {
	
	static void Sub(int i, int j) { System.out.println(i-j);} 
	
	public static void main(String[] args) {
		
		int a = 20, b = 10; 

		Sub(a, b);

		Calc03 c1 = new Calc03(); // λ‹€λ₯Έ ν΄λž˜μŠ€μ— μžˆλŠ” 멀버λ₯Ό μ“Έ λ•ŒλŠ” 선언을 ν•˜κ³  μ‚¬μš©ν•΄μ•Ό 함.
		c1.Sum(a, b);  
		

	}
}

 

더보기

μˆ˜μ—… λ‚΄μš© μ½”λ“œ 슀크립트: 

//사칙연산 클래슀
class Calc03{
	
	//Instance Member (각자 μ“°λŠ”) 
	void Sum(int i, int j) { System.out.println(i+j);} 
	
	//Static Member (같이 μ“°λŠ”) 
	static void Mul(int i, int j) {System.out.println(i*j); } // static -->곡용곡

public class Cla03 {
	
	static void Sub(int i, int j) { System.out.println(i-j);} 
	
	void Div(int i, int j) { System.out.println(i/j);} // static 없어도 λ˜λŠ”μ§€ 보기 μœ„ν•¨ / 
	// ꢌμž₯μ•ˆν•¨. 클래슀 λ‚΄λΆ€μ—μ„œλŠ” 메인 λ©”μ†Œλ“œ λ•Œλ¬Έμ— 메인 λ©”λͺ¨λ¦¬μ— μ˜¬λΌμ™€μžˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³ , 또 올리게 되기 λ•Œλ¬Έ.   

	
	public static void main(String[] args) {
		
		int a = 20, b = 10; 
		
		Sub(a, b);
		
		
		Calc03 c1 = new Calc03(); // λ‹€λ₯Έ ν΄λž˜μŠ€μ— μžˆλŠ” 멀버λ₯Ό μ“Έ λ•ŒλŠ” 선언을 ν•˜κ³  μ‚¬μš©ν•΄μ•Ό 함.
		// Instance 멀버: Instance 생성 new ~~(); λ³€μˆ˜.멀버; 
		c1.Sum(a, b);  
		
	
		Calc03 c2 = new Calc03();
		c2.Sum(200, 300);
		//μ–΄λ–€ λ©”μ†Œλ“œλŠ” κ·Έ κ³΅κ°„μ—μ„œλ§Œ μžˆμ–΄μ•Όν•œλ‹€ --> λΆ„λ¦¬ν•΄μ„œμ‚¬μš©
		//μ–΄λ–€ λ©”μ†Œλ“œλŠ” 곡용 κ³΅κ°„μ—μ„œ μ‚¬μš©ν•œλ‹€.. ==> static
		
		Calc03.Mul(a, b); // static 멀버 : 클래슀λͺ….λ©€
		//Cla03.Sub(a,b)둜 λ˜μ–΄μžˆλŠ” 것인데 같은 ν΄λž˜μŠ€λΌμ„œ μƒλž΅ν•˜κ³  μ“΄λ‹€. 
		
//		Cla03 c3 = new Cla03();
//		c3.Div(300, 200);
		
	}

}}

 

Ex) 

κ³ μ‹œμ› λ°© 내에 ν™”μž₯μ‹€ --> μΈμŠ€ν„΄μŠ€ 

κ³ μ‹œμ› 곡용 ν™”μž₯μ‹€ --> static

==> Instance와 static이 μ’‹μ€μ§€λŠ” 상황에 따라 달라짐. κ·ΈλŸ¬λ‚˜ μ–΄λŠμ •λ„μ˜ 기쀀은 있음. 

 

ν΄λž˜μŠ€λŠ” 보톡 3κ°€μ§€λ‘œ λ‚˜λ‰¨

1. 메인 λ©”μ†Œλ“œκ°€ μžˆλŠ” 기반 클래슀 (λ©”λͺ¨λ¦¬ ꡬ성이 λŒ€λΆ€λΆ„ μŠ€νƒμ— μ €μž₯) 

2. Tool box 클래슀(static : λ©”μ†Œλ“œ μ˜μ—­μ— λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήν•΄μ„œ μ €μž₯) 

3. Data Type 클래슀 (μ£Ό 데이터, μ„œμ  : μ±…, λ™μ‚¬λ¬΄μ†Œ : μ‚¬λžŒ / λŒ€λΆ€λΆ„ μΈμŠ€ν„΄μŠ€, λŒ€λΆ€λΆ„ νž™(Heap)에 μ €μž₯) 

μ˜ˆμ™ΈλŠ” μžˆμœΌλ‚˜ 크게보면 μ΄λ ‡κ²Œ λ‚˜λ‰œλ‹€. λ©”λͺ¨λ¦¬λ₯Ό 이해해야 λ°”λ₯Έ 섀계λ₯Ό ν•  수 μžˆλ‹€. 

 

 

static을 μ‚¬μš©ν•˜μ—¬ 경제 곡동체가 λ˜μ–΄λ²„λ¦° 지갑 w1κ³Ό m1: 

static을 μ‚¬μš©ν•˜μ—¬ 경제 곡동체가 λ˜μ–΄λ²„λ¦° 지갑 w1κ³Ό m1

μƒμ„±μž 

μƒμ„±μžλŠ” new μ—°μ‚°μžλ‘œ ν΄λž˜μŠ€λ‘œλΆ€ν„° 객체λ₯Ό 생성할 λ•Œ ν˜ΈμΆœλ˜μ–΄ 객체의 μ΄ˆκΈ°ν™”λ₯Ό λ‹΄λ‹Ή

객체 μ΄ˆκΈ°ν™” : ν•„λ“œλ₯Ό μ΄ˆκΈ°ν™”ν•˜κ±°λ‚˜ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•΄μ„œ 객체λ₯Ό μ‚¬μš©ν•  μ€€λΉ„λ₯Ό ν•˜λŠ” 것. 

 

μƒμ„±μž μ„ μ–Έ/ ν•„λ“œ μ΄ˆκΈ°ν™”

 

더보기
// μ²˜μŒλΆ€ν„° 데이터λ₯Ό μž…λ ₯ν•˜μ—¬ λ°”κΎΈκ³  μ‹Άλ‹€λ©΄, μƒμ„±μžλ₯Ό λ°”κΏ”μ£Όμ–΄μ•Ό ν•œλ‹€. 
// μƒμ„±μžλŠ” λ©”μ†Œλ“œμ˜ ν•œ 좕이닀.클래슀 이름과 λ™μΌν•΄μ•Όν•˜κ³ , μ•žμ— λ°˜ν™˜μ΄ μ—†μ–΄μ•Ό ν•œλ‹€. 
// μ±…p232
// 클래슀λ₯Ό νž™μ˜ κ³΅κ°„μ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•œ λ©”μ†Œλ“œκ°€ μƒμ„±μž λ©”μ†Œλ“œ

class Book06 {
	
	///////////p235 ν•„λ“œ μ΄ˆκΈ°ν™” //////////// 

		String title = "무제";
		String author = "미상"; 
		int    price = 0;   
		
		void pBook(){ System.out.println(title + "," + author + "," + price);}
		
//////////////////// ////////// ////////// ////////// ////////// ////////// ////////// ////////// /

		
//		μƒμ„±μž(Constructor) λ©”μ†Œλ“œ (voidκ°€ 숨겨져있음) 
//		Book06(){System.out.println("-->Book06() μ‹€ν–‰");}
		
		
/////////////////// μƒμ„±μž λ©”μ†Œλ“œ μ˜€λ²„λ”©(μƒμ„±μž μ„ μ–Έ)  //////////////////////// ////////// ////////// 

		Book06(String t, String a, int p){ title = t; author = a; price = p; }
		
		Book06(String t, String a){title = t; author = a;  }
	
		Book06(String t){title = t; }
		
		Book06(){System.out.println(); }}

//////////////////// ////////// ////////// ////////// ////////// ////////// ////////// 


public class Cla06 {

	public static void main(String[] args) {

		
		Book06 b1 = new Book06(); 		b1.pBook();

		Book06 b2 = new Book06("Java", "Tom", 30000); 		b2.pBook(); //μƒμ„±μž ν•„λ“œ μ΄ˆκΈ°ν™” 

		Book06 b3 = new Book06("IT", "Alice"); 		b3.pBook();

		Book06 b4 = new Book06("OPP"); 		b4.pBook();

		
		Book06 b0 = new Book06("Java", "Tom", 30000); 
		b0.pBook();

	}

}

 

μƒμ„±μž μ˜€λ²„λ‘œλ”©

μƒμ„±μž μ˜€λ²„λ‘œλ”©μ΄λž€ 맀개 λ³€μˆ˜λ₯Ό λ‹¬λ¦¬ν•˜λŠ” μƒμ„±μžλ₯Ό μ—¬λŸ¬ 개 μ„ μ–Έν•˜λŠ” 것. 

더보기
class Book09 {

	//ν•„λ“œ
	String title;
	String author; 
	int price; 
	
	void pBook() { System.out.println(title + ", "+ author + ", "+ price);}
	
    //μƒμ„±μž 
	Book09(String t, String a, int p){ title = t; author = a ; price = p; }
	Book09(String t, String a){ this(t, a, 40000); } // thisλ₯Ό Book09둜 λŒ€μ²΄ν•΄μ„œ 생각해야.클래슀 내에 μƒμ„±μžκ°€ μ—¬λŸ¬κ°œ μžˆλ‹€λ©΄, λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” 것이 this μƒμ„±μž 호좜/ p241
	Book09(String t){ this(t, "Jane"); } // λ‘κ°œμ§œλ¦¬λ₯Ό λ˜μ‘Œλ”λ‹ˆ μœ„ λ‘κ°œμ§œλ¦¬λ‘œ λ°›κ³ ,
	Book09(){ this("OOP"); } // ν•˜λ‚˜ 짜리λ₯Ό ν˜ΈμΆœν–ˆλ”λ‹ˆ μœ„λ‘œ, 
}
	
	
public class Cla09 {

	public static void main(String[] args) {
		
		
		Book09 b1 = new Book09();
		Book09 b2 = new Book09("Java");
		Book09 b3 = new Book09("Java", "Tom");
		Book09 b4 = new Book09("Java", "Tom", 30000);

		b1.pBook(); 
		b2.pBook();
		b3.pBook();
		b4.pBook();
		
	}
}

 

p241 ~ 243

λ‹€λ₯Έ μƒμ„±μž 호좜 : this() 

 

μ•„λž˜μ˜ 그림처럼 μ“Έ 일은 거의 μ—†μŒ

 

 

p247

λ©”μ†Œλ“œλŠ” μ–΄μ œ 미리 ν–ˆμŒ. κ·Έλž˜μ„œ μƒμ„±μžκ°€ 더 μ‰½κ²Œ 이해됨

μƒμ„±μžκ°€ λ¨Όμ € λ§Œλ“€μ–΄μ§€λŠ” 것은 맞음. κ·ΈλŸ¬λ‚˜ λ©”μ†Œλ“œλ₯Ό 닀루어야 μƒμ„±μž 이해가 쉬움. κ΅Ώκ΅Ώ

 

λ©”μ†Œλ“œ κ΅¬μ„±μš”μ†Œ 4가지 : 

  • 리턴 νƒ€μž…
  • λ©”μ†Œλ“œ 이름
  • 맀개 λ³€μˆ˜ μ„ μ–Έ
  • λ©”μ†Œλ“œ μ‹€ν–‰ 블둝 

 

p252

λ§€κ°œλ³€μˆ˜ 개수λ₯Ό λͺ¨λ₯Όλ•Œ

가변길이(Meth03)  λ˜λŠ” ... λ₯Ό μ“°κ±°λ‚˜ (Meth04)

 

p255

Return문

λ©”μ†Œλ“œ μ„ μ–Έμ—μ„œ return νƒ€μž…μ΄ μžˆλŠ” λ©”μ†Œλ“œλŠ” λ°˜λ“œμ‹œ returnλ¬Έ μ‚¬μš©ν•΄μ„œ returnκ°’ 지정 ν•„μš”(int, String λ“±λ“±)

returnκ°’ μ—†λŠ” 경우 return type으둜 void μ„ μ–Έ

 

 

 

λ©”λͺ¨λ¦¬ κ΄€λ ¨ μ„€λͺ…(p166)  :  

* μ•Œκ³ λ¦¬μ¦˜ 곡뢀할 λ•Œ ν•„μˆ˜! κ·ΈλŸ¬λ‚˜ κ°„λ‹¨ν•˜κ²Œ λ°°μš°λŠ” κ΄€μ μ—μ„œ 열어보지...말아야.. ν• ........... * 

JVM은 운영 μ²΄μ œμ—μ„œ 할당받은 λ©”λͺ¨λ¦¬ μ˜μ—­μ„ μ•„λž˜μ™€ 같이 κ΅¬λΆ„ν•˜μ—¬ μ‚¬μš©

λ©”μ†Œλ“œ μ˜μ—­

λ©”μ†Œλ“œ μ˜μ—­μ€ JVM이 μ‹œμž‘ν•  λ•Œ μƒμ„±λ˜κ³  λͺ¨λ“  μŠ€λ ˆλ“œκ°€ κ³΅μœ ν•˜λŠ” μ˜μ—­.

λ©”μ†Œλ“œ μ˜μ—­μ—μ„œλŠ” μ½”λ“œμ—μ„œ μ‚¬μš©λ˜λŠ” ν΄λž˜μŠ€λ“€μ„ ν΄λž˜μŠ€λ‘œλ”λ‘œ 읽어 ν΄λž˜μŠ€λ³„λ‘œ μ •μ ν•„λ“œμ™€ μƒμˆ˜, λ©”μ†Œλ“œ μ½”λ“œ, μƒμ„±μž μ½”λ“œ λ“œμ„ λΆ„λ₯˜ν•΄μ„œ μ €μž₯

 

νž™ μ˜μ—­

객체와 배열이 μƒμ„±λ„λŠ” μ˜μ—­. μ—¬κΈ°μ„œ μƒμ„±λœ 객체와 배열은 JVM μŠ€νƒ μ˜μ—­μ˜ λ³€μˆ˜λ‚˜ λ‹€λ₯Έ 객체의 ν•„λ“œμ—μ„œ μ°Έμ‘°.

 

μŠ€νƒ μ˜μ—­

λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ ν”„λ ˆμž„μ„ μΆ”κ°€(push)ν•˜κ³  λ©”μ†Œλ“œκ°€ μ’…λ£Œλ˜λ©΄ ν•΄λ‹Ή ν”„λ ˆμž„μ„ μ’…λ£Œ(pop)ν•˜λŠ” λ™μž‘ μˆ˜ν–‰. 

 

μŠ€νƒ μ˜μ—­: Last in First out --> λ”°λΌμ„œ λ©”μ†Œλ“œκ°€ μƒμ„±λ˜λ©΄ 첫 번째 λ©”μ†Œλ“œλŠ” Main Method κ°€ 올 수 밖에 μ—†μŒ. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 같은 λ³€μˆ˜λΌλ„ main method 내에 μžˆλŠ” λ³€μˆ˜λŠ” λ©”μΈλ©”μ†Œλ“œκ°€ λλ‚˜κΈ° μ „κΉŒμ§€λŠ” μ•ˆμ‚¬λΌμ§€μ§€λ§Œ, 그렇지 μ•Šμ€ 경우 μ“°μž„μ„ λ‹€ν•˜λ©΄ 사라짐. 

Heap μ˜μ—­: λ¬΄μ§ˆμ„œν•œ 곡간. 

 

⭐️ μŠ€νƒμ— μ˜¬λΌμ˜€λŠ” 것은 λ©”μ†Œλ“œ λ‹¨μœ„λ‘œ, ν”„λ ˆμž„μ΄λž€ μš©μ–΄λ‘œ λ§Œλ“€μ–΄μ§ ⭐️

* 이클립슀 tip: 
ctrl+shift+b κ°€ ν•΄λ‹Ή 쀄에 브레이크 포인트 μž‘μ•„μ£ΌλŠ” 단좕킀/   κ·Έ 이후에 f11 λˆ„λ₯Έλ’€μ— f6 λˆŒλŸ¬μ„œ ν•œμ€„ μ‹€ν–‰
or μ•ž λΆ€λΆ„μ—μ„œ λ”λΈ”ν΄λ¦­ν•˜λ©΄ 브레이크 ν¬μΈνŠΈκ°€ 찍힘! 

 

 

μ§€κΈˆμ€ 같은 클래슀 λ‚΄μ—μ„œ  μ–˜κΈ°ν•˜μ§€λ§Œ, 

상속 관계가 되면, 

λΆ€λͺ¨ μžμ‹ κ°„μ˜ λ©”λͺ¨λ¦¬ 호좜이 μΌμ–΄λ‚˜κΈ° μ‹œμž‘ν•  것. 

κ·Έλ ‡κ²Œ 되면 λΆ€λͺ¨ μƒμ„±μž 3개, μ•„λž˜ μƒμ„±μž 3개 ꡐ차가 λ‹€λ£¨μ–΄μ§ˆκ±°κ³ ... (많이 쓰이진 μ•Šμ§€λ§Œ)

μ•Œμ•„λ‘λ©΄ νŽΈν•©λ‹ˆλ‹€. ^~^

 

 

였.. λ‚˜ μ•½κ°„ ν¬κΈ°ν•˜κ³ μ‹Άμ€λ°  πŸ₯° 

 

였늘 κ°•μ‚¬λ‹˜μ˜ ν•œ λ§ˆλ””: 

μ§€κΈˆμ˜ 도전을 λ„ˆλ¬΄ λ‘λ €μ›Œν•˜μ§€ λ§ˆμ„Έμš”