Study 5. 클래슀 πŸ™‚

정지은·2023λ…„ 1μ›” 23일
1

JAVAλ₯Ό μž‘μ•„~

λͺ©λ‘ 보기
5/15
post-thumbnail

Today’s Study


  1. 클래슀 μ •μ˜ν•˜λŠ” 방법
  2. 객체 λ§Œλ“œλŠ” 방법 (new ν‚€μ›Œλ“œ μ΄ν•΄ν•˜κΈ°)
  3. λ©”μ†Œλ“œ μ •μ˜ν•˜λŠ” 방법
  4. μƒμ„±μž μ •μ˜ν•˜λŠ” 방법
  5. This ν‚€μ›Œλ“œ μ΄ν•΄ν•˜κΈ°

1. 클래슀 μ •μ˜ν•˜λŠ” 방법


객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ μ‹€μ„Έκ³„μ˜ μ‘΄μž¬ν•˜λŠ” 사물을 객채(Object)둜 두고 객체의 속성과 κΈ°λŠ₯을 기반으둜 ν”„λ‘œκ·Έλž˜λ°ν•œλ‹€. JavaλŠ” 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λ©΄μ„œ 클래슀 기반의 언어이닀. ν΄λž˜μŠ€λž€ 같은 μ’…λ₯˜μ˜ 집단에 μ†ν•˜λŠ” 속성(attribute)κ³Ό ν–‰μœ„(behavior)λ₯Ό μ •μ˜ν•œ κ²ƒμœΌλ‘œ 객체지ν–₯ ν”„λ‘œκ·Έλž¨μ˜ 기본적인 μ‚¬μš©μž μ •μ˜ λ°μ΄ν„°ν˜•μ΄λ‹€.

μžλ°”μ—μ„œ ν΄λž˜μŠ€λŠ” ν•„λ“œ,μƒμ„±μž,λ©”μ†Œλ“œλ‘œ κ΅¬μ„±λœλ‹€.

  • ν•„λ“œ(멀버 λ³€μˆ˜) : 객체지ν–₯μ—μ„œ 속성(attribute) 에 ν•΄λ‹Ήν•˜λ©° 멀버 λ³€μˆ˜λΌκ³ λ„ ν•œλ‹€.
  • μƒμ„±μž : λ³€μˆ˜μ— μ΄ˆκΈ°κ°’μ„ λŒ€μž…ν•˜μ—¬ μ‚¬μš©ν•˜λ“― ν΄λž˜μŠ€λ„ μƒμ„±μžλ₯Ό 톡해 μ΄ˆκΈ°ν™”λ₯Ό ν•  수 μžˆλ‹€.
  • λ©”μ†Œλ“œ : 객체지ν–₯μ—μ„œ κΈ°λŠ₯(ν–‰μœ„)에 ν•΄λ‹Ήν•˜λ©° 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ λ©”μ†Œλ“œ 내에 μ •μ˜λœ ν–‰μœ„λ₯Ό μ‹€ν–‰ν•˜λŠ” 역할을 ν•œλ‹€.
public class Person {
   private String name;
   private String age;

   // default μƒμ„±μž
   public Person(){
      
   }
   
   // νŒŒλΌλ―Έν„°λ₯Ό κ°€μ§„ μƒμ„±μž -> 속성
   public Person(String name, String age){
      this.name = name;
      this.age = age;
   }

   // λ©”μ†Œλ“œ, 이름을 κ°€μ Έμ˜€λŠ” ν–‰μœ„λ₯Ό λͺ…μ‹œν•œλ‹€.
   public String getName(){
   return name;
   }
}

class ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 클래슀λ₯Ό μ •μ˜ν•˜κ³ , μ™ΈλΆ€ ν΄λž˜μŠ€κ°€ ν•΄λ‹Ή ν΄λž˜μŠ€μ— μ ‘κ·Όν•˜λŠ” λ²”μœ„λ₯Ό μ ‘κ·Ό μ œμ–΄μž(public, protected, default, private) λ₯Ό 톡해 μ œν•œν•  수 μžˆλ‹€.

μ ‘κ·Ό μ œμ–΄μž

  • public : μ ‘κ·Όλ²”μœ„μ— μ œν•œμ΄ μ—†μ–΄ μ–΄λ””μ—μ„œλ“  자유둭게 μ ‘κ·Όν•  수 μžˆλ‹€.
  • protected : 같은 νŒ¨ν‚€μ§€ λ‚΄μ—μ„œ 접근이 κ°€λŠ₯ν•˜κ³  λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—μ„œλ„ 상속을 받은 클래슀 λ‚΄λΆ€μ—μ„œλŠ” μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€. (publicκ³Ό λ‹€λ₯Έ 점은 λ‹€λ₯Έ νŒ¨ν‚€μ§€μ˜ μžμ‹ 클래슀 μ™ΈλΆ€μ—μ„œλŠ” μ ‘κ·Όν•  수 μ—†λ‹€.)
  • default : 같은 νŒ¨ν‚€μ§€ λ‚΄μ—μ„œλ§Œ 접근이 κ°€λŠ₯ν•˜λ‹€. μ•„λ¬΄λŸ° μ ‘κ·Ό μ§€μ •μžλ„ 없을 경우 이 μ˜΅μ…˜μ΄ μžλ™μœΌλ‘œ μ μš©λœλ‹€.
  • private : 동일 클래슀 λ‚΄μ—μ„œλ§Œ 접근이 κ°€λŠ₯ν•˜λ‹€.


