[TIL] Java 3일차 2

minamiΒ·2021λ…„ 2μ›” 8일
0

Java

λͺ©λ‘ 보기
5/11

πŸ’‘ 클래슀

1. 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° (Object Oriented Programming)

πŸ‘‰ λΆ€ν’ˆμ— ν•΄λ‹Ήν•˜λŠ” 객체듀을 λ¨Όμ € λ§Œλ“€μ–΄μ„œ 이듀을 μ‘°λ¦½ν•˜μ—¬ ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ„ μ™„μ„±μ‹œν‚€λŠ” 것

1-1. 객체

물리적으둜 μ‘΄μž¬ν•˜λŠ” 것과 μΆ”μƒμ μœΌλ‘œ 생각할 수 μžˆλŠ” 것 μ€‘μ—μ„œ 속성과 λ™μž‘μ„ κ°€μ§€λŠ” λͺ¨λ“  것이 객체!

객체의 νŠΉμ§•

  • ν•„λ“œ(속성)와 λ©”μ†Œλ“œ(λ™μž‘)둜 κ΅¬μ„±λœ μžλ°” 객체둜 λͺ¨λΈλ§μ΄ κ°€λŠ₯

  • 객체끼리 μ„œλ‘œμ˜ κΈ°λŠ₯(λ™μž‘)을 μ΄μš©ν•˜κ³  데이터λ₯Ό μ£Όκ³  λ°›μŒ πŸ‘‰ 객체의 μƒν˜Έ μž‘μš©

  • κ°μ²΄λŠ” μƒν˜Έ μž‘μš© μˆ˜λ‹¨μœΌλ‘œ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€.

  // λ©”μ†Œλ“œ 호좜 ν˜•νƒœ
  리턴값 = 객체λͺ….λ©”μ†Œλ“œλͺ…(λ§€κ°œκ°’1, λ§€κ°œκ°’2, ...);

κ°μ²΄κ°„μ˜ 관계

  • 집합 관계: μ™„μ„±ν’ˆ - λΆ€ν’ˆ
  • μ‚¬μš© 관계: 객체 - 객체, ν•œ 객체가 λ‹€λ₯Έ 객체의 λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©
  • 상속 관계: μ’…λ₯˜ 객체(μƒμœ„ 객체) - ꡬ체적인 사물 객체(ν•˜μœ„ 객체)

πŸ“Œ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ νŠΉμ§•

  • μΊ‘μŠν™”

    객체의 ν•„λ“œμ™€ λ©”μ†Œλ“œλ₯Ό ν•˜λ‚˜λ‘œ λ¬Άμ–΄μ„œ κ΅¬ν˜„ λ‚΄μš©μ„ κ°μΆ”λŠ” 것. μ™ΈλΆ€ κ°μ²΄λŠ” 객체 λ‚΄λΆ€μ˜ ꡬ쑰λ₯Ό μ•Œ 수 μ—†μœΌλ©° ν•΄λ‹Ή 객체의 ν•„λ“œμ™€ λ©”μ†Œλ“œλ§Œ 이용 κ°€λŠ₯ν•˜λ‹€. μΊ‘μŠν™”ν•˜μ—¬ λ³΄ν˜Έν•˜λŠ” μ΄μœ λŠ” μ™ΈλΆ€μ˜ 잘λͺ»λœ μ‚¬μš©μœΌλ‘œ 객체가 μ†μƒλ˜λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•¨! μΊ‘μŠν™”λ₯Ό μœ„ν•΄ μžλ°”λŠ” μ ‘κ·Ό μ œν•œμž(Access Modifier)λ₯Ό μ‚¬μš©ν•œλ‹€.

  • 상속

    μƒμœ„ 객체의 ν•„λ“œμ™€ λ©”μ†Œλ“œλ₯Ό ν•˜μœ„ 객체에 λ¬Όλ €μ£ΌλŠ” 것. ν•˜μœ„ κ°μ²΄λŠ” μƒμœ„ 객체λ₯Ό ν™•μž₯ν•΄μ„œ 좔가적인 ν•„λ“œμ™€ λ©”μ†Œλ“œλ₯Ό κ°€μ§ˆ 수 μžˆλ‹€.

    μž₯점: 섀계 μ‹œκ°„ 단좕, 쀑볡 μ½”λ“œ κ°μ†Œ, μœ μ§€ 보수 μ‹œκ°„ μ΅œμ†Œν™”!

  • λ‹€ν˜•μ„±

    같은 νƒ€μž…μ΄μ§€λ§Œ μ‹€ν–‰ κ²°κ³Όκ°€ λ‹€μ–‘ν•œ 객체λ₯Ό λŒ€μž…ν•  수 μžˆλŠ” μ„±μ§ˆ. μžλ°”λŠ” μΈν„°νŽ˜μ΄μŠ€λ‚˜ λΆ€λͺ¨ 클래슀의 νƒ€μž… λ³€ν™˜μ΄ κ°€λŠ₯ν•˜λ‹€.

