λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’»/JAVA

[Java] 9일차 : 클래슀(class)와 객체(Object) μƒμ„±μž

by λ”°κΆˆ 2024. 2. 26.

 

μƒμ„±μž

 

new μ—°μ‚°μžμ™€ 같이 μ‚¬μš©λ˜μ–΄ 객체λ₯Ό `생성`ν•  λ•Œ 호좜되며, 객체 생성 ν›„ μƒμ„±μž λͺΈμ²΄λ₯Ό μ‹€ν–‰ν•˜μ—¬ μ΄ˆκΈ°ν™”λ₯Ό λ‹΄λ‹Ή.

(μžλ°”μ˜ λͺ¨λ“  ν΄λž˜μŠ€λŠ” μƒμ„±μžκ°€ λ°˜λ“œμ‹œ 쑴재 ν•˜λ©°, ν•˜λ‚˜ 이상 κ°€μ§ˆ 수 μžˆλ‹€)

 

 

β–Ά 객체 생성

     ν΄λž˜μŠ€λͺ… μ°Έμ‘°λ³€μˆ˜ = new 클래슀λͺ…([인수]);

     μΈν„°νŽ˜μ΄μŠ€λͺ… μ°Έμ‘°λ³€μˆ˜ = new 클래슀λͺ…([인수]);

 

νŠΉμ§•

  • μƒμ„±μžλŠ” ν΄λž˜μŠ€μ™€ λ™μΌν•œ 이름을 κ°–λŠ”λ‹€.
  • μƒμ„±μžλŠ” 리턴 νƒ€μž…μ„ μ •μ˜ ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • 인수λ₯Ό κ°€μ§ˆ 수 있으며, 쀑볡 μ •μ˜κ°€ κ°€λŠ₯ν•Ÿ.
  • μƒμ„±μžλŠ” μžλ°” 클래슀의 멀버가 μ•„λ‹ˆλ©°, μƒμ†λ˜μ§€ μ•ŠλŠ”λ‹€. λ”°λΌμ„œ, μ˜€λ²„λΌμ΄λ”©μ˜ λŒ€μƒμ΄ 될 수 μ—†λ‹€.
  • 일반적인 λ©”μ†Œλ“œ 처럼 ν˜ΈμΆœν•  수 μ—†κ³ , 객체λ₯Ό 생성 ν•  λ•Œ new μ—°μ‚°μž λ‹€μŒ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•œλ‹€.
  • μƒμ„±μžλŠ” this()λ₯Ό μ΄μš©ν•˜μ—¬ 자기 μžμ‹ μ„ 호좜 ν•  수 μ—†λ‹€.
  • μ ‘κ·Ό μ œν•œ μˆ˜μ‹μ–΄μΈ public, protected, private λ§Œμ„ μ“Έ 수 μžˆλ‹€.

 

package ch06.unit04;

public class Ex01 {

	public static void main(String[] args) {
		Test1 t = new Test1();
		/*
		 1) λ©”λͺ¨λ¦¬ ν• λ‹Ή(a ν•„λ“œ)
		 2) a ν•„λ“œλ₯Ό 0으둜 μ΄ˆκΈ°ν™”
		 3) μƒμ„±μž λͺΈμ²΄ μ‹€ν–‰ - μ΄ˆκΈ°ν™” 
		 */
         
		t.disp();
	}
}
class Test1{
	private int a;
	
	public Test1() {
		a=10;
		System.out.println("μƒμ„±μž...");
	}
	public void disp() {
		//Test1();// 컴였λ₯˜ μƒμ„±μžλŠ” 일반 λ©”μ†Œλ“œ 처럼 호좜 λΆˆκ°€ 
		System.out.println("a:"+a);
	}
}

 

 

 

λ””ν΄νŠΈ μƒμ„±μž 

μƒμ„±μžλ₯Ό μ •μ˜ν•˜μ§€ μ•ŠλŠ” κ²½μš°μ— μ»΄νŒŒμΌλŸ¬λŠ” μΈμˆ˜λ„ μ—†μœΌλ©° μ•„λ¬΄λŸ° κΈ°λŠ₯도 μ§€λ‹ˆμ§€ μ•ŠλŠ” μƒμ„±μžλ₯Ό μžλ™ μ‚½μž…ν•˜λŠ”λ° 이λ₯Ό λ””ν΄νŠΈ μƒμ„±μž(κΈ°λ³Έ μƒμ„±μž)라 ν•œλ‹€.

