ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/์ž๋ฐ”

5. ํด๋ž˜์Šค์™€ ๊ฐ์ฒด1

alswlfl 2026. 6. 4. 19:46

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ํด๋ž˜์Šค

๊ฐ์ฒด(object): ๋ˆˆ์— ๋ณด์ด๋Š” ์‚ฌ๋ฌผ ํ˜น์€ ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š๋Š” ๊ฒƒ

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Object-Oriented Programming; OOP): ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ฐ์ฒด ๊ฐ„ ํ˜‘๋ ฅ์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๋Š” ๊ฒƒ

  • ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋žจ์€ ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•จ
  • ํด๋ž˜์Šค(class) = ๊ฐ์ฒด์˜ ์†์„ฑ + ๊ธฐ๋Šฅ
    • ํด๋ž˜์Šค ์ด๋ฆ„์€ ๋ณดํ†ต ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•จ
(์ ‘๊ทผ ์ œ์–ด์ž) class ํด๋ž˜์Šค ์ด๋ฆ„{
    ๋ฉค๋ฒ„ ๋ณ€์ˆ˜; // ํด๋ž˜์Šค์˜ ์†์„ฑ
    ๋ฉ”์„œ๋“œ;
}

 

ex) ํ•™์ƒ ํด๋ž˜์Šค ์ •์˜ํ•˜๊ธฐ

package classpart;

public class Student {
	int studentID; // ํ•™๋ฒˆ
	String studentName; // ํ•™์ƒ ์ด๋ฆ„
	int grade; // ํ•™๋…„
	String address; // ์‚ฌ๋Š” ๊ณณ
}

 


ํด๋ž˜์Šค ์‚ดํŽด๋ณด๊ธฐ

๋ฉค๋ฒ„ ๋ณ€์ˆ˜(member variable): ํด๋ž˜์Šค์—์„œ ๊ฐ์ฒด ์†์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜(=์†์„ฑ, ํŠน์„ฑ)

  • ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋Š” ์†์„ฑ์ด ๋ฌด์—‡์ธ์ง€์— ๋”ฐ๋ผ ์•Œ๋งž์€ ์ž๋ฃŒํ˜• ์„ ์–ธํ•ด์ฃผ์–ด์•ผ ํ•จ
  • ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์œผ๋กœ ์„ ์–ธํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๋˜ ๋‹ค๋ฅธ ํด๋ž˜์Šคํ˜•์ธ ๊ฐ์ฒด ์ž๋ฃŒํ˜• ๋˜๋Š” ์ฐธ์กฐ ์ž๋ฃŒํ˜•์œผ๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Œ
    • ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•: int, long, float, double ๋“ฑ
    • ์ฐธ์กฐ ์ž๋ฃŒํ˜•: String, Date, Student ๋“ฑ
  • ์ฐธ์กฐ ์ž๋ฃŒํ˜•์€ JDK์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜๋„ ์žˆ๊ณ , ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋งŒ๋“  ํด๋ž˜์Šค์ผ ์ˆ˜ ์žˆ์Œ

๋ฉค๋ฒ„ ํ•จ์ˆ˜(member function) ํ˜น์€ ๋ฉ”์„œ๋“œ(method): ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ํด๋ž˜์Šค ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ

ex) ํ•™์ƒ ์ด๋ฆ„๊ณผ ์ฃผ์†Œ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฉ”์„œ๋“œ ๋งŒ๋“ค๊ธฐ

package classpart;

public class Student {
	int studentID; // ํ•™๋ฒˆ
	String studentName; // ํ•™์ƒ ์ด๋ฆ„
	int grade; // ํ•™๋…„
	String address; // ์‚ฌ๋Š” ๊ณณ
	
	public void showStudentInfo() {
		System.out.println(studentName + "," + address); // ์ด๋ฆ„, ์ฃผ์†Œ ์ถœ๋ ฅ
	}
}

 

ํŒจํ‚ค์ง€(package): ํด๋ž˜์Šค ํŒŒ์ผ์˜ ๋ฌถ์Œ

  • ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค๋ฉด ํ”„๋กœ์ ํŠธ ํ•˜์œ„์— ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ƒ์„ฑ๋จ
  • ํŒจํ‚ค์ง€๋Š” ๊ณ„์ธต ๊ตฌ์กฐ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ

๋ฉ”์„œ๋“œ(Method)

๋ฉ”์„œ๋“œ๋Š” ํ•จ์ˆ˜(function)์˜ ํ•œ ์ข…๋ฅ˜๋กœ, ํ•จ์ˆ˜๋Š” 'ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ผ๋ จ์˜ ์ฝ”๋“œ'๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ํ•จ์ˆ˜๋Š” ์ด๋ฆ„์ด ์žˆ๊ณ  ์ž…๋ ฅ ๊ฐ’๊ณผ ๊ฒฐ๊ณผ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค.

์ž๋ฐ”์—์„œ์˜ ํ•จ์ˆ˜ ํ˜•ํƒœ

 

  • ํ•จ์ˆ˜ ์ด๋ฆ„: ๋ณ€์ˆ˜ ์ด๋ฆ„์ฒ˜๋Ÿผ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ž„์˜๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์œผ๋กœ, ํ•จ์ˆ˜ ๊ธฐ๋Šฅ๊ณผ ๊ด€๋ จ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ๋‚˜์ค‘์— ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›€
  • ๋งค๊ฐœ๋ณ€์ˆ˜: ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ๊ด„ํ˜ธ ์•ˆ์˜ ๋ณ€์ˆ˜๋กœ, ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•„์š” ์—†๋Š” ํ•จ์ˆ˜๋„ ์กด์žฌํ•จ
  • return ์˜ˆ์•ฝ์–ด์™€ ๋ฐ˜ํ™˜ํ˜•: ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„ ๋ฐ˜ํ™˜ํ•  ๊ฐ’, ํ•จ์ˆ˜ ๋ฐ˜ํ™˜ํ˜•์— void๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ๋น„์–ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋กœ '๋ฐ˜ํ™˜ํ•  ๊ฐ’์ด ์—†๋‹ค'๋Š” ๋œป์˜ ์˜ˆ์•ฝ์–ด์ž„

ํ•จ์ˆ˜ ๊ตฌํ˜„ํ•˜๊ณ  ํ˜ธ์ถœํ•˜๊ธฐ

package classpart;

public class FunctionTest {
	public static void main(String[] args) {
		int num1 = 10;
		int num2 = 20;
		
		int sum = add(num1, num2);
		System.out.println(num1 + "+" + num2 + "=" + sum + "์ž…๋‹ˆ๋‹ค");
	}
	// add() ํ•จ์ˆ˜
	public static int add(int n1, int n2) {
		int result = n1 + n2;
		return result;
	}
}

ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ

ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๊ทธ ํ•จ์ˆ˜๋งŒ์„ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ํ• ๋‹น๋จ

์ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์Šคํƒ(stack)์ด๋ผ๊ณ  ๋ถ€๋ฆ„

  • ํ”„๋กœ๊ทธ๋žจ์—์„œ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์— ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์ˆœ์„œ๋Œ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋งŒ๋“ค์–ด์ง€๊ณ  ๋งจ ๋งˆ์ง€๋ง‰์— ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๋ถ€ํ„ฐ ๋ฐ˜ํ™˜๋จ
  • ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„๋„ ๋งจ ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€๋œ ๊ฒƒ๋ถ€ํ„ฐ ์Šคํƒ์—์„œ ์‚ฌ๋ผ์ง
  • ์ฆ‰, A() → B() → C() ํ•จ์ˆ˜์˜ ์ˆœ์„œ๋กœ ํ˜ธ์ถœํ–ˆ๋‹ค๋ฉด C() → B() → A() ์ˆœ์„œ๋กœ ๋ฐ˜ํ™˜๋˜๊ณ  ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ๋„ ์ด ์ˆœ์„œ๋Œ€๋กœ ์†Œ๋ฉธ๋จ

ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ์˜ˆ์‹œ

  • main() ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” num1, num2 ๋ณ€์ˆ˜์™€ add() ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” n1, n2 ๋ณ€์ˆ˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ด๋ฆ„์ด ๊ฐ™๋“  ๋‹ค๋ฅด๋“  ์ƒ๊ด€ ์—†์Œ
  • ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜ = ์ง€์—ญ ๋ณ€์ˆ˜, ์ง€์—ญ ๋ณ€์ˆ˜๋Š” ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋จ

ํ•จ์ˆ˜์˜ ์žฅ์ 

  1. ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๋Šฅ์„ ๋‚˜๋ˆ„์–ด ์ฝ”๋“œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
  2. ๊ธฐ๋Šฅ๋ณ„๋กœ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด ๋†“์œผ๋ฉด ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๋งค๋ฒˆ ์ฝ”๋“œ๋กœ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๋จ
  3. ์ค‘๋ณต ์ฝ”๋“œ ๋ฐฉ์ง€
  4. ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๋•Œ ์ƒ๊ธด ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋””๋ฒ„๊น… ์ž‘์—… ํŽธ์˜ → ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์ด ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋‚œ ๊ธฐ๋Šฅ๋งŒ ์ฐพ์•„์„œ ์ˆ˜์ •ํ•˜๋ฉด ๋จ

ํด๋ž˜์Šค ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฉ”์„œ๋“œ

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

package classpart;

public class Student {
	int studentID; // ํ•™๋ฒˆ
	String studentName; // ํ•™์ƒ ์ด๋ฆ„
	int grade; // ํ•™๋…„
	String address; // ์‚ฌ๋Š” ๊ณณ 
	
	// ํ•™์ƒ์˜ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ 
	public String getStudentName() {
		return studentName;
	}
}
  • ๋ฉ”์„œ๋“œ ์ด๋ฆ„์€ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ์˜ ์ž…์žฅ์—์„œ ์ง“๋Š” ๊ฒƒ์ด ์ข‹์Œ

์ž๋ฐ”์˜ ์ด๋ฆ„ ์ง“๊ธฐ ๊ทœ์•ฝ

  • ํด๋ž˜์Šค ์ด๋ฆ„์€ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘
  • ํ•˜๋‚˜์˜ ์ž๋ฐ” ํŒŒ์ผ์— ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, public ํด๋ž˜์Šค๋Š” ๋‹จ ํ•˜๋‚˜์ด๊ณ  public ํด๋ž˜์Šค ์ด๋ฆ„ = ์ž๋ฐ” ํŒŒ์ผ ์ด๋ฆ„
  • ํŒจํ‚ค์ง€ ์ด๋ฆ„์€ ๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ๋งŒ๋“ฆ
  • ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์€ ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ, ์ด๋ฆ„์ด ๊ธธ์–ด์ง€๋Š” ๊ฒฝ์šฐ์—๋Š” ์ค‘๊ฐ„์— ์ƒˆ ๋‹จ์–ด๋กœ ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ๋Œ€๋ฌธ์ž๋ฅผ ์จ์คŒ = ๋‚™ํƒ€(camel) ํ‘œ๊ธฐ๋ฒ•

ํด๋ž˜์Šค์™€ ์ธ์Šคํ„ด์Šค

main() ํ•จ์ˆ˜๋Š” ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ (JVM)์ด ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜๋กœ, ํด๋ž˜์Šค ๋‚ด๋ถ€์— ๋งŒ๋“ค์ง€๋งŒ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋Š” ์•„๋‹˜

main() ํ•จ์ˆ˜์—์„œ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ๋งŒ๋“  ํด๋ž˜์Šค ๋‚ด๋ถ€์— main() ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ
package classpart;

public class Student {
	int studentID; // ํ•™๋ฒˆ
	String studentName; // ํ•™์ƒ ์ด๋ฆ„
	int grade; // ํ•™๋…„
	String address; // ์‚ฌ๋Š” ๊ณณ 
	
	// ํ•™์ƒ์˜ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ 
	public String getStudentName() {
		return studentName;
	}
	
	public static void main(String[] args) {
		Student studentHong = new Student(); // Student ํด๋ž˜์Šค ์ƒ์„ฑ
		studentHong.studentName = "ํ™๊ธธ๋™";
		
		System.out.println(studentHong.studentName);
		System.out.println(studentHong.getStudentName());
		
	}
}
  • ์™ธ๋ถ€์— ํ…Œ์ŠคํŠธ์šฉ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
    - ์•„๋ž˜ ์ฝ”๋“œ์—์„œ ํ˜„์žฌ ๋‘ ํด๋ž˜์Šค๊ฐ€ ๊ฐ™์€ ํŒจํ‚ค์ง€์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒจํ‚ค์ง€ ์ด๋ฆ„์ด classpart๋กœ ๋™์ผํ•จ
    - ํŒจํ‚ค์ง€๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ import๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•จ
