PL(Programming Language)/Java

[Java] μƒμ„±μž κ°œλ…κ³Ό λͺ©μ , this 레퍼런슀, this() 호좜

탱저 2021. 10. 14. 16:06

μƒμ„±μž κ°œλ…κ³Ό λͺ©μ 

 

μƒμ„±μž

  • 객체가 생성될 λ•Œ μ΄ˆκΈ°ν™” λͺ©μ μœΌλ‘œ μ‹€ν–‰λ˜λŠ” λ©”μ†Œλ“œ
  • 객체가 μƒμ„±λ˜λŠ” μˆœκ°„μ— μžλ™ 호좜
  • ☞ ν΄λž˜μŠ€λ‘œλΆ€ν„° 객체λ₯Ό 생성할 λ•Œ μˆ˜ν–‰λ˜μ–΄ 객체의 μ΄ˆκΈ°ν™”λ₯Ό λ‹΄λ‹Ήν•˜λŠ” 것

두 개의 μƒμ„±μžλ₯Ό 가진 Circle 클래슀 예제 (객체지ν–₯의 νŠΉμ§•μΈ λ‹€ν˜•μ„±λ„ μ—Ώλ³Ό 수 있음)

public class Circle {
	int radius;
	String name;

	public Circle { 
    // 맀개 λ³€μˆ˜ μ—†λŠ” μƒμ„±μž
    // μƒμ„±μž 이름은 클래슀 이름과 κ°™μŒ
		radius = 1;
		name = "";
	}
	
	public Circle(int r, String t) {
    // 맀개 λ³€μˆ˜ 가진 μƒμ„±μž
		radius = r;
		name = t;
	}
	
	public double getArea() {
		return 3.14 * radius * radius;
	}
	
	public static void main(String[] args) {
		Circle pizza = new Circle(10, "μžλ°”ν”Όμž");
		double area = pizza.getArea();
		System.out.println(pizza.name + "의 면적은 " + area);
		
		Circle donut = new Circle();
		donut.name = "λ„λ„›ν”Όμž";
		area = donut.getArea();
		System.out.println(donut.name + "의 면적은 " + area);
	}

}

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

  • μƒμ„±μž 이름 = 클래슀 이름
  • μƒμ„±μžλŠ” μ—¬λŸ¬ 개 μž‘μ„± κ°€λŠ₯ → λ‹€ν˜•μ„±
  • μƒμ„±μžλŠ” 객체생성 μ‹œ ν•œ 번만 호좜
    • μžλ°”μ—μ„œ 객체 생성은 λ°˜λ“œμ‹œ new μ—°μ‚°μžλ‘œ 함
  • μƒμ„±μžμ˜ λͺ©μ μ€ 객체 생성 μ‹œ μ΄ˆκΈ°ν™”λ¨
  • μƒμ„±μžλŠ” 리턴 νƒ€μž…μ„ 지정할 수 μ—†μŒ
  • 클래슀 내뢀에 μƒμ„±μžλ₯Ό μ„ μ–Έν•˜μ§€ μ•ŠμœΌλ©΄ μžλ™μœΌλ‘œ κΈ°λ³Έ μƒμ„±μž μ„ μ–Έ
  • μƒμ„±μžμ˜ μ’…λ₯˜ 1) κΈ°λ³Έ μƒμ„±μž 2) 일반 μƒμ„±μž

예제) 제λͺ©κ³Ό μ €μžλ₯Ό λ‚˜νƒ€λ‚΄λŠ” titleκ³Ό author ν•„λ“œλ₯Ό 가진 Book 클래슀λ₯Ό μž‘μ„±ν•˜κ³ , μƒμ„±μžλ₯Ό μž‘μ„±ν•˜μ—¬ ν•„λ“œλ₯Ό μ΄ˆκΈ°ν™”ν•˜λΌ

public class Book {
	String title;
	String author;
	
	public Book(String t) {
    // μƒμ„±μž
		title = t; author = "μž‘κ°€λ―Έμƒ";
	}
	