2. 객체 λ§Œλ“œλŠ” 방법 (new ν‚€μ›Œλ“œ μ΄ν•΄ν•˜κΈ°)


클래슀λ₯Ό μ •μ˜ν•œ ν›„ ν΄λž˜μŠ€λ‘œλΆ€ν„° 객체λ₯Ό λ§Œλ“€μ–΄ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”λ° μ΄λŸ¬ν•œ 과정을 클래슀의 μΈμŠ€ν„΄μŠ€ν™”λΌκ³  ν•œλ‹€. κ°μ²΄λŠ” new ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•΄ 생성이 κ°€λŠ₯ν•˜λ‹€.

new ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•˜λ©΄ λ©”λͺ¨λ¦¬ heap μ˜μ—­μ— 데이터λ₯Ό μ €μž₯ν•  μ˜μ—­μ„ ν• λ‹Ή 받은 ν›„ ν•΄λ‹Ή μ˜μ—­μ˜ μ£Όμ†Œλ₯Ό κ°μ²΄μ—κ²Œ λ°˜ν™˜ν•˜μ—¬ 객체λ₯Ό μ‚¬μš©ν•  수 있게 ν•œλ‹€.

Person person = new Person();   // κΈ°λ³Έ μƒμ„±μž
Person person1 = new Person(β€œJieun”, 25);   // νŒŒλΌλ―Έν„°λ₯Ό κ°€μ§€λŠ” μƒμ„±μž
person1.getName();   // Jieun

new μ—°μ‚°μžμ˜ μž‘λ™μ›λ¦¬

public class Main{
	public static void main(String[] args){
    	//new μ—°μ‚°μž
    	String str = new String("string");
        String str2 = new String("string");
        
        //λ¦¬ν„°λŸ΄
        String str3 = "string";
        String str4 = "string";
    }
}

new μ—°μ‚°μžλ₯Ό 톡해 "string"μ΄λΌλŠ” λ¬Έμžμ—΄κ°’μ„ λ‹΄κ³ μžˆλŠ” String 객체λ₯Ό μƒμ„±ν•œλ‹€. λ³€μˆ˜ strλŠ” Stack μ˜μ—­μ— μƒμ„±λ˜κ³  new String으둜 μƒμ„±λœ λ¬Έμžμ—΄κ°’μ΄ Heapμ˜μ—­μ˜ λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήλ°›λŠ”λ‹€. strμ΄λΌλŠ” λ³€μˆ˜λŠ” Heapμ˜μ—­μ˜ λ©”λͺ¨λ¦¬μ£Όμ†Œλ₯Ό κ°€λ₯΄ν‚€κ²Œ 되고 이λ₯Ό λ‹€λ₯Έ 말둜 참쑰라고 ν•œλ‹€.

그럼 newμ—°μ‚°μžμ™€ λ¦¬ν„°λŸ΄μ˜ 차이λ₯Ό ν•œλ²ˆ 보자.

newμ—°μ‚°μžλŠ” 객체λ₯Ό 생성할 λ•Œ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— Heapμ΄λΌλŠ” λ©”λͺ¨λ¦¬ μ˜μ—­μ— λ‹€μŒκ³Ό 같이 각각의 λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήν•΄ μ€€λ‹€. newμ—°μ‚°μžλ‘œ μƒμ„±ν•œ κ°μ²΄λ“€μ˜ λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ λ‹€λ₯΄κ²Œ λ‚˜μ˜€λŠ” 것이닀. ν•˜μ§€λ§Œ λ¦¬ν„°λŸ΄μ€ 이전에 κ³΅λΆ€ν–ˆλ˜κ²ƒμ²˜λŸΌ Heapλ©”λͺ¨λ¦¬ μ˜μ—­ μ•ˆμ— μžˆλŠ” Constant Poolμ΄λΌλŠ” λ©”λͺ¨λ¦¬ μ˜μ—­μ— ν• λ‹Ήν•˜κ²Œλ˜κ³  λ˜‘κ°™μ€ 값을 ν˜ΈμΆœν• λ•ŒλŠ” 이 전에 ν• λ‹Ήν•΄ λ†“μ•˜λ˜ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό λ„˜κ²¨μ€€λ‹€.