2. 객체와 클래슀

  • μžλ°”μ—μ„œλŠ” ν΄λž˜μŠ€κ°€ 섀계도에 ν•΄λ‹Ή
  • ν΄λž˜μŠ€λ‘œλΆ€ν„° λ§Œλ“€μ–΄μ§„ 객체λ₯Ό ν•΄λ‹Ή 클래슀의 μΈμŠ€ν„΄μŠ€λΌκ³  ν•˜λ©°, κ·Έ 과정을 μΈμŠ€ν„΄μŠ€ν™”λΌκ³  ν•œλ‹€.
  • 객체의 κ΅¬μ„±μš”μ†Œ
    • 속성 = λ³€μˆ˜
    • κΈ°λŠ₯ = λ©”μ†Œλ“œ
// 예제
class Account {
	String account;
	String name;
	int balance;
    
	public void deposit(int money) {
		if (money>0) {
			balance += money;
		}
	}	
	public void withdrawal(int money) {
		if (balance>=money) {
			balance -= money;
		} else {
			System.out.println("μž”μ•‘μ΄ λΆ€μ‘±ν•©λ‹ˆλ‹€");
		}
	}
	public String info() {
		return "κ³„μ’Œλ²ˆν˜Έ: " + account + ", 이름: " + name + ", μž”μ•‘: " + balance;
	}
}

public class AccountTest {
	public static void main(String[] args) {
		// Account 객체 2개 λ§Œλ“€κΈ°
		Account acc1 = new Account();
		Account acc2 = new Account();
		// 101, 홍길동, 100000
		acc1.account = "101";
		acc1.name = "홍길동";
		acc1.balance = 100000;
		// 102, 김길동, 200000
		acc2.account = "102";
		acc2.name = "김길동";
		acc2.balance = 200000;
		// 두 κ³„μ’Œ 정보 좜λ ₯
		System.out.println(acc1.info());
		System.out.println(acc2.info());
		
		acc1.deposit(10000);
		acc2.withdrawal(20000);
		
		System.out.println(acc1.info());
		System.out.println(acc2.info());
	}
}

클래슀 μ„ μ–Έ 방법

  • 클래슀 이름 κ·œμΉ™
    • ν•˜λ‚˜ μ΄μƒμ˜ 문자둜 ꡬ성
    • μ²«κΈ€μžλŠ” 숫자, '$', '_' μ™Έμ˜ 특수문자, μžλ°” ν‚€μ›Œλ“œ λΆˆκ°€λŠ₯
    • μ˜μ–΄λ‘œ μž‘μ„±ν•˜λŠ” 것이 관둀이며 λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•œλ‹€
    • 각 λ‹¨μ–΄μ˜ 첫 κΈ€μžλ₯Ό λŒ€λ¬Έμžλ‘œ
    • μ†ŒμŠ€ 파일 이름('ν΄λž˜μŠ€μ΄λ¦„.java')κ³Ό κ°™μ•„μ•Ό ν•œλ‹€!
  • 일반적으둜 μ†ŒμŠ€ 파일 ν•˜λ‚˜μ— 클래슀 ν•˜λ‚˜λ₯Ό μ„ μ–Έν•˜μ§€λ§Œ 두 개 μ΄μƒμ˜ 클래슀 선언도 κ°€λŠ₯

