PL(Programming Language)/Java

[Java] ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ๊ฐœ๋…, ํŠน์ง•, ํด๋ž˜์Šค, ๊ฐ์ฒด

ํƒฑ์ ค 2021. 10. 13. 18:15

๊ฐ์ฒด์ง€ํ–ฅ์–ธ์–ด(Object-Oriented Programming = OOP)

  • ์ปดํ“จํ„ฐํ”„๋กœ๊ทธ๋žจ์„ ๋ช…๋ น์–ด์˜ ๋ชฉ๋ก์œผ๋กœ ๋ณด๋Š” ์‹œ๊ฐ์—์„œ ๋ฒ—์–ด๋‚˜ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…๋ฆฝ๋œ ๋‹จ์œ„, ์ฆ‰ "๊ฐ์ฒด"๋“ค์˜ ๋ชจ์ž„์œผ๋กœ ํŒŒ์•…ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ.
  • ๊ฐ๊ฐ์˜ ๊ฐœ์ฒด๋Š” message passing์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค

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

 

ํด๋ž˜์Šค

  • ๊ฐ์ฒด์˜ ์„ค๊ณ„๋„ ํ˜น์€ ํ‹€
  • ๊ฐ์ฒด๋“ค์˜ ์ค‘์š”ํ•œ ์†์„ฑ์„ ๊ณต์œ ํ•˜๋Š” ๊ฐ์ฒด๋“ค์˜ ๋ชจ์ž„
  • ๊ฐœ๋…์ 

๊ฐ์ฒด(Object)

  • ํด๋ž˜์Šค์˜ ํ‹€๋กœ ์ฐ์–ด๋‚ธ ์‹ค์ฒด → ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ์ƒ์„ฑ๋˜๋Š” ์‹ค์ฒด, ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ฐ–๋Š” ๊ตฌ์ฒด์  ์‹ค์ฒด
  • = instance (์ธ์Šคํ„ด์Šค)
  • ์ฃผ๋ณ€์— ๋ณด์ด๋Š” ์‚ฌ๋ฌผ, ์ƒ๋ช…
  • ๊ตฌ์ฒด์ 

โ–ถ class๋Š” ์„ค๊ณ„๋„, instance๋Š” ์‹ค์ œ๋กœ ๋‚ด๊ฐ€ ์“ฐ๋Š” ๊ฒƒ

โ–ถ ๊ฐ์ฒด(์น˜์™€์™€, ์…ฐํผ๋“œ, ์ง„๋„) → ์†์„ฑ(๋ฉ๋ฉ, ๊ผฌ๋ฆฌ๋ฅผ ํ”๋“ฆ) → ํด๋ž˜์Šค(๊ฐœ)

โ–ถ ๊ฐ์ฒด๋“ค์€ ํด๋ž˜์Šค์— ์„ ์–ธ๋œ ๋™์ผํ•œ ์†์„ฑ์„ ๊ฐ€์ง€์ง€๋งŒ ์†์„ฑ ๊ฐ’์€ ์„œ๋กœ ๋‹ค๋ฅด๋‹ค ! 


๊ฐ์ฒด ์ง€ํ–ฅ ํŠน์„ฑ

 

1) ์บก์Šํ™”

  • ์™ธ๋ถ€์˜ ์ ‘๊ทผ์œผ๋กœ๋ถ€ํ„ฐ ๊ฐ์ฒด ๋ณดํ˜ธ → ์บก์Šํ™” ํ†ตํ•ด ์ •๋ณด ์€๋‹‰ ๊ฐ€๋Šฅ
  • ํด๋ž˜์Šค(class): ๊ฐ์ฒด ๋ชจ์–‘์„ ์„ ์–ธํ•œ ํ‹€ (์บก์Šํ™” ํ•˜๋Š” ํ‹€)
  • ๊ฐ์ฒด: ์ƒ์„ฑ๋œ ์‹ค์ฒด(instance), ํด๋ž˜์Šค ๋‚ด์— ๋ฉ”์†Œ๋“œ์™€ ํ•„๋“œ ๊ตฌํ˜„

 

2) ์ƒ์†

  • ์ƒ์œ„ ๊ฐœ์ฒด์˜ ์†์„ฑ์ด ํ•˜์œ„ ๊ฐœ์ฒด์— ๋ฌผ๋ ค์ง = ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ๋ฌผ๋ ค๋ฐ›์Œ
    • ์ƒ์œ„ํด๋ž˜์Šค: ์ˆ˜ํผ ํด๋ž˜์Šค
    • ํ•˜์œ„ํด๋ž˜์Šค: ์„œ๋ธŒ ํด๋ž˜์Šค, ์ˆ˜ํผ ํด๋ž˜์Šค ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ, ์ƒˆ๋กœ์šด ํŠน์„ฑ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ
  • ํ”„๋กœ๊ทธ๋žจ์„ ์‰ฝ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ˆ˜๋‹จ

 