package classpart;

public class StudentTest {
	public static void main(String[] args) {
		Student studentHong = new Student(); // Student ํด๋ž˜์Šค ์ƒ์„ฑ
		studentHong.studentName = "ํ™๊ธธ๋™";
		
		System.out.println(studentHong.studentName);
		System.out.println(studentHong.getStudentName());
	}
}

new ์˜ˆ์•ฝ์–ด๋กœ ํด๋ž˜์Šค ์ƒ์„ฑํ•˜๊ธฐ

ํด๋ž˜์Šคํ˜• ๋ณ€์ˆ˜์ด๋ฆ„ = new ์ƒ์„ฑ์ž;
  • ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” new ์˜ˆ์•ฝ์–ด ์‚ฌ์šฉํ•ด ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ด ๋Œ€์ž…ํ•˜๋ฉด ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋จ
  • ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค๋Š” ๊ฒƒ์€ ํด๋ž˜์Šค๋ฅผ ์‹ค์ œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„(ํž™ ๋ฉ”๋ชจ๋ฆฌ)์„ ํ• ๋‹น ๋ฐ›๋Š”๋‹ค๋Š” ๋œป
  • ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ƒ์„ฑ๋œ ํด๋ž˜์Šค = ์ธ์Šคํ„ด์Šค
  • ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํด๋ž˜์Šคํ˜• ๋ณ€์ˆ˜ = ์ฐธ์กฐ ๋ณ€์ˆ˜

์ธ์Šคํ„ด์Šค์™€ ์ฐธ์กฐ ๋ณ€์ˆ˜

๊ฐ์ฒด: '์˜์‚ฌ๋‚˜ ํ–‰์œ„๊ฐ€ ๋ฏธ์น˜๋Š” ๋Œ€์ƒ'

ํด๋ž˜์Šค: ๊ฐ์ฒด๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ

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

๊ฐ์ฒด, ํด๋ž˜์Šค, ์ธ์Šคํ„ด์Šค

  • ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์ด์ง€๋งŒ, ์ด ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ๊ฐ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ ๊ฐ€๋Šฅ
package classpart;

public class StudentTest {
	public static void main(String[] args) {
		Student student1 = new Student(); // ์ฒซ ๋ฒˆ์งธ ํ•™์ƒ ์ƒ์„ฑ
		student1.studentName = "ํ™๊ธธ๋™";
		System.out.println(student1.getStudentName());
		Student student2 = new Student(); //  ๋ฒˆ์งธ ํ•™์ƒ ์ƒ์„ฑ
		student2.studentName = "๊น€์ฒ ์ˆ˜";
		System.out.println(student2.getStudentName());
	}
}
  • ์ฐธ์กฐ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ธ์Šคํ„ด์Šค์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ ์ฐธ์กฐํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ → ๋„ํŠธ(.) ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ
์ฐธ์กฐ๋ณ€์ˆ˜.๋ฉค๋ฒ„๋ณ€์ˆ˜
์ฐธ์กฐ๋ณ€์ˆ˜.๋ฉ”์„œ๋“œ

์ธ์Šคํ„ด์Šค์™€ ํž™ ๋ฉ”๋ชจ๋ฆฌ

ํž™ ๋ฉ”๋ชจ๋ฆฌ(heap memory): ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ๊ฐ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์œผ๋กœ, ํด๋ž˜์Šค ์ƒ์„ฑ์ž๋ฅผ ํ•˜๋‚˜ ํ˜ธ์ถœํ•˜๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋จ

ํž™(heap): ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋™์  ๋ฉ”๋ชจ๋ฆฌ(dynamic memory) ๊ณต๊ฐ„์œผ๋กœ,
ํ”„๋กœ๊ทธ๋žจ์€ ์Šคํƒ, ํž™, ๋ฐ์ดํ„ฐ ์„ธ ์˜์—ญ์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ฐ„์ด ํž™์ž„
- ํž™์€ ๋™์ ์œผ๋กœ ํ• ๋‹น๋˜๋ฉฐ ์‚ฌ์šฉ์ด ๋๋‚˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œํ•ด ์ฃผ์–ด์•ผ ํ•จ
- C/C++ ์–ธ์–ด๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ด์•ผ ํ•˜์ง€๋งŒ, ์ž๋ฐ”๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œํ•ด์คŒ
  • ์ธ์Šคํ„ด์Šค๊ฐ€ ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ด