	public Book(String t, String a) {
	// μƒμ„±μž
	    title = t; author = a;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Book littlePrince = new Book("μ–΄λ¦°μ™•μž", "생텍μ₯νŽ˜λ¦¬");
		Book loveStory = new Book("좘ν–₯μ „");
		System.out.println(littlePrince.title + " " + littlePrince.author);
		System.out.println(loveStory.title + " " + loveStory.author);
	}
}

μƒμ„±μžμ˜ μ’…λ₯˜

 

1) κΈ°λ³Έ μƒμ„±μž

  • 맀개 λ³€μˆ˜ μ—†κ³ , 아무 μž‘μ—… 없이 λ‹¨μˆœ λ¦¬ν„΄ν•˜λŠ” μƒμ„±μž
    class Circle {
    	public Circle(); // κΈ°λ³Έ μƒμ„±μž
    }​


  • λ””ν΄νŠΈ μƒμ„±μžλΌκ³ λ„ 뢈림
  • κΈ°λ³Έ μƒμ„±μžκ°€ μžλ™ μƒμ„±λ˜λŠ” 경우
    • ν΄λž˜μŠ€μ— μƒμ„±μžκ°€ ν•˜λ‚˜λ„ μ„ μ–Έλ˜μ–΄ μžˆμ§€ μ•Šμ„ λ•Œ μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ κΈ°λ³Έ μƒμ„±μž μžλ™ 생성
  • κΈ°λ³Έ μƒμ„±μžκ°€ μžλ™ μƒμ„±λ˜μ§€ μ•ŠλŠ” 경우
    • ν΄λž˜μŠ€μ— μƒμ„±μžκ°€ μ„ μ–Έλ˜μ–΄ μžˆλŠ” 경우 μ»΄νŒŒμΌλŸ¬λŠ” κΈ°λ³Έ μƒμ„±μžλ₯Ό μžλ™ 생성해 주지 μ•ŠλŠ”λ‹€.

2) 일반 μ—°μ‚°μž


this 레퍼런슀

 

this

  • 객체 μžμ‹ μ— λŒ€ν•œ 레퍼런슀
  • μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ μžλ™ 관리, κ°œλ°œμžλŠ” μ‚¬μš©ν•˜κΈ°λ§Œ ν•˜λ©΄ 됨
  • this.멀버 ν˜•νƒœλ‘œ 멀버 μ ‘κ·Όν•  λ•Œ μ‚¬μš© !
  • this와 this()λŠ” λ‹€λ₯΄λ‹€.
  • thisλŠ” λ©”μ†Œλ“œμ—μ„œ μ‚¬μš©λ˜κ³  ν˜„μž¬ 객체λ₯Ό 가리킴
  • static λ©”μ†Œλ“œμ—μ„œλŠ” μ‚¬μš© λΆˆκ°€

this()둜 λ‹€λ₯Έ μƒμ„±μž 호좜

 

this()

  • 같은 클래슀의 λ‹€λ₯Έ μƒμ„±μž 호좜
  • μƒμ„±μž λ‚΄μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯
  • μƒμ„±μž μ½”λ“œμ˜ 제일 μ²˜μŒμ— μžˆμ–΄μ•Ό 함

 

예제) μœ„μ—μ„œ μž‘μ„±ν•œ Book 클래슀의 μƒμ„±μžλ₯Ό this()λ₯Ό μ΄μš©ν•΄ μˆ˜μ •ν•˜λΌ

 

public class Book2 {
	String title;
	String author;
	void show() {
		System.out.println(title + " " + author);
	}

	public Book2() {
		this("", ""); // 첫 번째 λ¬Έμž₯에 this
		System.out.println("μƒμ„±μž 호좜됨");
	}
	
	public Book2(String title) {
		this(title, "μž‘κ°€λ―Έμƒ");
	}

	public Book2(String title, String author) {
		this.title = title;
		this.author = author;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Book2 littlePrince = new Book2("μ–΄λ¦°μ™•μž", "생텍μ₯νŽ˜λ¦¬");
		Book2 loveStory = new Book2("좘ν–₯μ „");
		Book2 emptyBook = new Book2();
		loveStory.show();
	}

}

 

728x90