μƒμ„±μžκ°€ ν•˜λ‚˜λΌλ„ μ‘΄μž¬ν•˜λ©΄ μ»΄νŒŒμΌλŸ¬λŠ” λ””ν΄νŠΈ μƒμ„±μžλ₯Ό μΆ”κ°€ν•˜μ§€ μ•ŠλŠ”λ‹€.

 

 

package ch06.unit04;

public class Ex03 {

	public static void main(String[] args) {
		 Ex2 e = new Ex2();
		 e.disp();
		 
		 //Test2 t = new Test2(); // 컴였λ₯˜ μΈμžκ°€ μ—†λŠ” μƒμ„±μžκ°€ μ—†μŒ 
		 Test2 t = new Test2(10);
		 t.disp();

	}

}
// μƒμ„±μžκ°€ μ‘΄μž¬ν•˜λ©΄ λ””ν΄νŠΈ μƒμ„±μžλ₯Ό λ§Œλ“€μ§€ μ•ŠμŒ 
class Ex2 {
	private int a = 5;
	
	public void disp() {
		System.out.println("a : "+a);
		
	}
}

//μƒμ„±μžκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ 
class Test2{
	private int x;
	
	public Test2 (int n) {
		x=n;
		System.out.println("μΈμžκ°€ ν•˜λ‚˜λ©΄ μƒμ„±μž...");
	}
	
	public void disp() {
		System.out.println("x : "+x);
	}
}

 

 

 

 

β–Άμƒμ„±μžμ˜ 쀑볡 μ •μ˜ (overloading)

μƒμ„±μžλ„ 일반 λ©”μ†Œλ“œμ²˜λŸΌ μ€‘λ³΅μ •μ˜κ°€ κ°€λŠ₯ν•˜λ‹€. (이수의 κ°œμˆ˜λ‚˜ 인수의 νƒ€μž…μ΄ λ‹€λ₯΄κ²Œ μ •μ˜)

 

package ch06.unit04;

public class Ex04 {

	public static void main(String[] args) {
		 Test3 t = new Test3();
		 t.print();
		 
		 Test3 t2 = new Test3(200);
		 t2.print();
		
	}

}
//μƒμ„±μž 쀑볡 μ •μ˜
class Test3 {
	private int a;
	
	public  Test3(){
		a=10;
		System.out.println("인자 μ—†λŠ” μƒμ„±μž");
	}
	
	public Test3(int n) {
		a=n;
		System.out.println("인자 ν•˜λ‚˜μΈ μƒμ„±μž");
	}
	
	public void print() {
		System.out.println("a: "+a);
	}
	
}

 

 

 

this

ν˜„μž¬ 클래슀의 μΈμŠ€ν„΄μŠ€λ‘œ 객체 μžμ‹ μ— λŒ€ν•œ μ°Έμ‘° 값을 κ°–λŠ”λ‹€. ν˜„μž¬ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘° ν•˜κΈ° λ•Œλ¬Έμ— μƒμ„±μžλ‚˜ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ λ‚΄μ—μ„œλ§Œ μ‚¬μš©ν•˜λ©° 클래슀 λ©”μ†Œλ“œ(static method)μ—μ„œλŠ” μ‚¬μš© ν•  수 μ—†λ‹€. 

μƒμ„±μžμ˜ μ„ λ‘μ—μ„œ this([인수,..])λ₯Ό μ΄μš©ν•˜μ—¬ 쀑볡 μ •μ˜λœ λ‹€λ₯Έ μƒμ„±μžλ₯Ό 단 ν•œλ²ˆ ν˜ΈμΆœν•  수 μžˆλ‹€.

 

package ch06.unit04;

public class Ex05 {

	public static void main(String[] args) {
		Test5 t = new Test5();
		
		t.set(50);

		t.disp(); // this.a:10,b:150,c:500
		t.write(); 
		
		Test5 t2 = new Test5();
		t2.set(20);
		t2.disp(); 
	
		
	}

}
class Test5{
	private int a;
	private int b;
	private int c = 5;
	