Studnet studentHong = new Student();

  • ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ์ธ์Šคํ„ด์Šค๋Š” ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•จ
  • ์ฐธ์กฐ ๋ณ€์ˆ˜๋Š” ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ด. ์ฆ‰ ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜์— ์ €์žฅ๋จ
    ๋”ฐ๋ผ์„œ, ์ถœ๋ ฅ ๋‚ด์šฉ ํ™•์ธํ•ด๋ณด๋ฉด 'ํด๋ž˜์Šค์ด๋ฆ„@์ฃผ์†Œ๊ฐ’'์ด ๋‚˜์˜ด
package classpart;

public class StudentTest {
	public static void main(String[] args) {
		Student student1 = new Student(); // ์ฒซ ๋ฒˆ์งธ ํ•™์ƒ ์ƒ์„ฑ
		student1.studentName = "ํ™๊ธธ๋™";
		System.out.println(student1.getStudentName());
		Student student2 = new Student(); //  ๋ฒˆ์งธ ํ•™์ƒ ์ƒ์„ฑ
		student2.studentName = "๊น€์ฒ ์ˆ˜";
		System.out.println(student2.getStudentName());
		
		System.out.println(student1); // classpart.Student@50040f0c
		System.out.println(student2); // classpart.Student@2dda6444
	}
}

์ƒ์„ฑ์ž(constructor)

์ƒ์„ฑ์ž๋Š” ํด๋ž˜์Šค๋ฅผ ์ฒ˜์Œ ๋งŒ๋“ค ๋•Œ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ

  • ๋””ํดํŠธ ์ƒ์„ฑ์ž: ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ์ƒ์„ฑ์ž๋กœ, ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๊ณ  ๊ตฌํ˜„ ์ฝ”๋“œ๋„ ์—†์Œ
package constructor;

public class Person {
	String name;
	float height;
	float weight;
	
	public Person() {} // ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋””ํดํŠธ ์ƒ์„ฑ์ž 
}

์ƒ์„ฑ์ž ๋งŒ๋“ค๊ธฐ

ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ์ƒ์„ฑ์ž๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ. ์ฃผ๋กœ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๊ฐ’๋“ค์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์„œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ๋  ๋•Œ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ๊ฐ’๋“ค์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์—ญํ• ์„ ํ•จ

์ฆ‰, ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋จ๊ณผ ๋™์‹œ์— ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ง€์ •ํ•˜๊ณ  ์ธ์Šคํ„ด์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ์ž๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์„œ ์‚ฌ์šฉํ•จ

  • ์ƒ์„ฑ์ž๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋ฉด ๋””ํดํŠธ ์ƒ์„ฑ์ž๊ฐ€ ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ์ƒ์„ฑ์ž๋กœ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋””ํดํŠธ ์ƒ์„ฑ์ž๋ฅผ ์ถ”๊ฐ€๋กœ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ
package constructor;

public class Person {
	String name;
	float height;
	float weight;
	
	public Person() {} // ๋””ํดํŠธ ์ƒ์„ฑ์ž ์ง์ ‘ ์ถ”
	
	// ์‚ฌ๋žŒ ์ด๋ฆ„์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ž…๋ ฅ๋ฐ›์•„์„œ Person ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ƒ์„ฑ์ž 
	public Person(String pname) {
		name = pname;
	}
}
package constructor;

public class PersonTest {

	public static void main(String[] args) {
		Person personLee = new Person();
		Person personKim = new Person("๊น€์ฒ ์ˆ˜"); 
	}
}

์ƒ์„ฑ์ž ์˜ค๋ฒ„๋กœ๋“œ

์ƒ์„ฑ์ž ์˜ค๋ฒ„๋กœ๋“œ(constructor overload): ํด๋ž˜์Šค์— ์ƒ์„ฑ์ž๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ ์ œ๊ณต๋˜๋Š” ๊ฒฝ์šฐ

  • ํ•„์š”์— ๋”ฐ๋ผ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ์ƒ์„ฑ์ž๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ
  • ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ƒ์„ฑ์ž๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ, ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์— ํ•„์š”ํ•œ ์ƒ์„ฑ์ž๋ฅผ ๊ณจ๋ผ์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

