/*========================================
■■■ 클래스와 인스턴스 ■■■
- 직사각형 클래스 설계 연습
=========================================*/
/*
직사각형의 넓이와 둘레를 계산하는 객체 → 클래스로 표현
클래스의 정체성 → 직사각형의 설계도
클래스의 속성 → 가로, 세로 (, 넓이, 둘레, 부피, 무게, 재질, 색상, 질량, ....)
클래스의 기능 → 넓이 계산, 둘레 계산, 가로 세로 입력, 결과 출력
객체를 구성 → 속성(상태, 데이터) + 기능(동작, 행위)
↓ ↓ + ↓
클래스를 설계 → 변수 + 메소드
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
계속하려면 아무 키나 누르십시오 . . .
*/