객체 생성 방법

  • new μ—°μ‚°μžκ°€ ν΄λž˜μŠ€λ‘œλΆ€ν„° 객체 생성(μΈμŠ€ν„΄μŠ€ν™”) 역할을 ν•œλ‹€.

3. 클래슀의 ꡬ성 멀버

  • ν•„λ“œ

    • 객체의 데이터가 μ €μž₯λ˜λŠ” κ³³
  • μƒμ„±μž

  // μƒμ„±μž μ˜ˆμ‹œ
  class MyClass {
  	int num;
  	public MyClass() {}  // κΈ°λ³Έ μƒμ„±μž
  	public MyClass(int num) {  // λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μžλ₯Ό λ§Œλ“€λ©΄ κΈ°λ³Έ μƒμ„±μžκ°€ μžλ™ μƒμ„±λ˜μ§€ μ•ŠλŠ”λ‹€. λ°˜λ“œμ‹œ κΈ°λ³Έ μƒμ„±μž μ½”λ”©ν•΄μ•Ό 함.
  		this.num = num;
  	}
  }
  
  public class ConstructorTest {
  	public static void main(String[] args) {
  		MyClass mc = new MyClass();
  	}
  }
  • 객체 생성 μ‹œ μ΄ˆκΈ°ν™” 역할을 λ‹΄λ‹Ή(μ‹€μ²΄λŠ” λ©”λͺ¨λ¦¬)

  • new μ—°μ‚°μžλ‘œ μƒμ„±μžκ°€ μ„±κ³΅μ μœΌλ‘œ μ‹€ν–‰λ˜λ©΄ νž™ μ˜μ—­μ— 객체가 μƒμ„±λ˜κ³  객체의 μ£Όμ†Œκ°€ λ¦¬ν„΄λœλ‹€.

  • λͺ¨λ“  ν΄λž˜μŠ€λŠ” μƒμ„±μžκ°€ λ°˜λ“œμ‹œ μ‘΄μž¬ν•˜λ©°, ν•˜λ‚˜ 이상을 κ°€μ§ˆ 수 μžˆλ‹€.

  • λ©”μ†Œλ“œμ™€ λΉ„μŠ·ν•œ λͺ¨μ–‘μ΄μ§€λ§Œ 리턴 νƒ€μž…μ΄ μ—†κ³  클래슀 이름과 동일

  • ν΄λž˜μŠ€μ— μƒμ„±μžκ°€ λͺ…μ‹œμ μœΌλ‘œ μ„ μ–Έλ˜μ–΄ μžˆλŠ” κ²½μš°μ—λŠ” λ°˜λ“œμ‹œ μ„ μ–Έλœ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•΄μ„œ 객체 생성해야 ν•œλ‹€. (κΈ°λ³Έ μƒμ„±μžλŠ” 호좜 λΆˆκ°€!)

πŸ“Œ μƒμ„±μž μ˜€λ²„λ‘œλ”©(Overloading)

πŸ‘‰ 맀개 λ³€μˆ˜μ˜ νƒ€μž… or κ°―μˆ˜κ°€ λ‹€λ₯Έ μƒμ„±μžλ₯Ό μ„ μ–Έν•˜λŠ” 것

  • μƒμ„±μž μ˜€λ²„λ‘œλ”©μ΄ λ§Žμ•„μ§€λ©΄ μƒμ„±μž κ°„μ˜ μ€‘λ³΅λœ μ½”λ“œκ°€ λ°œμƒν•  수 μžˆλ‹€!
  • this()λŠ” μžμ‹ μ˜ λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” κ²ƒμœΌλ‘œ λ°˜λ“œμ‹œ μƒμ„±μž μ²«μ€„μ—μ„œλ§Œ ν—ˆμš©!
