Java

์ธ์Šคํ„ด์Šค, ์ •๋ณด์€๋‹‰

์กฐ๋ฐˆ๋ฐ 2022. 2. 18. 20:57

๐Ÿ’ก ํด๋ž˜์Šค

: ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ • == ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šคํ™”

: ์–ด๋–ค ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด == ๊ทธ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค

* ์ธ์Šคํ„ด์Šค๋Š” ์ฐธ์กฐ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฐธ์กฐ๋ณ€์ˆ˜์˜ ํƒ€์ž…์€ ์ธ์Šคํ„ด์Šค์˜ ํƒ€์ž…๊ณผ ์ผ์น˜ํ•ด์•ผํ•œ๋‹ค.

* ๊ฐ์ฒด : ํด๋ž˜์Šค์— ์„ ์–ธ๋œ ๋ชจ์–‘ ๊ทธ๋Œ€๋กœ ์ƒ์„ฑ๋œ ์‹ค์ฒด, 'ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค'

* ์ธ์Šคํ„ด์Šค : ์‹ค์ œ๋กœ ๊ตฌํ˜„๋œ ๊ตฌ์ฒด์ ์ธ ์‹ค์ฒด

 

 

ํด๋ž˜์Šค๋ช… ๊ฐ์ฒด๋ช… = new ํด๋ž˜์Šค๋ช…;

* ์ƒ์„ฑ์ž = ํด๋ž˜์Šค์ด๋ฆ„ ๊ฐ™์•„์•ผํ•œ๋‹ค

์˜ˆ) Card c = new Card(); 

-> ์—ฐ์‚ฐ์ž new์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ(heap)์— Cardํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค, ์ฃผ์†Œ์ƒ์„ฑ

-> ์ƒ์„ฑ์ž Card()๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์ˆ˜ํ–‰๋œ๋‹ค

-> ์—ฐ์‚ฐ์ž new์˜ ๊ฒฐ๊ณผ๋กœ, ์ƒ์„ฑ๋œ Card์ธ์Šคํ„ด์Šค์˜ ์ฃผ์†Œ๊ฐ€ ๋ฐ˜ํ™˜๋˜์–ด ์ฐธ์กฐ๋ณ€์ˆ˜ c์— ์ €์žฅ๋œ๋‹ค

: Card ํด๋ž˜์Šคํ˜•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด c๋ฅผ ์ด์šฉํ•˜๋ฉด Card ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

: ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ์ฒด๋ช….ํด๋ž˜์Šค๋ฉ”์†Œ๋“œ๋ช…(); ์ (.)์ด์šฉ

* static ์„ ์–ธํ•œ๋‹ค๋ฉด ๊ฐ์ฒด ์ƒ์„ฑ์—†์ด ํด๋ž˜์Šค๋ช….๋ฉ”์†Œ๋“œ๋ช…(); ๋งŒ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

โ˜ž new : ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค์›Œ๋“œ

ex) Animal dog = new Animal();

-> Animal์˜ ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์กŒ๋‹ค

-> Animal ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค(instance)์ธ dog๊ฐ€ ๋งŒ๋“ค์–ด์กŒ๋‹ค

 

๐Ÿ”Ž ๊ฐ์ฒด์™€ ์ธ์Šคํ„ด์Šค

ํด๋ž˜์Šค์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด == ์ธ์Šคํ„ด์Šค

์ธ์Šคํ„ด์Šค : ํŠน์ • ๊ฐ์ฒด(dog)๊ฐ€ ์–ด๋–ค ํด๋ž˜์Šค(Animal)์˜ ๊ฐ์ฒด์ธ์ง€๋ฅผ ๊ด€๊ณ„์œ„์ฃผ๋กœ ์„ค๋ช…ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค

=> dog๋Š” ๊ฐ์ฒด, dog๋Š” Animal์˜ ์ธ์Šคํ„ด์Šค

 

โ˜ž ๋ถ•์–ด๋นต ํ‹€ -> ํด๋ž˜์Šค(Class),

    ๋ถ•์–ด๋นต๋“ค = ๊ฐ์ฒด(object),

    ์ฐ์–ด๋‚ธ ๊ฐ๊ฐ์˜ ๋ถ•์–ด๋นต(์Šˆํฌ๋ฆผ, ํŒฅ) = ์ธ์Šคํ„ด์Šค(instance) 