	public void set(int b) {
		//this ν˜ΈμΆœν•œ 객체
		//μ§€μ—­λ³€μˆ˜(λ§€κ°œλ³€μˆ˜)와 λ™μΌν•œ λ³€μˆ˜λͺ…이 μ—†λŠ” 경우 μƒλž΅ κ°€λŠ₯ 
		
		this.a = 10;
		this.b = b+100;
		// this.b : ν˜ΈμΆœν•œ 객체의 b, b:λ§€κ°œλ³€μˆ˜ 
	}
	
	public void disp() {
		int c=200;
		System.out.println("this.a:"+this.a); // ν•„λ“œ 
		System.out.println(", b:"+b);			 // ν•„λ“œ 
		System.out.println(", this.c:"+this.c); // ν•„λ“œ 
		System.out.println(", c:"+c); // μ§€μ—­λ³€μˆ˜ 
		
	}
	public void write() {
		System.out.println(a+","+b+","+c);
	
	}
}

 

 

 

 

객체 생성, μ΄ˆκΈ°ν™” κ³Όμ •

β–Ά 클래슀 λ³€μˆ˜ (static λ³€μˆ˜)의 μ΄ˆκΈ°ν™” 및 static μ΄ˆκΈ°ν™” 

[μ ‘κ·Όμ œμ–΄μž] static νƒ€μž… λ³€μˆ˜λͺ… = μ΄ˆκΈ°κ°’;

[μ ‘κ·Όμ œμ–΄μž] static 클래슀λͺ… μ°Έμ‘°λ³€μˆ˜λͺ… = newμƒμ„±μž([인수]);

[μ ‘κ·Όμ œμ–΄μž] static νƒ€μž… []λ°°μ—΄λͺ… = new νƒ€μž…[크기];

 

β–ΆμΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™” 및 μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” 

[μ ‘κ·Όμ œμ–΄μž]νƒ€μž… λ³€μˆ˜λͺ… = μ΄ˆκΈ°κ°’;

[μ ‘κ·Όμ œμ–΄μž] 클래슀λͺ… μ°Έμ‘°λ³€μˆ˜λͺ… = newμƒμ„±μž([인수]);

[μ ‘κ·Όμ œμ–΄μž] νƒ€μž… []λ°°μ—΄λͺ… = new νƒ€μž…[크기];

 

package ch06.unit04;

public class Ex06 {

	public static void main(String[] args) {
	Test6 t = new Test6();
	// t.name = "μ΄μžλ°”"; // 컴였λ₯˜ private μ™ΈλΆ€ μ ‘κ·Ό λΆˆκ°€ 
	
	t.setName("μ΄μžλ°”");
	t.setAge(20);
	
	System.out.println(t.getName()+","+t.getAge());
	
	}

}
// getter / setter : <Shift>+<Alt>+s r a 
class Test6{
	private String name;
	private int age;
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

 

 

package ch06.unit04;

public class Ex07 {

	public static void main(String[] args) {
		Test7 t = new Test7("μ΄μžλ°”");
		t.disp();

	}

}

class Test7{
	private String name;
	private int age;
	
	public  Test7() {
		System.out.println("인자 μ—†λŠ” μƒμ„±μž");
	}
	public Test7(String name) {
		// Test7(name,0); // 컴였λ₯˜, μƒμ„±μžλŠ” 객체λ₯Ό 생섀할 λ•Œ new λ‹€μŒμ—λ§Œ 기술 κ°€λŠ₯
		this(name,18); // λ‹€λ₯Έ μƒμ„±μžμ˜ λͺΈμ²΄ μ‹€ν–‰,μ΅œμƒλ‹¨μ— 단 ν•œλ²ˆλ§Œ κ°€λŠ₯
		System.out.println("인자 ν•˜λ‚˜ μƒμ„±μž");
	}
	
	public Test7(String name, int age) {
		this.name = name; // ν˜ΈμΆœν•˜λŠ” 객체, 
		this.age = age;
		System.out.println("인자 λ‘κ°œμΈ μƒμ„±μž");
	}
	public void disp() {
		System.out.println(name+","+age);
	}

}