public class Person {
	int age;
	String name;
	// λ©”μ†Œλ“œλ§ˆλ‹€ Person thisκ°€ μžλ™μœΌλ‘œ λ“€μ–΄κ°€ μžˆλ‹€. ex) public Person(Person this)
	public Person() {  // μƒμ„±μž: new μ—°μ‚°μœΌλ‘œ 자돈 ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜
		this("none", 0);  // this(): 또 λ‹€λ₯Έ μƒμ„±μž 호좜, μƒμ„±μžμ—μ„œλ§Œ 호좜 κ°€λŠ₯
	}
	public Person(String name, int age) {  // μƒμ„±μžλŠ” λ§€κ°œλ³€μˆ˜μ˜ κ°―μˆ˜λ‚˜ νƒ€μž…μ΄ λ‹€λ₯΄λ©΄ μ—¬λŸ¬ 개 올 수 μžˆλ‹€(Overload)
		this.name = name;  // thisλŠ” 클래슀
		this.age = age;
	}
//	public Person(String id, int age) {
//		// μ˜€λ²„λ‘œλ“œ μ„±λ¦½ν•˜μ§€ μ•ŠμŒ. λ§€κ°œλ³€μˆ˜ νƒ€μž…κ³Ό κ°―μˆ˜κ°€ 같은 것이 μžˆμ–΄μ„œ
//	}
	public Person(String name) {  // name만 λ³€κ²½
		this(name, 0);
	}
//	public Person(String id) {
//		// μ˜€λ²„λ‘œλ“œ 성립X λ§€κ°œλ³€μˆ˜ νƒ€μž…κ³Ό κ°―μˆ˜κ°€ 같은 것이 μžˆμ–΄μ„œ
//	}
	public Person(int age) {  // age만 λ³€κ²½
		this("none", age);
	}
	public String info() {
		return "이름: " + name + ", λ‚˜μ΄:" + age;  // this.name, this.age라고 ν•˜λ©΄ 더 λͺ…ν™•ν•˜μ§€λ§Œ this μƒλž΅ν•΄λ„ 괜좘
	}
}
public class PersonExample {

	public static void main(String[] args) {
		Person p = new Person();  // Person은 λ°μ΄ν„°νƒ€μž…(=μžλ£Œν˜•), pλŠ” heapμ˜μ—­μ„ κ°€λ¦¬ν‚€λŠ” μ£Όμ†Œ
		p.age = 20;
		p.name = "ν•œμ§€λ―Ό";
		System.out.println(p.info());

		Person p2 = new Person();  // Person()은 μƒμ„±μž, μƒμ„±μžλŠ” 클래슀λͺ…κ³Ό λ™μΌν•˜κ³  ν•¨μˆ˜μ˜ 리턴을 뢙이지 μ•ŠμŒ
		p2.age = 30;
		p2.name = "ν•œμ˜ˆμŠ¬";
		System.out.println(p2.info());

		Person p3 = new Person("μ΅œμš°μ‹", 43);  // Person 클래슀 μ•ˆμ— nameκ³Ό age 넣을 수 있게 λ˜μ–΄ μžˆμ–΄μ„œ μ½”λ“œ 길이가 쀄어듦
		System.out.println(p3.info());

		Person p4 = new Person();
		System.out.println(p4.info());

		Person p5 = new Person("μ΄μ„œμ§„");
		System.out.println(p5.info());

		Person p6 = new Person(32);
		System.out.println(p6.info());
	}
}
  • λ©”μ†Œλ“œ

    • 객체의 λ™μž‘μ— ν•΄λ‹Ήν•˜λŠ” μ‹€ν–‰ 블둝
  // λ©”μ†Œλ“œ μ„ μ–Έ 및 λ©”μ†Œλ“œ 호좜 μ˜ˆμ‹œ
  class Calculator {
  	int val1;
  	int val2;
  	
  	public Calculator(int val1, int val2) {
  		this.val1 = val1;
  		this.val2 = val2;
  	}
  	public int add() {
  		int sum = val1 + val2;
  		return sum;
  	}
  	public int sub() {
  		return val1 - val2;
  	}
  	public int mul() {
  		return val1 * val2;
  	}
  	public double div() {
  		return val2==0? 0:(double)val1/val2;
  	}
  }
  
  public class CalculatorTest {
  
  	public static void main(String[] args) {
  		Calculator c1 = new Calculator(30, 10);
  		System.out.println(c1.add());  // 30
  		System.out.println(c1.sub());  // 10
  		System.out.println(c1.mul());  // 200
  		System.out.println(c1.div());  // 2
  	}
  }

