πŸ‘¨‍πŸ’» Web Development/Java

[Day16] Java 16 - μ˜€λ²„λ‘œλ”©, getter setter, μƒμ„±μž, μ΄ˆκΈ°ν™”, static

Kim_dev 2022. 9. 7. 03:26

[Day16] Java 16 [8/30]

 

1.  κ°€λ³€μΈμž(varagrgs)와 μ˜€λ²„λ‘œλ”©

- variable(λ³€μˆ˜) + arguments(인자, νŒŒλΌλ―Έν„°, λ§€κ°œλ³€μˆ˜, 인수)

- κ°€λ³€μΈμž ‘…’

public static int add (int … m) {  // integer λ°°μ—΄ mκ³Ό 동일

-> μΈμžκ°€λͺ‡κ°œλ“  λ‹€ μ²˜λ¦¬κ°€λŠ₯, μ˜€λ²„λ‘œλ”© ν•  ν•„μš” 없이 λ§€κ°œλ³€μˆ˜ λͺ‡κ°œκ°€ 될지 λͺ¨λ₯Έλ‹€λ©΄ κ°€λ³€μΈμž μ‚¬μš©ν•˜λ©΄λ¨

String concatenate(String s1, String s2) {}
String concatenate(String s1, String s2, String s3) {}
String concatenate(String s1, String s2, String s3, String s4) {}

String concatenate(String... str) {}

 

2.  getter setter

 [  private  둜 μ„ μ–Έλœ ν•„λ“œλ₯Ό  μ ‘κ·Όν•˜λŠ”  방법 ? ]      (private int x, y)

-> getter, setter λ©”μ„œλ“œ 

1.   

- getter 만 μ„ μ–Έ -  private x   읽기 κ°€λŠ₯,   μ“°κΈ° X

- setter 만 μ„ μ–Έ -                   읽기 X, μ“°κΈ° O

public String getName() {
		return name;
	}

public void setName(String name) {
		this.name = name;
	}

 

2.   μœ νš¨μ„± 검사 ν›„  μœ νš¨ν•œ κ°’λ§Œμ„ ν• λ‹Ήν•˜κ³ μž ν•  λ•Œ ->  setter ν†΅ν•΄μ„œ 처리

public int getY() {
	return y;
}

// ***** this ν‚€μ›Œλ“œ ****
public void setY(int b) {
	if( b >= 0  && b <= 100)		y = b;
	else  System.out.println("y μ’Œν‘œκ°’μ˜ λ²”μœ„κ°€ 벗어났닀.");
}

 

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

1. λ©”μ„œλ“œ

2. λ°˜λ“œμ‹œ μƒμ„±μžμ΄λ¦„ == 클래슀 이름

3. λ¦¬ν„΄μžλ£Œν˜•μ„ 뢙이지 μ•ŠλŠ”λ‹€.  void X

4. μƒμ„±μž 호좜 μ‹œκΈ° ? μΈμœ„μ μœΌλ‘œ ν˜ΈμΆœν• μˆ˜ μ—†μ–΄μš”. -> μ–Έμ œ 호좜 ? 객체가 μƒμ„±λ λ•Œ μžλ™μœΌλ‘œ ν˜ΈμΆœλœλ‹€.  

5. μƒμ„±μž μ—­ν• ? 객체의 ν•„λ“œλ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” μ—­ν• 

6. μ ‘κ·Όμ§€μ •μž 4가지 μ‚¬μš©ν•  수 μžˆλ‹€.  + μƒμ„±μž                 

7.  " μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” λ©”μ„œλ“œ " 라고도 ν•œλ‹€. 

8. μ˜€λ²„λ‘œλ”© κ°€λŠ₯

9. λ§€κ°œλ³€μˆ˜ μ—†λŠ” μƒμ„±μžλ₯Ό "λ””ν΄νŠΈμƒμ„±μž"라고 λΆ€λ₯Έλ‹€.

10. μƒμ„±μžλŠ” μƒμ†λ˜μ§€ μ•ŠλŠ”λ‹€.

11. ν΄λž˜μŠ€μ— μ„ μ–Έλœ μƒμ„±μžκ°€ ν•˜λ‚˜λ„ μ—†λŠ” 경우 컴파일 ν•  λ•Œ μžλ™μœΌλ‘œ λ””ν΄νŠΈ μƒμ„±μžλ₯Ό μΆ”κ°€ν•œλ‹€. 

public MyPoint( ) {
	// ν•„λ“œ μ΄ˆκΈ°ν™” μ—­ν• 
	x = y = 100;
} 

public MyPoint(int i) {
	// ν•„λ“œ μ΄ˆκΈ°ν™” ν•˜λŠ” μš©λ„λ‘œ λ§€κ°œλ³€μˆ˜κ°€ μ‚¬μš©λœλ‹€.
	 x = y = i;
}
	
// μƒμ„±μž μ„ μ–Έ
public MyPoint(int a, int b) {
	// ν•„λ“œ μ΄ˆκΈ°ν™” μ—­ν• 
	x = a;
	y = b;
} 

public MyPoint(MyPoint p1) {
	x = p1.x;
	y = p1.y;
}

 

4.  this

1)  μ •μ˜ ?  μ°Έμ‘°λ³€μˆ˜ == μ €μž₯곡간 -> 클래슀 자기 μžμ‹ μ˜ μ£Όμ†Œκ°’μ„ κ°–λŠ” μ°Έμ‘°λ³€μˆ˜. 