3) ๋‹คํ˜•์„ฑ

  • ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ํด๋ž˜์Šค ํ˜น์€ ๊ฐ์ฒด์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„๋˜๋Š” ๊ฒƒ = ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์— ๊ฐ™์€ ์ด๋ฆ„์˜ ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ ๋™์ž‘์€ ๋‹ค๋ฅด๊ฒŒ ์ˆ˜ํ–‰
  • ์‚ฌ๋ก€
    • ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ: ํ•œ ํด๋ž˜์Šค ๋‚ด์—์„œ ๊ฐ™์€ ์ด๋ฆ„์ด์ง€๋งŒ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฉ”์†Œ๋“œ
    • ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ: ์Šˆํผ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ์„œ๋ธŒ ํด๋ž˜์Šค๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„

์ ˆ์ฐจ์ง€ํ–ฅ vs ๊ฐ์ฒด์ง€ํ–ฅ

 

์ ˆ์ฐจ์ง€ํ–ฅ

  • ์ž‘์—… ์ˆœ์„œ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ปดํ“จํ„ฐ ๋ช…๋ น ์ง‘ํ•ฉ
  • ํ•จ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ

๊ฐ์ฒด์ง€ํ–ฅ

  • ์ปดํ“จํ„ฐ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์„ ๊ฐ์ฒด๋“ค๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์œผ๋กœ ํ‘œํ˜„
  • ํด๋ž˜์Šค or ๊ฐ์ฒด๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ

์ž๋ฐ” ํด๋ž˜์Šค์˜ ๊ตฌ์„ฑ

 

ํด๋ž˜์Šค

  • class ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ
  • ๋ฉค๋ฒ„: ํด๋ž˜์Šค ๊ตฌ์„ฑ ์š”์†Œ
    • ํ•„๋“œ (๋ฉค๋ฒ„ ๋ณ€์ˆ˜) & ๋ฉ”์†Œ๋“œ (๋ฉค๋ฒ„ ํ•จ์ˆ˜)

ํด๋ž˜์Šค์˜ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ํ™œ์šฉ ์˜ˆ์‹œ

public class Circle {
	
	int radius; // ์›์˜ ๋ฐ˜์ง€๋ฆ„ ํ•„๋“œ
	String name; // ์›์˜ ์ด๋ฆ„ ํ•„๋“œ
	
	public double getArea() {
    // ๋ฉค๋ฒ„ ๋ฉ”์†Œ๋“œ
    // ์†Œ์ˆ˜์  ๋ฆฌํ„ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— double๋กœ ์„ ์–ธ
		return 3.14 * radius * radius; 
	}
	
	public static void main(String[] args) {
		Circle pizza; // ๋ ˆํผ๋Ÿฐ์Šค ๋ณ€์ˆ˜ ์„ ์–ธ
		pizza = new Circle(); // circle ๊ฐ์ฒด ์„ ์–ธ
		// ๊ฐ์ฒด ๋ฉค๋ฒ„ ์ ‘๊ทผ์€ .์œผ๋กœ!
        pizza.radius = 10;
		pizza.name = "์ž๋ฐ”ํ”ผ์ž";
		double area = pizza.getArea();
		System.out.println(pizza.name + "์˜ ๋ฉด์ ์€ " + area);
		
		Circle donut = new Circle(); // ๋ ˆํผ๋Ÿฐ์Šค ๋ณ€์ˆ˜ ์„ ์–ธ & circle ๊ฐ์ฒด ์„ ์–ธ
		donut.radius = 2;
		donut.name = "์ž๋ฐ”๋„๋„›";
		area = donut.getArea();
		System.out.println(donut.name + "์˜ ๋ฉด์ ์€ " + area);
	}

}

๋„ˆ๋น„(width)์™€ ๋†’์ด(height) ํ•„๋“œ, ๊ทธ๋ฆฌ๊ณ  ๋ฉด์  ๊ฐ’์„ ์ œ๊ณตํ•˜๋Š” getArea() ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง„ Rectangle ํด๋ž˜์Šค ์ž‘์„ฑ ์˜ˆ์‹œ

import java.util.Scanner;

class Rectangle{
	int width;
	int height;
	public int getArea(){
		return width * height;
	}
}

public class RectApp {

	public static void main(String[] args) {
		Rectangle rect = new Rectangle();
		Scanner scanner = new Scanner(System.in);
		System.out.print(">> ");
		rect.width = scanner.nextInt();
		rect.height = scanner.nextInt();
		System.out.println("์‚ฌ๊ฐํ˜•์˜ ๋ฉด์ ์€ " + rect.getArea());
		scanner.close();
	}

}
728x90