4. μΈμŠ€ν„΄μŠ€ 멀버와 this

μΈμŠ€ν„΄μŠ€ 멀버

  • 객체(μΈμŠ€ν„΄μŠ€)λ§ˆλ‹€ κ°–κ³  μžˆλŠ” ν•„λ“œλ₯Ό μΈμŠ€ν„΄μŠ€ ν•„λ“œ, λ©”μ†Œλ“œλ₯Ό μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλΌκ³  ν•œλ‹€.
  • μΈμŠ€ν„΄μŠ€ λ©€λ²„λŠ” 객체에 μ†Œμ†λœ 멀버이기 λ•Œλ¬Έμ— 객체가 μ—†μœΌλ©΄ μ‚¬μš©λΆˆκ°€

this

  • 객체 λ‚΄λΆ€μ—μ„œλ„ μΈμŠ€ν„΄μŠ€ 멀버에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄μ„œλŠ” thisλ₯Ό μ‚¬μš©
  • 주둜 μƒμ„±μžμ™€ λ©”μ†Œλ“œμ˜ 맀개 λ³€μˆ˜ 이름이 ν•„λ“œμ™€ λ™μΌν•œ 경우, μΈμŠ€ν„΄μŠ€ ν•„λ“œλ₯Ό λͺ…μ‹œν•˜κ³ μž ν•  λ•Œ μ‚¬μš©
// μΈμŠ€ν„΄μŠ€ 멀버 μ‚¬μš© μ˜ˆμ‹œ - μ™ΈλΆ€ ν΄λž˜μŠ€μ—μ„œλŠ” new μ—°μ‚°μžλ‘œ 객체λ₯Ό μƒμ„±ν•΄μ„œ μ‚¬μš©
class Calculator2 {
	public int add(int x, int y) {
		return x+y;
	}
	public int sub(int x, int y) {
		return x-y;
	}
	public int mul(int x, int y) {
		return x*y;
	}
	public double div(int x, int y) {
		return y==0? y: (double) x/y;
	}
}
public class CalculatorTest2 {

	public static void main(String[] args) {
		Calculator2 c2 = new Calculator2();  // new μ—°μ‚°μžλ‘œ 객체 생성
		System.out.println(Calculator2.add(10, 20));
		System.out.println(Calculator2.sub(40, 5));
		System.out.println(Calculator2.mul(42, 9));
		System.out.println(Calculator2.div(9, 3));
    }
}

5. 정적 멀버와 static

정적(static) 멀버

  • 정적 멀버: ν΄λž˜μŠ€μ— κ³ μ •λœ ν•„λ“œμ™€ λ©”μ†Œλ“œ
  • ν΄λž˜μŠ€μ— κ³ μ •λœ λ©€λ²„λ‘œμ„œ 객체λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³  μ‚¬μš©ν•  수 μžˆλ‹€.
  • ν΄λž˜μŠ€μ— μ†Œμ†λœ 멀버이기 λ•Œλ¬Έμ— 클래슀 멀버라고도 ν•œλ‹€.
  • μΈμŠ€ν„΄μŠ€ ν•„λ“œλ₯Ό μ΄μš©ν•΄μ•Ό ν•œλ‹€λ©΄ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλ‘œ μ„ μ–Έ, 그렇지 μ•Šλ‹€λ©΄ 정적 λ©”μ†Œλ“œλ‘œ μ„ μ–Έ
  • ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬λ‘œ λ‘œλ”©λ˜λ©΄ 정적 멀버λ₯Ό λ°”λ‘œ μ‚¬μš©ν•  수 μžˆλ‹€!
  • 객체가 없어도 μ‹€ν–‰λ˜λ―€λ‘œ 내뢀에 μΈμŠ€ν„΄μŠ€ ν•„λ“œλ‚˜ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ μƒμ„±ν•˜μ—¬ μ‚¬μš© λΆˆκ°€λŠ₯
