Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Everything has an expiration date

070 - Java 클래스와 인스턴스 : 직사각형 클래스 설계 본문

[Java]/Program source (java)

070 - Java 클래스와 인스턴스 : 직사각형 클래스 설계

Jelly-fish 2023. 9. 4. 14:58
/*========================================
	■■■ 클래스와 인스턴스 ■■■
	- 직사각형 클래스 설계 연습
=========================================*/


/*
직사각형의 넓이와 둘레를 계산하는 객체 → 클래스로 표현

클래스의 정체성 → 직사각형의 설계도
클래스의 속성   → 가로, 세로 (, 넓이, 둘레, 부피, 무게, 재질, 색상, 질량, ....)
클래스의 기능   → 넓이 계산, 둘레 계산, 가로 세로 입력, 결과 출력


객체를 구성			→ 속성(상태, 데이터)	+ 기능(동작, 행위)
	↓							↓			+		↓
클래스를 설계		→         변수         +     메소드



class 직사각형
{
	// 속성(상태, 데이터)	→ 변수	(순서 의미 없음)
	가로, 세로

	// 기능(동작, 행위)		→ 메소드 (순서 의미 없음)
	가로 세로 입력()
	{
	}

	넓이 계산()
	{
	}

	둘레 계산()
	{
	}

	결과 출력()
	{
	}

}


*/

import java.util.Scanner;

class Rect					//-- 직사각형 클래스 설계
{
	// 속성(상태, 데이터)	→ 변수	(순서 의미 없음)
	int w, h;				//-- 가로, 세로

	// 기능(동작, 행위)		→ 메소드 (순서 의미 없음)
	void input()			//-- 가로, 세로 입력
	{
		// 반환하는 값이 없으므로 void
		Scanner sc = new Scanner(System.in);

		System.out.print("가로 입력 : ");
		w = sc.nextInt();

		System.out.print("세로 입력 : ");
		h = sc.nextInt();

	}

	int calLength()				//-- 둘레 계산	→ (가로 + 세로) * 2
	{
		return (w + h) * 2;
		// 메소드를 호출한 공간에 값을 두고온다.
		// 계산 결과 (w + h) * 2가 int 형이므로, 리턴 자료형 = int
		// w, h 전역변수로 이미 선언되어 있기 때문에, calLength 매개변수로 가로,세로 값을 받을 필요가 없다.

		
		/*
		int result;

		result = (w + h) * 2;

		return result
		*/
	}



	int calArea()					//-- 넓이 계산 → 가로 * 세로
	{
		// 주요 변수 선언
		int result;

		// 연산 및 처리	→	선언한 변수들에 값 담아내기 
		result = w * h;

		// 최종 결과 반환
		return result;

		// return w * h;
	}


	void print(int a, int b)					//-- 결과 출력 → 가로 : xx 세로 : yy 넓이 : kk 둘레 : jj
	{

		// 가로 : 10
		// 세로 : 20
		// 넓이 : xxx
		// 둘레 : xxx
		System.out.println("가로 : " + w);
		System.out.println("세로 : " + h);
		System.out.println("넓이 : " + a);
		System.out.println("둘레 : " + b);

		// 『넓이와 둘레 값을 print의 파라미터(매개변수)로 받아와야 하지 않을까...』
		// print 함수는 출력만 하므로, 넓이와 둘레를 계산하는 기능을 넣지 말아야 한다.
		// 넓이는 a로, 둘레는 b로 사용자가 함수를 호출할 때 값을 받아들이면 된다.
	}

}


// ※ 하나의 자바 파일(.java)에 여러 개의 클래스(class)를 설계할 수 있다.
//    하지만, 『public class』는 이 파일 내에서 하나만 올 수 있다.
//    파일을 저장할 때의 이름은
//    이 『public class』의 이름으로 지정해야 한다.
//    일반적으로는(실무적으로는) 하나의 파일에 하나의 클래스를 설계한다.
//    또한, 여러 개의 클래스가 설계된 하나의 파일을 컴파일 하게 되면
//    내부에 설계된 클래스의 수 만큼 클래스 파일(.class)이 파생된다.


// [소스 파일의 클래스 복수 선언과, 파일명]★☆★☆★☆★☆★☆★☆★☆★☆
// 한 개의 소스에 여러 개의 클래스 선언 가능하다!
// 하지만, public 키워드를 포함한 클래스는 반드시 하나만 선언해야 한다!
// 파일명은 public 키워드를 포함한 Test070.java로 저장하면 된다!
// ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

// [단, 컴파일 했을 때 ]======================================
// Test070.java		→ Test070.class
//					→ Rect.class
// 내부에서 설계된 클래스의 수 만큼 클래스 파일이 생성된다!
// ===========================================================

// ※ 『 import 문은 class가 처음 설계되는 문장보다 반드시 위에 있어야 한다. 』
// import ...Ttt;
// import ...Ppp;
// import ...Aaa;

// class Xxx
// {
//		Ttt;
// }

// class Yyy
// {
//		Ppp;
// }

// class Zzz
// {
//		Aaa;
// }

// 단, 같은 경로, 같은 패키지에 있으면 import 문을 별도로 쓰지 않아도 된다.
// 지금은 윗줄에 Rect 클래스를 선언해 놓은 것이 있기 때문에, import 하지 않아도 된다.


public class Test070
{
	public static void main(String[] args)
	{

		// Rect 클래스 기반의 인스턴스 생성
		Rect ob = new Rect();
		
		// new Rect
		//		+
		//		Rect();

		
		// 입력 메소드 호출
		ob.input();

		// 넓이 연산 메소드 호출
		int area = ob.calArea();
		

		// 둘레 연산 메소드 호출
		int length = ob.calLength();
		
		// 출력 메소드 호출
		ob.print(area , length);
	
	}
}


// 실행 결과 

/*
가로 입력 : 500
세로 입력 : 65
가로 : 500
세로 : 65
넓이 : 32500
둘레 : 1130
계속하려면 아무 키나 누르십시오 . . .
*/