์ฐธ์กฐ ์ž๋ฃŒํ˜•

์ฐธ์กฐ ์ž๋ฃŒํ˜•: ํด๋ž˜์Šค ์ž๋ฃŒํ˜•์œผ๋กœ ์„ ์–ธํ•˜๋Š” ๋ณ€์ˆ˜

  • JDK์—์„œ ์ œ๊ณตํ•˜๋Š” ์ฐธ์กฐ ์ž๋ฃŒํ˜•(ex: String)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ•„์š”์— ์˜ํ•ด ๋งŒ๋“  ํด๋ž˜์Šค ์ž๋ฃŒํ˜•
package reference;

public class Student2 {
	int studentID;
	String studentName;
	int koreaScore;
	int mathScore;
	String koreaSubject;
	String mathSubject;
}

 

์œ„ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ๊ณผ๋ชฉ์— ๋Œ€ํ•œ ๋ณ€์ˆ˜๊ฐ€ ๊ณ„์† ๋Š˜์–ด๋‚˜๊ฒŒ ๋จ. ์ด๋ฅผ ๊ณผ๋ชฉ์˜ ์ด๋ฆ„๊ณผ ์„ฑ์ ์„ Subject ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ํ•™์ƒ ํด๋ž˜์Šค์— Subject ๋ณ€์ˆ˜๋ฅผ ๊ฐ ๊ณผ๋ชฉ๋ณ„๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ

package reference;

// ๊ณผ๋ชฉ ํด๋ž˜์Šค 
public class Subject {
	String subjectName;
	int scorePoint;
}
package reference;

public class Student2 {
	int studentID;
	String studentName;
	Subject korean;
	Subject math;
}

 


์ •๋ณด ์€๋‹‰

์ ‘๊ทผ ์ œ์–ด์ž: ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์˜ˆ์•ฝ์–ด๋ฅผ ์‚ฌ์šฉํ•ด ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ, ์ƒ์„ฑ์ž์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ ์ง€์ • ๊ฐ€๋Šฅ

์ ‘๊ทผ ์ œ์–ด์ž ์„ค๋ช…
public ์™ธ๋ถ€ ํด๋ž˜์Šค ์–ด๋””์—์„œ๋‚˜ ์ ‘๊ทผ ๊ฐ€๋Šฅ
protected ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋‚ด๋ถ€์™€ ์ƒ์† ๊ด€๊ณ„์˜ ํด๋ž˜์Šค์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ๊ฒฝ์šฐ(=default) ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
private ๊ฐ™์€ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

 

  • private์œผ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋ฅผ ์™ธ๋ถ€ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” public ๋ฉ”์„œ๋“œ ์ œ๊ณตํ•ด์•ผ ํ•จ → get(), set() ๋ฉ”์„œ๋“œ
    ์ฆ‰, ์™ธ๋ถ€ ํด๋ž˜์Šค์—์„œ private ๋ณ€์ˆ˜์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ, public ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•˜๋ฉด private ๋ณ€์ˆ˜์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•จ
package hiding;

public class Student {
	int studentID;
	private String studentName;
	int grade;
	String address;
	
    // private ๋ณ€์ˆ˜์ธ studentName์— ์ ‘๊ทผํ•ด ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” public get() ๋ฉ”์„œ๋“œ
	public String getStudentName() {
		return studentName; 
	}
	
    // private ๋ณ€์ˆ˜์ธ studentName์— ์ ‘๊ทผํ•ด ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” public set() ๋ฉ”์„œ๋“œ 
	public void getStudentName(String studentName) {
		this.studentName = studentName; 
	}
}

 

์ •๋ณด ์€๋‹‰(information hiding): ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ๋Š” private์œผ๋กœ ์„ ์–ธํ•ด ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ

  • ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ public์œผ๋กœ ์„ ์–ธํ•˜๋ฉด ์ ‘๊ทผ์ด ์ œํ•œ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ •๋ณด์˜ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋„ค๋Š” private์œผ๋กœ ์„ ์–ธํ•ด ์˜ค๋ฅ˜๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ์Œ