// static으둜 ν™œμš©ν•˜λŠ” μ˜ˆμ‹œ
class Calculator2 {
	// static이 λΆ™μ–΄ μžˆλŠ” λ©”μ†Œλ“œλŠ” μΈμŠ€ν„΄μŠ€ν™”λ˜μ–΄μ„œ μ™ΈλΆ€μ—μ„œ new μ—°μ‚°μž ν•„μš”μ—†μŒ
	public static int add(int x, int y) {
		return x+y;
	}
	public static int sub(int x, int y) {
		return x-y;
	}
	public static int mul(int x, int y) {
		return x*y;
	}
	public static double div(int x, int y) {
		return y==0? y: (double) x/y;
	}
}
public class CalculatorTest2 {

	public static void main(String[] args) {
//		Calculator2 c2 = new Calculator2(); // static이 있으면 ν•„μš”μ—†μŒ
		System.out.println(Calculator2.add(10, 20));
		System.out.println(Calculator2.sub(40, 5));
		System.out.println(Calculator2.mul(42, 9));
		System.out.println(Calculator2.div(9, 3));
	}
}
// static ν™œμš© μ˜ˆμ‹œ2
class Product {
	int serialNum = 0;
	static int snum = 100;
	public Product() {
//		serialNum++;
		snum++;
		serialNum = snum;  // μœ μΌν•΄μ•Ό ν•˜λŠ” 경우, static λ³€μˆ˜λ₯Ό ν™œμš©ν•  수 있음 ex) ν•™λ²ˆ, κ΅μ§μ›λ²ˆν˜Έ λ“±
		System.out.println("serialNum: " + serialNum + ", snum: " + snum);
	}
}
public class StaticTest {

	public static void main(String[] args) {
		Product[] prs = new Product[5];
		for (int i=0; i<prs.length; i++) {
			prs[i] = new Product();
		}
	}
}

// result
// serialNum: 1, snum: 101
// serialNum: 1, snum: 102
// serialNum: 1, snum: 103
// serialNum: 1, snum: 104
// serialNum: 1, snum: 105
// serialNum은 계속 객체가 μƒˆλ‘œ μƒμ„±λ˜κΈ° λ•Œλ¬Έμ— μˆ«μžκ°€ 1둜 λ‚˜μ˜€κ³ , snum은 객체와 상관없이 ν΄λž˜μŠ€μ— 속해 μžˆμœΌλ―€λ‘œ(static) μˆ«μžκ°€ 달라진닀
// μΈμŠ€ν„΄μŠ€ 멀버와 static λ©€λ²„μ˜ 차이 μ˜ˆμ‹œ
class Test {
	int ival;
	static int sval;  // 클래슀 λ‘œλ”© μ‹œ(ν”„λ‘œκ·Έλž¨ μ‹œμž‘ μ‹œ) λ³€μˆ˜ ν• λ‹Ή
	public void iMethod() {
		ival = 100;  // instance λ©”μ†Œλ“œμ—μ„œ instance λ³€μˆ˜ μ ‘κ·Ό κ°€λŠ₯
		sval = 200;  // instance λ©”μ†Œλ“œμ—μ„œ static λ³€μˆ˜ μ ‘κ·Ό κ°€λŠ₯
	}
	public static void sMethod() {
//		ival = 10;  // static λ©”μ†Œλ“œμ—μ„œλŠ” instance λ³€μˆ˜ μ ‘κ·Ό λΆˆκ°€λŠ₯
		sval = 20;  // static λ©”μ†Œλ“œμ—μ„œλŠ” static λ³€μˆ˜ μ ‘κ·Ό κ°€λŠ₯
//		this.sval = 30;  // static λ©”μ†Œλ“œλŠ” this μ‚¬μš© λΆˆκ°€, thisλŠ” λ©”μ†Œλ“œ μ•ˆμ˜ λ³€μˆ˜μ— λΆ™μ΄λŠ” 것
	}
}
public class StaticInstanceTest {