2) μ‚¬μš©μž  μ €μž₯곡간 생성 = κ°’ ν• λ‹Ή X                

3) this 3가지 μš©λ„

-    μΈμŠ€ν„΄μŠ€(클래슀 μžκΈ°μžμ‹ )의 멀버λ₯Ό κ°€λ¦¬ν‚¬λ•Œμ˜ this

-     μƒμ„±μžμ—μ„œ 또 λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  λ•Œμ˜ this μš©λ„

-     λ‹¨λ…μœΌλ‘œ μ‚¬μš©λ  λ•Œμ˜ this μš©λ„ 리턴값, λ§€κ°œλ³€μˆ˜

 

class Car{
	
	// ν•„λ“œ
	private String color; // 색상
	private String gearType; // 변속기 μ’…λ₯˜ - μˆ˜λ™, μžλ™
	private int door;      // μ°¨λ¬Έ
	
	// getter, setter μ„ μ–Έ    Alt + Shift + S
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;   // this의 첫 번째 μš©λ„
	}
	public String getGearType() {
		return gearType;  
	}
	public void setGearType(String gearType) {
		this.gearType = gearType;  // this의 첫 번째 μš©λ„
	} 
	
	// λ””ν΄νŠΈ μƒμ„±μž
	public Car() {		
	   this("흰색","μžλ™", 4);
	   System.out.println("> Car λ””ν΄νŠΈ μƒμ„±μž 호좜됨.");
	}
    
	// μƒμ„±μž + 2개
	public Car(String color, String gearType) {
    	this(color, gearType, 4); // 또 λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” 두 번째 μš©λ„
        // The assignment to variable color has no effect
        // Car 클래슀의 ν•„λ“œ color
        // this.color= color;  // this의 첫 번째 μš©λ„
        // this.gearType = gearType;
        System.out.println("> Car + 2 μƒμ„±μž 호좜됨.");
        
        // this.ν•„λ“œ, λ©”μ„œλ“œ μ‚¬μš©
        // 클래슀 자기 μžμ‹ μ˜ 멀버듀이  this.   보인닀. 
        // this.toString()      
	} 
	
	public Car(String color, String gearType, int door) {	

		this.color = color;
		this.gearType = gearType;
		this.door = door;
		
		 System.out.println("> Car + 3 μƒμ„±μž 호좜됨.");
	}
	
	
	// λ©”μ„œλ“œ
	// mycar.dispCar();
	public void dispCar() {
		System.out.printf("> color:%s, gearType:%s \n", this.color, this.gearType);
	}
	
	// μ°¨λŸ‰μ˜ 색상을 λ³€κ²½ν•˜λŠ” λ©”μ„œλ“œ
	// [μ°Έμ‘°ν˜•μ΄ λ°˜ν™˜νƒ€μž…]
	// mycar.chageColor("λ…Έλž‘");
	// changeColor()  λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œ 객체 : mycar
	public Car changeColor( String color) {
		this.color = color;
		return this;  // mycar  μ°Έμ‘°λ³€μˆ˜  0x100 μ£Όμ†Œ, this의 μ„Έ 번째 μš©λ„
	}
	
} // class

 

