πŸ’» BackEnd/🟨 Java

🟨 [Java] [클래슀] μžλ°” 클래슀

Dbswnstjd 2023. 4. 25. 16:37

🎁 클래슀  ?

  • 객체λ₯Ό μ •μ˜ν•΄ 놓은 것
  • 객체의 섀계도 λ˜λŠ” ν‹€
  • 객체λ₯Ό μƒμ„±ν•˜λŠ”λ° μ‚¬μš©

 

πŸ“– ν΄λž˜μŠ€μ™€ 객체, μΈμŠ€ν„΄μŠ€

μ²˜μŒμ— 클래슀, μΈμŠ€ν„΄μŠ€, 객체와 같은 단어λ₯Ό μ ‘ν•˜κ³  어렀움이 μžˆμ—ˆλ‹€. 예λ₯Ό λ“€μ–΄μ„œ μ„€λͺ…ν•˜λ©΄ μ‰½κ²Œ 이해가 될 것이닀.

class Product{
    String model;
    String name;
    String category;
    boolean power;
    
    //κΈ°λŠ₯(λ©”μ„œλ“œ)
    void turnOn(){ 
    	this.power = 1;
    	return this.power; 
    }
    boolean turnOff(){ 
    	this.power = 0;
    	return this.power; 
    }
}

 μœ„와 같이 Product λΌλŠ” ν΄λž˜μŠ€κ°€ μžˆλ‹€κ³  ν•˜μž. μƒν’ˆμ΄λΌλŠ” ν΄λž˜μŠ€κ°€ μ‘΄μž¬ν•˜λŠ”λ° κ³Όμ—° μ–΄λ–€ μƒν’ˆμΌκΉŒ?

ν•Έλ“œν°, TV, 마우슀, ν‚€λ³΄λ“œ, 컴퓨터 λ“±λ“± 이 μ„Έμƒμ—λŠ” μƒν’ˆμ΄ 맀우 많이 μ‘΄μž¬ν•œλ‹€.

μ΄λŸ¬ν•œ 객체(ν•Έλ“œν°, TV λ“±)듀이 μƒν’ˆμ΄λΌλŠ” 클래슀λ₯Ό 상속받아 μœ„μ˜ ν΄λž˜μŠ€μ—μ„œλŠ” 전원을 ν‚€κ³  λ„λŠ” 곡톡적인 κΈ°λŠ₯이 μžˆλ‹€.

public class SmartPhone extends Product{
    String model;
    String company;
    
    // κΈ°λŠ₯(λ©”μ„œλ“œ)
    void call(){}
    void message(){}
}

μœ„μ˜ μ½”λ“œλŠ” μƒν’ˆ 클래슀λ₯Ό 상속받아 슀마트폰 ν΄λž˜μŠ€λŠ” μƒν’ˆμ— μžˆλŠ” 곡톡적인 νŠΉμ§•λ“€μ„ μ‚¬μš©ν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ ν•Έλ“œν°μ΄λΌλŠ” ν΄λž˜μŠ€λŠ” 주인이 μ§€κΈˆ μ—†λŠ” μƒνƒœμ΄λ‹€. λ‚˜μ˜ ν•Έλ“œν°, λ‚΄ 친ꡬ의 ν•Έλ“œν° .. κ³Ό 같이 λˆ„κ΅°κ°€μ˜ ν•Έλ“œν°μ΄ 되렀면 객체λ₯Ό μƒμ„±ν•˜κ³  μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•œλ‹€. 

πŸ“± κ°μ²΄λž€ ?

  • μ‹€μ œλ‘œ μ‘΄μž¬ν•˜λŠ” 것. 사물 λ˜λŠ” κ°œλ…
  • 객체의 μš©λ„λŠ” 객체가 가지고 μžˆλŠ” κΈ°λŠ₯κ³Ό 속성에 따라 닀름
  • ν΄λž˜μŠ€μ— μ •μ˜λœ λ‚΄μš©λŒ€λ‘œ λ©”λͺ¨λ¦¬μ— μƒμ„±λœ 것

🎁 객체λ₯Ό λ§Œλ“œλŠ” 방법

μΈμŠ€ν„΄μŠ€ν™”

  • ν΄λž˜μŠ€λ‘œλΆ€ν„° 객체λ₯Ό λ§Œλ“œλŠ” κ³Όμ •
  • μ–΄λ–€ ν΄λž˜μŠ€λ‘œλΆ€ν„° λ§Œλ“€μ–΄μ§„ 객체λ₯Ό κ·Έ 클래슀의 μΈμŠ€ν„΄μŠ€λΌκ³  함
객체 : λͺ¨λ“  μΈμŠ€ν„΄μŠ€λ₯Ό λŒ€ν‘œν•˜λŠ” 포괄적 의미
μΈμŠ€ν„΄μŠ€ : μ–΄λ–€ ν΄λž˜μŠ€λ‘œλΆ€ν„° λ§Œλ“€μ–΄μ§„ 것인지λ₯Ό κ°•μ‘°ν•˜λŠ” 보닀 ꡬ체적인 의미