3. λ©”μ†Œλ“œ μ •μ˜ν•˜λŠ” 방법


λ©”μ†Œλ“œλŠ” μžλ°”μ—μ„œ ν΄λž˜μŠ€κ°€ κ°€μ§€λŠ” κ²ƒμœΌλ‘œ νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ λͺ…λ Ήλ¬Έμ˜ 집합을 λ§ν•œλ‹€. λ‹€λ₯Έ μ–Έμ–΄μ—μ„œλŠ” ν•¨μˆ˜λ‘œ λΆˆλ¦¬κΈ°λ„ ν•œλ‹€.

μ ‘κ·Όμ œμ–΄μž λ°˜ν™˜νƒ€μž… λ©”μ†Œλ“œμ΄λ¦„(λ§€κ°œλ³€μˆ˜λͺ©λ‘){ //μ„ μ–ΈλΆ€
	//κ΅¬ν˜„λΆ€
}

public String get FirstName(){
	return this.firstName;
}

λ‹€μŒκ³Ό 같이 λ©”μ†Œλ“œλ₯Ό μ •μ˜ν•  수 μžˆλ‹€.

  • μ ‘κ·Όμ œμ–΄μž : ν•΄λ‹Ή λ©”μ†Œλ“œμ— μ •μ˜ν•  수 μžˆλŠ” λ²”μœ„λ₯Ό λͺ…μ‹œν•œλ‹€.
  • λ°˜ν™˜νƒ€μž…: λ©”μ†Œλ“œκ°€ μž‘μ—…μ„ 마치고 λ°˜ν™˜ν•˜λŠ” λ°μ΄ν„°μ˜ νƒ€μž…μ„ λͺ…μ‹œν•œλ‹€. (λ°˜ν™˜νƒ€μž…μ—†μ΄ νŠΉμ • μž‘μ—…λ§Œ ν•˜κ³  μ‹Άλ‹€λ©΄ voidλ₯Ό μ‚¬μš©ν•œλ‹€.)
  • λ©”μ†Œλ“œ 이름 : λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜κΈ° μœ„ν•΄ λ©”μ†Œλ“œμ˜ 이름을 λΆ™μ—¬μ£ΌλŠ” 것이닀.
  • λ§€κ°œλ³€μˆ˜ λͺ©λ‘ (parameters) : λ©”μ†Œλ“œ 호좜 μ‹œμ— μ „λ‹¬λ˜λŠ” 인수의 값을 μ €μž₯ν•  λ©΄μˆ˜λ“€μ„ λͺ…μ‹œν•œλ‹€.
  • κ΅¬ν˜„λΆ€ : λ©”μ†Œλ“œλ₯Ό 톡해 μˆ˜ν–‰ν•˜κ³  싢은 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λͺ…λ Ήλ¬Έμ˜ 집합이닀.

이와 λ”λΆˆμ–΄ λ©”μ†Œλ“œμ—μ„œλŠ” λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ”©μ΄ μ€‘μš”ν•œλ° μ΄λŠ” λ‹€μŒ μ£Όμ°¨μ—μ„œ μ•Œμ•„λ³΄μž.

4. μƒμ„±μž μ •μ˜ν•˜λŠ” 방법


μƒμ„±μžλŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  μ΄ˆκΈ°ν™”ν•˜λŠ” κ²ƒμ²˜λŸΌ 클래슀λ₯Ό μƒμ„±ν•˜κ³  객체λ₯Ό ν˜ΈμΆœν•  λ•Œ 객체λ₯Ό μ΄ˆκΈ°ν™”ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” 것이닀.

μƒμ„±μžλŠ” κΈ°λ³Έμƒμ„±μž, λ¬΅μ‹œμ μƒμ„±μž, λͺ…μ‹œμ μƒμ„±μžλ‘œ λ‚˜λ‰œλ‹€.

  • κΈ°λ³Έμƒμ„±μž : 클래슀 내뢀에 λ”°λ‘œ μƒμ„±μžλ₯Ό μž‘μ„±ν•˜μ§€ μ•Šμ•„ 객체 μƒμ„±μ‹œ μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ μΆ”κ°€ν•΄μ£ΌλŠ” μƒμ„±μž
  • λ¬΅μ‹œμ μƒμ„±μž : νŒŒλΌλ―Έν„° 값을 κ°€μ§€μ§€ μ•ŠλŠ” μƒμ„±μž
  • λͺ…μ‹œμ μƒμ„±μž : νŒŒλΌλ―Έν„° 값을 κ°€μ§€λŠ” μƒμ„±μž
class Person(){
	//λ¬΅μ‹œμ  μƒμ„±μž
    public Person(){
    	System.out.println("λ¬΅μ‹œμ  μƒμ„±μž");
    }
    
