본문 바로가기
JAVA

Test072.java / 클래스와 인스턴스 / 직사각형 클래스 설계 실습

by universedevelope 2022. 9. 9.
/*===================================
   ■■■ 클래스와 인스턴스 ■■■
===================================*/

// 직사각형 클래스 설계 실습

/*
직사각형의 넓이와 둘레 계산	→ 클래스 표현


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


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

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

	// 기능(동작, 행위)    →  메소드( 순서 의미 없음 )

	가로세로 입력()
	{
	}

	둘레 계산()
	{
	}

	넓이 계산()
	{
	}

	결과 출력()
	{
	}
}
*/


// ※ 하나의 자바 파일(.java)에 여러개의 클래스(class)를 설계할 수 있나 ?????  있다.

//    하지만, 『public class』 는 하나만 올 수 있다.
//	  public class 의 name 을 따라 파일이름으로 선정하고 저장한다.
//	  일반적으로는 하나의 파일에 하나의 클래스를 설계한다.
//	  또한, 여러 개의 클래스가 설계된 파일을 컴파일하게 되면
//    내부에 설계된 클래스의 수 만큼 클래스 파일(.class)이 파생된다.


import java.util.Scanner;	// import 구문의 위치는 여러 개의 클래스가 생성될 때 다 포함
							// 시키는 위치에 쓰여야 하기때문에
							// 이 문제에서는 class Rect 위에 적어주어야 함(밑에 
							// public class 있음)

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

	// 기능(동작, 행위)    →  메소드( 순서 의미 없음 )


		void input()					//메소드 1 가로세로 입력()
		// 반환 값이 없기때문에 void 를 붙여준다
		{
			Scanner sc = new Scanner(System.in);	// Rect ob = new Rect();
													// Rect 클래스의 ob를 새로운 객체로선언
													// ↓ intput 메소드 호출하면
			System.out.print("가로 입력 : ");		// ob.input() → Scanner 가 올라옴
			w = sc.nextInt();			

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

		int calLength()							//메소드 2.둘레 계산()→ (가로+세로)*2
		{

			int d;	// 둘레값을 담을 변수 선언
	
			d = (w+h)*2;		// 둘레값 초기화(연산)

			return d;	// 둘레값을 반환한다.(calLengh는 호출되면 둘레계산하고 값을 넘겨주는
			            // 기계이다.)

				//	return (w+h) * 2;  → 가능하나, 메소드의 내용이 길어지면 불가능
		}

		int calArea()								//메소드 3.넓이 계산()→가로*세로
		{
			int s;		// 넓이 값을 담을 변수 선언

			s = w*h;	// 넓이값 초기화(연산)	

			return s;	// 넓이값을 반환한다.(calArea는 호출되면 둘레계산하고 값을 넘겨주는
						// 기계이다.)
		}

		void print(int a, int l)			//메소드 4. 전체 결과 출력()
		{
			// 가로 : 10
			// 세로 : 20
			// 넓이 : xxx
			// 둘레 : xxx
			System.out.println("가로 : " + w);
			System.out.println("세로 : " + h);
			System.out.println("넓이 : " + a);
			System.out.println("둘레 : " + l);

		}
	

}





// ** 클래스와 인스턴스 교육 직방이해

// 새로운 클래스 생성

// 변수선언과 메소드 생성

// 메소드를 반환해야할 값인지 ( or 출력만을 할건지 고려)
// 메소드의 성질을 정하고
// 메소드를 만들어가면서 클래스를 설계한다.

// 이후 메인클래스에서 불러올때는
// 해당 메소드들을 새롭게 선언해주고,
// 결과출력 기능을하는 메소드를 정의하고 그 값을 대입해서
// 최종연산이 가능케 해준다.











public class Test072
{
	public static void main(String[] args)
	{
		// Rect 클래스 기반의 인스턴스 생성
			Rect ob =  new Rect();

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

		// 넓이 연산 메소드 호출 및 변수초기화
			int area = ob.calArea();

		// 둘레 연산 메소드 호출
			int length = ob.calLength();

		// 출력메소드 호출
		ob.print(area, length);


	}
}

// 실행 결과

/*
가로 입력 : 1020
세로 입력 : 1
가로 : 1020
세로 : 1
넓이 : 1020
둘레 : 2042
계속하려면 아무 키나 누르십시오 . . .
*/
728x90

댓글