- alt shift s = μžλ™μœΌλ‘œ μƒμ„±μž 3개짜리 λ§Œλ“€μ–΄μ§

 - return this = 이 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œ μžκΈ°μžμ‹  객체λ₯Ό λ°˜ν™˜ν•˜κΈ° λ•Œλ¬Έμ— κ·Έ 값에닀가 또 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄μ„œ λ©”μ„œλ“œ 체인 κ°€λŠ₯

 λ©”μ„œλ“œ 체이닝? : https://advenoh.tistory.com/4

 

5.  μ œμ–΄μž( modifier )  - static

- 클래슀, λ³€μˆ˜ λ˜λŠ” λ©”μ„œλ“œμ˜ 선언뢀에 ν•¨κ»˜ μ‚¬μš©λ˜μ–΄ 뢀가적인 의미λ₯Ό λΆ€μ—¬ν•œλ‹€. 

- 접지( 4 ) + 기제 : [static], final, abstract, native, transient, synchronized, volatile, strictfp

 

static λ©”μ„œλ“œ

-> rateλŠ” λ©”λͺ¨λ¦¬μ— ν”„λ‘œκ·Έλž¨ μ‹œμž‘κ³Ό λ™μ‹œμ— μ˜¬λΌκ°€μžˆμ§€λ§Œ 클래슀λͺ….ν΄λž˜μŠ€μ΄λ¦„ 해도 μ•ˆλ‚˜μ˜΄

                ------> λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€μžˆμ§€ μ•Šμ€κ²Œ μ•„λ‹ˆλΌ μ ‘κ·Ό μ§€μ •μžλ•Œλ¬Έμ— 접근을 λͺ»ν•˜λŠ”것

-> 생성 μ•ˆν•΄λ„ ν”„λ‘œκ·Έλž¨ μ‹œμž‘λ§Œν•΄λ„ λ©”λͺ¨λ¦¬μ— 올라감

-> ν”„λ‘œκ·Έλž¨ μ‹œμž‘κ³Ό λ™μ‹œμ— λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€λŠ” static λ©”μ„œλ“œμ— this 적을 수 μ—†μŒ 

                 ------> thisλŠ” μΈμŠ€ν„΄μŠ€ 생성해야 μ£Όμ†Œκ°’ μ°Έμ‘°ν•˜λŠ” λ³€μˆ˜μ΄κΈ° λ•Œλ¬Έ

-> static ν΄λž˜μŠ€λ³€μˆ˜ μ„ μ–Έν•˜λŠ” 이유

                 -------> λͺ¨λ“  객체(μΈμŠ€ν„΄μŠ€)μ—μ„œ κ³΅μœ ν•΄μ„œ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜κ°€ ν•„μš”ν• λ•Œ static λ³€μˆ˜ μ„ μ–Έ

 -> static λ©”μ„œλ“œ = 정적 λ©”μ„œλ“œ μ„ μ–Έν•˜λŠ” 이유

                --------> μΈμŠ€ν„΄μŠ€ 생성 ν•„μš”μ—†μ΄ 클래슀λͺ…μœΌλ‘œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ 자주 μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯(λ©”μ„œλ“œ) μžˆλ‹€λ©΄ static λ©”μ„œλ“œλ‘œ μ„ μ–Έ

 