	public static void main(String[] args) {
		Test.sval = 10;  // static λ³€μˆ˜λŠ” 객체 생성 없이 클래슀λͺ…μœΌλ‘œ μ ‘κ·Ό κ°€λŠ₯
		Test.sMethod();  // static λ©”μ†Œλ“œλŠ” 객체 생성 없이 클래슀λͺ…μœΌλ‘œ μ ‘κ·Ό κ°€λŠ₯
//		Test.ival = 20;  // instance λ³€μˆ˜λŠ” 클래슀λͺ…μœΌλ‘œ μ ‘κ·Ό λΆˆκ°€λŠ₯
		Test t = new Test();
		t.ival = 20;  // instance λ³€μˆ˜λŠ” λ°˜λ“œμ‹œ 객체 μƒμ„±ν•˜μ—¬ μ°Έμ‘°λ³€μˆ˜ 톡해 μ ‘κ·Όν•΄μ•Ό ν•œλ‹€.
//		Test.iMethod();  // instance λ©”μ†Œλ“œλŠ” 클래슀λͺ…μœΌλ‘œ μ ‘κ·Ό λΆˆκ°€λŠ₯
		t.iMethod();  // μƒμ„±λœ 객체λ₯Ό ν†΅ν•΄μ„œλ§Œ 호좜 κ°€λŠ₯
	}
}

6. final ν•„λ“œμ™€ μƒμˆ˜

final ν•„λ“œ

  • μ΅œμ’…μ μΈ 값을 κ°–κ³  μžˆλŠ” ν•„λ“œ = κ°’ λ³€κ²½ λΆˆκ°€λŠ₯!!
  • final ν•„λ“œλŠ” 지정과 λ™μ‹œμ— μ΄ˆκΈ°ν™”ν•œλ‹€.
  • κ°μ²΄λ§ˆλ‹€ κ°€μ§€λŠ” λΆˆλ³€μ˜ μΈμŠ€ν„΄μŠ€ ν•„λ“œμ΄λ‹€.

μƒμˆ˜ (static final)

  • κ°μ²΄λ§ˆλ‹€ κ°€μ§€λŠ” 것이 μ•„λ‹ˆλΌ λ©”μ†Œλ“œ μ˜μ—­μ—μ„œ ν΄λž˜μŠ€λ³„λ‘œ κ΄€λ¦¬λ˜λŠ” λΆˆλ³€μ˜ 정적 ν•„λ“œμ΄λ‹€.
  • 곡용 λ°μ΄ν„°λ‘œ μ‚¬μš©ν•  λ•Œ 쓰인닀.
  • μƒμˆ˜ 이름 μ„ μ–Έ κ·œμΉ™
    • λͺ¨λ‘ λŒ€λ¬Έμžλ‘œ μž‘μ„±
    • λ‹€λ₯Έ 단어 κ²°ν•© μ‹œ _둜 μ—°κ²°