    //λͺ…μ‹œμ  μƒμ„±μž
    public Person(String name, int age){
    	this.name = name;
        this.age = age;
    }
}

μƒμ„±μžμ˜ νŠΉμ§•

  • μƒμ„±μžλŠ” λ¦¬ν„΄νƒ€μž…μ„ κ°€μ§€μ§€ μ•ŠλŠ”λ‹€.
  • μƒμ„±μžλŠ” 클래슀의 이름과 λ™μΌν•˜λ‹€.
  • λͺ¨λ“  ν΄λž˜μŠ€λŠ” λ°˜λ“œμ‹œ ν•œκ°œ μ΄μƒμ˜ μƒμ„±μžλ₯Ό κ°€μ§„λ‹€.
  • λͺ…μ‹œμ  μƒμ„±μžλ§Œ μ„ μ–Έλ˜μ–΄μžˆλŠ” 경우, νŒŒλΌλ―Έν„°κ°€ μ—†λŠ” μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ λ¬΅μ‹œμ  μƒμ„±μžλ₯Ό μ„ μ–Έν•΄μ£Όμ–΄μ•Όν•œλ‹€. (κΈ°λ³Έ μƒμ„±μž 생성 x)


5. this ν‚€μ›Œλ“œ μ΄ν•΄ν•˜κΈ°


thisλŠ” μ°Έμ‘°λ³€μˆ˜λ‘œ μΈμŠ€ν„΄μŠ€ μžμ‹ μ„ κ°€λ₯΄ν‚¨λ‹€. 주둜 μƒμ„±μžμ™€ λ©”μ†Œλ“œμ˜ λ§€κ°œλ³€μˆ˜ 이름이 ν•„λ“œμ™€ 같은 경우, λ‚΄κ°€ μ°Έμ‘°ν•˜λ €λŠ” 것이 μΈμŠ€ν„΄μŠ€ 멀버인 ν•„λ“œμž„μ„ λͺ…μ‹œν•˜κ³ μž ν• λ•Œ μ‚¬μš© λœλ‹€.

public class Test{
	int a;	//Test클래슀 ν•„λ“œμ—μ„œ μ„ μ–Έλœ a
    
    void set_test(int a){	//set_test λ©”μ†Œλ“œμ˜ λ§€κ°œλ³€μˆ˜λ‘œ μ„ μ–Έλœ a
    	this.a = a;
    }
}

λ‹€μŒμ„ 보면 Test클래슀 ν•„λ“œμ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜ a와 set_test λ©”μ†Œλ“œμ˜ λ§€κ°œλ³€μˆ˜ a의 이름이 κ°™λ‹€. μ΄λŸ΄λ•Œ thisλ₯Ό μ‚¬μš©ν•˜μ—¬ this.a둜 a의 ꡬ뢄을 ν•΄μ£ΌλŠ” 것이닀.

this()

public class Day{
	String year;
    String month;
    String day;
    
	public Day(String year){
    	this(year,null,null);
    }
    
    public Day(String year, String month){
    	this(year,month,null);
    }
    
    public Day(String year, String month, String day){
    	this.year = year;
        this.month = month;
        this.day = day;
    } 
}

this()λŠ” μƒμ„±μžμ˜ μ˜€λ²„λ‘œλ”©μ„ ν•  λ•Œ μ‚¬μš©ν•˜λ‹€. 이 μ½”λ“œμ—μ„œλŠ” 3개의 λ§€κ°œλ³€μˆ˜λ₯Ό κ°–λŠ” μƒμ„±μžμ— μ΄ˆκΈ°κ°’μ„ ν• λ‹Ήν•˜λŠ” μ†ŒμŠ€μ½”λ“œλ₯Ό μ •μ˜ν•˜κ³  λ‹€λ₯Έ μƒμ„±μžλŠ” this()λ₯Ό μ‚¬μš©ν•˜μ—¬ μ€‘λ³΅μ½”λ“œλ₯Ό μ œκ±°ν•˜μ˜€λ‹€. this()λ₯Ό μ‚¬μš©ν•  λ•Œ μ€‘μš”ν•œ 점은 μƒμ„±μžμ—μ„œλ§Œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜κ³  λ°˜λ“œμ‹œ ν˜ΈμΆœν•˜λŠ” 곳의 첫번째 λ¬Έμž₯μ—μ„œ μž‘μ„±ν•΄μ•Ό ν•œλ‹€λŠ” 것이닀.

Reference


λ³Έ μŠ€ν„°λ””λŠ” 2020 λ°±κΈ°μ„ λ‹˜μ˜ μžλ°”μŠ€ν„°λ””μ˜ μ»€λ¦¬ν˜λŸΌμ„ μ°Έκ³ ν•˜μ—¬ μ§„ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

0개의 λŒ“κΈ€