6.  ν•„λ“œ μ΄ˆκΈ°ν™”

[ ν•„λ“œ μ΄ˆκΈ°ν™” 3가지 방법 ]

1)  λͺ…μ‹œμ  μ΄ˆκΈ°ν™”( explicit initialization ) :

- ν•„λ“œλ₯Ό μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™”ν•˜λŠ” 것을 "λͺ…μ‹œμ  μ΄ˆκΈ°ν™”"라고 ν•œλ‹€. 

- ν•„λ“œλ₯Ό μ΄ˆκΈ°ν™”ν•˜μ§€ μ•ŠμœΌλ©΄ 각 νƒ€μž…μ˜ κΈ°λ³Έκ°’μœΌλ‘œ μ΄ˆκΈ°ν™”λ¨

String name = "미상";
int age = 20;
static double rate = 0.04;
	
int count;           // λͺ…μ‹œμ  μ΄ˆκΈ°ν™” x, κΈ°λ³Έκ°’
int serialNo;       // λͺ…μ‹œμ  μ΄ˆκΈ°ν™” x, κΈ°λ³Έκ°’

2) μƒμ„±μž( constructor )

// constructor
Person(){
	//count++;
	//serialNo = count;
	System.out.println("> Person λ””ν΄νŠΈ μƒμ„±μž 호좜.");
}	

Person(String name, int age, double rate){
	//count++;
	//serialNo = count;

	this.name = name;
	this.age = age;
	Person.rate = rate;
	System.out.println("> Person 3 μƒμ„±μž 호좜.");
}

3) μ΄ˆκΈ°ν™” λΈ”λŸ­( initialization block ) γ…£  λ³΅μž‘ν•œ μ΄ˆκΈ°ν™” μž‘μ—…μ„ ν•  λ•Œ μ‚¬μš©.  λͺ¨λ“  μƒμ„±μžμ—μ„œ κ³΅ν†΅μœΌλ‘œ μˆ˜ν–‰ν•˜λŠ” λ¬Έμž₯을 μ΄ˆκΈ°ν™” λΈ”λŸ­.

          - μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” λΈ”λŸ­ : μΈμŠ€ν„΄μŠ€λ³€μˆ˜ μ΄ˆκΈ°ν™”

          - 클래슀 μ΄ˆκΈ°ν™” λΈ”λŸ­    : 클래슀 λ³€μˆ˜ μ΄ˆκΈ°ν™”.

{
	// μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” λΈ”λŸ­
	// μΈμŠ€ν„΄μŠ€(객체)κ°€ 생성될 λ•Œ λ§ˆλ‹€ μ‹€ν–‰
	count++;
	serialNo = count;
	System.out.println("> μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” λΈ”λŸ­.");
}	
static {
	// ν΄λž˜μŠ€λ³€μˆ˜ μ΄ˆκΈ°ν™” λΈ”λŸ­
	// 첫 번째 μΈμŠ€ν„΄μŠ€ 생성될  λ•Œ 1번 μ‹€ν–‰
	rate = 0.08;	 
	System.out.println("> 클래슀 λ³€μˆ˜ μ΄ˆκΈ°ν™” λΈ”λŸ­.");
}

 

p.304

- μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ΄ˆκΈ°ν™” μˆœμ„œ  : κΈ°λ³Έκ°’ -> λͺ…μ‹œμ  μ΄ˆκΈ°ν™” -> μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” λΈ”λŸ­ -> μƒμ„±μž

- 클래슀 λ³€μˆ˜    μ΄ˆκΈ°ν™” μˆœμ„œ : κΈ°λ³Έκ°’ -> λͺ…μ‹œμ μ΄ˆκΈ°ν™” -> 클래슀 μ΄ˆκΈ°ν™” λΈ”λŸ­