// final ν•„λ“œμ™€ μƒμˆ˜ ν™œμš© μ˜ˆμ‹œ
class MyClass {
	static final int num = 20;  // μ„ μ–Έκ³Ό λ™μ‹œμ— λ°˜λ“œμ‹œ μ΄ˆκΈ°ν™”, λ³€κ²½ λΆˆκ°€λŠ₯ν•œ 값이기 λ•Œλ¬Έμ— static으둜 μ„ μ–Έν•˜λŠ” 것이 합리적
	public MyClass(int num) {
		// this.num = num;  클래슀 λ‚΄ final λ³€μˆ˜λŠ” μƒμ„±μžλ‚˜ λ©”μ†Œλ“œμ—μ„œ λ³€κ²½ λΆˆκ°€
	}
}
public class FinalTest {

	public static void main(String[] args) {
		final int num = 10;  // μƒμˆ˜: λ³€κ²½X, λ°˜λ“œμ‹œ μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™”
		int num2 = 30;
		num2 = 50;
		final int num3;
		num3 = 20;
		// num3 = 60; 이미 μœ—μ€„μ—μ„œ μ΄ˆκΈ°ν™”ν–ˆμœΌλ―€λ‘œ λ‹€μ‹œ μ΄ˆκΈ°ν™” λΆˆκ°€λŠ₯
	}
}

7. νŒ¨ν‚€μ§€

  • νŒ¨ν‚€μ§€λŠ” 클래슀 λͺ¨μŒμ§‘!
  • λ‹€λ₯Έ νŒ¨ν‚€μ§€μ˜ 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” 방법: import
    • import 단좕킀: ctrl + shift + o
  • λ‹€λ₯Έ νŒ¨ν‚€μ§€μ˜ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 방법: Getter와 Setter λ©”μ†Œλ“œ μ‚¬μš©
    • Source -> Generate Getters and Setters 선택
  • 일반 λ³€μˆ˜μ—λŠ” public을 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

πŸ“Œ νŒ¨ν‚€μ§€ 이름 μ„ μ–Έ 방법

  • 관둀상 λͺ¨λ‘ μ†Œλ¬Έμžλ‘œ μž‘μ„±
  • 숫자둜 μ‹œμž‘ λΆˆκ°€
  • _와 $μ œμ™Έ 특수 문자 μ‚¬μš© λΆˆκ°€
  • java둜 μ‹œμž‘ν•˜λŠ” νŒ¨ν‚€μ§€λŠ” μžλ°” ν‘œμ€€ APIμ—μ„œλ§Œ μ‚¬μš©ν•˜λ―€λ‘œ μ‚¬μš©πŸ™…β€β™€οΈ
// νŒ¨ν‚€μ§€ 이름과 Getter와 Setterλ₯Ό μ‚¬μš©ν•œ μ˜ˆμ‹œ
package var;

public class Account {
	public static final int MIN_BALANCE = 0;
	public static final int MAX_BALANCE = 1000000;
	private int balance;
	public int getBalance() {
		return balance;
	}
	public void setBalance(int balance) {
		if (balance>=MIN_BALANCE && balance<=MAX_BALANCE) {
			this.balance = balance;
		}
	}
}

🐍 λ±€λ°œ

진도가 정말 μ–΄λ§ˆμ–΄λ§ˆν•œ μˆ˜μ€€μœΌλ‘œ λΉ λ₯΄κ²Œ λ‚˜κ°€λ²„λ¦¬λŠ” κΈ°λΆ„ γ…‡<-<
클래슀 νŒŒνŠΈκ°€ 정말 양이 λ§Žμ€ 것 κ°™λ‹€. ν•˜λ£¨μ’…μΌ 진도 λ‚˜κ°€κ³ λ„ λ‚¨μ•„λ²„λ ΈλŠ”λ°, 이 νŒŒνŠΈκ°€ μ•„λ¬΄λž˜λ„ μžλ°”μ˜ 기본이자 제일 μ€‘μš”ν•œ 뢀뢄이라 그런 λͺ¨μ–‘이닀. 정리도 μ’€ 더 μ—΄μ‹¬νžˆ μž˜ν•΄λ†”μ•Όμ§€.

profile
ν•¨κ»˜ λ‚˜μ•„κ°€λŠ” 개발자πŸ’ͺ

0개의 λŒ“κΈ€