=> ์Šˆํฌ๋ฆผ ๋ถ•์–ด๋นต, ํŒฅ ๋ถ•์–ด๋นต ๊ฐ™์€ ํƒ€์ž…์˜ ๊ฐ์ฒด์ง€๋งŒ, ๊ฐ๊ฐ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋‹ค

 

๐Ÿ’ก ์ธ์Šคํ„ด์Šค์™€ ํž™(heap) ๋ฉ”๋ชจ๋ฆฌ

: ํ•˜๋‚˜์˜ ํด๋ž˜์Šค ์ฝ”๋“œ๋กœ ๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ

: ์ธ์Šคํ„ด์Šค๋Š” ํž™(heap) ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋œ๋‹ค

: ๊ฐ๊ฐ์˜ ์ธ์Šคํ„ด์Šค๋Š” ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ์— ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค

: studentLee๋Š” heap๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋œ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฅดํ‚จ๋‹ค

: heap๋Š” new๋ผ๋Š” ํ‚ค์›Œ๋“œ๋กœ ์ƒ์„ฑ๋œ๋‹ค 

 

๐Ÿ”Ž ์šฉ์–ด์ •๋ฆฌ

๊ฐ์ฒด : ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋žจ์˜ ๋Œ€์ƒ, ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค

ํด๋ž˜์Šค : ๊ฐ์ฒด๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋กœ ๋งŒ๋“  ์ƒํƒœ

์ธ์Šคํ„ด์Šค : ํด๋ž˜์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋œ ์ƒํƒœ <- new 

๋ฉค๋ฒ„๋ณ€์ˆ˜ : ํด๋ž˜์Šค์˜ ์†์„ฑ, ํŠน์„ฑ

๋ฉ”์„œ๋“œ : ๋ฉค๋ฒ„๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„

์ฐธ์กฐ๋ณ€์ˆ˜ : ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” ๋ณ€์ˆ˜

์ฐธ์กฐ ๊ฐ’ : ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ฐ’

 

๐Ÿ’ก ์ƒ์„ฑ์ž

: ์ธ์Šคํ„ด์Šค๋ฅผ ์ดˆ๊ธฐํ™” ํ•  ๋•Œ์˜ ๋ช…๋ น์–ด ์ง‘ํ•ฉ

: ์ƒ์„ฑ์ž์˜ ์ด๋ฆ„์€ ๊ทธ ํด๋ž˜์Šค์˜ ์ด๋ฆ„๊ณผ ๊ฐ™๋‹ค

: ์ƒ์„ฑ์ž๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์ƒ์†๋˜์ง€ ์•Š์œผ๋ฉฐ, ๋ฆฌํ„ด๊ฐ’ ์—†๋‹ค

 

๐Ÿ”Ž ์ƒ์„ฑ์ž ์˜ค๋ฒ„๋กœ๋“œ

: ํ•„์š”์— ์˜ํ•ด ์ƒ์„ฑ์ž ์ถ”๊ฐ€ ํ•˜๋Š” ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ƒ์„ฑ์ž๊ฐ€ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ์žˆ์Œ(overload)

 

๐Ÿ’ก ์ •๋ณด์€๋‹‰

: private ์ ‘๊ทผ ์ œ์–ด์ž

: ํด๋ž˜์Šค์˜ ์™ธ๋ถ€์—์„œ ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผ(access)ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ

: ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค

: ๋ณ€์ˆ˜์— ๋Œ€ํ•ด์„œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ get(), set() ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณต

 

class BirthDay{
	private int day;
	private int month;
	private int year;
	
	public int getDay() {
		return day;
	}
	public void setDay(int day) {
		if (month == 2) {
			if(day < 1 || day > 28) {
				System.out.println("์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค");
			}
		}else {
			this.day = day;
		}
	}
	public int getMonth() {
		return month;
	}
	public void setMonth(int month) {
		this.month = month;
	}
	public int getYear() {
		return year;
	}
	public void setYear(int year) {
		this.year = year;
	}
}

public class BithDayEx {

	public static void main(String[] args) {
		BirthDay day = new BirthDay();
		
		day.setMonth(2);
		day.setDay(30);
		day.setYear(2022);
	}

}