즉, μŠ€λ§ˆνŠΈν°μ΄λΌλŠ” ν΄λž˜μŠ€μ—μ„œ 객체λ₯Ό λ§Œλ“€μ–΄ μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€λ©΄ λ‚˜μ˜ 슀마트폰이 μƒκΈ°λŠ” 것과 κ°™λ‹€. 

SmartPhone myPhone = new SmartPhone();

 μœ„와 같은 μ½”λ“œλ₯Ό μƒμ„±ν•˜λ©΄ λ‚˜λ§Œμ˜ 슀마트폰 μΈμŠ€ν„΄μŠ€κ°€ 생긴 것이닀. 이 슀마트폰의 κΈ°λŠ₯은 전원 / μ „ν™” / 메세지 등이 μžˆλ‹€. 

 

🎁 κ°μ²΄μ˜ ꡬ성 μš”μ†Œ

  • 속성(Property)
    • λ©€λ²„λ³€μˆ˜, νŠΉμ„±, ν•„λ“œ, μƒνƒœ

 

  • κΈ°λŠ₯
    • λ©”μ„œλ“œ, ν–‰μœ„
myPhone.name = "Apple"; // 속성 - λ©€λ²„λ³€μˆ˜
myPhone.turnOn(); // λ©”μ„œλ“œ

 

🧧 new μ—°μ‚°μž

μΈμŠ€ν„΄μŠ€(객체)λ₯Ό μƒμ„±ν•΄μ£ΌλŠ” μ—­ν• 

λ©”λͺ¨λ¦¬(Heap μ˜μ—­)에 데이터λ₯Ό μ €μž₯ν•  곡간을 ν• λ‹Ήλ°›κ³  κ·Έ κ³΅κ°„μ˜ 참쑰값을 κ°μ²΄μ—κ²Œ λ°˜ν™˜ν•˜μ—¬ μ£Όκ³  μ΄μ–΄μ„œ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•œλ‹€.

μ—¬κΈ°μ„œ μ£Όμ˜ν•  점이 μžˆλŠ”λ° 일반적인 int ν˜• 비ꡐ와 객체의 λΉ„κ΅λŠ” λ‹€λ₯΄λ‹€. 

Tv myTv = new Tv("Samsung");
Tv newTv = new Tv("Samsung");
myTv == newTv // false

μœ„μ˜ μ½”λ“œκ°€ μžˆλ‹€κ³  ν–ˆμ„ λ•Œ myTv와 newTv λŠ” κ°™μ•„ 보인닀. ν•˜μ§€λ§Œ κ°μ²΄λŠ” μƒμ„±μ‹œ Heap λ©”λͺ¨λ¦¬ μ˜μ—­μ— 할당이 λœλ‹€.

μ΄λŠ” μ„œλ‘œ λ‹€λ₯Έ μ£Όμ†Œκ°’μ„ 가지고 μžˆλ‹€λŠ” μ˜λ―Έμ΄λ‹€. myTvλŠ” λ‚΄λΆ€μ μœΌλ‘œ 보면 Heapμ˜μ—­μ˜ μ£Όμ†Œκ°’μ„ 가지고 μžˆμ–΄μ„œ myTv와 newTvκ°€ 가지고 μžˆλŠ” μ£Όμ†Œ 값이 λ‹€λ₯΄λ‹€. λ”°λΌμ„œ  == μ—°μ‚°μžκ°€ μ•„λ‹Œ equals() λ₯Ό 톡해 비ꡐλ₯Ό ν•΄μ•Όν•œλ‹€. 

 

🧧 μƒμ„±μž

μΈμŠ€ν„΄μŠ€κ°€ 생성될 λ•Œ ν˜ΈμΆœλ˜λŠ” μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” λ©”μ„œλ“œ

 

μƒμ„±μžμ˜ 쑰건 

  • μƒμ„±μžμ˜ 이름은 클래슀의 이름과 같아야함
  • μƒμ„±μžλŠ” 리턴값이 μ—†μŒ

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

λ‚˜μ€‘μ—λŠ” Lombokμ΄λΌλŠ” 라이브러리λ₯Ό μ‚¬μš©ν•΄ μ‰½κ²Œ μƒμ„±μžλ₯Ό λ§Œλ“€ 수 μžˆλ‹€. 

 

🧧this

thisλŠ” 객체, 자기 μžμ‹ μ„ λ‚˜νƒ€λ‚Έλ‹€.

 

thisλ₯Ό μ‚¬μš©ν•˜λŠ” 경우

클래슀의 속성과 μƒμ„±μž/λ©”μ„œλ“œμ˜ λ§€κ°œλ³€μˆ˜μ˜ 이름이 같은 경우 μ–΄λ–€ λ³€μˆ˜λ₯Ό κ°€λ₯΄ν‚€λŠ”지 μ•Œλ €μ£ΌκΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.

public Tv(String name, String model){
    this.name = name;
    this.model = model;
}