본문 바로가기

Study/Java

Java 클래스_클래스기초Ⅰ

0. 클래스란?

    학교에 홍길동, 김철수 등 많은 학생들이 있다.

    이때, 공통으로 묶을 수 있는 것은 학생이고, 이것을 클래스라고 함

 

    -> 한마디로 일반화된 속성과 메소드로 객체를 기술한 것을 클래스라고 함


1. 클래스의 기본 구성


 

2. 포함멤버

 


3. 객체 (Object)


4. 클래스와 객체

 


5. 클래스 사용법


6. 생성자

 


7. this, this 메소드


8. 객체의 사용

 


9. 방 관리 프로그램 작성하기

package ch06;

import java.io.IOException;
import java.util.Scanner;

class Room {
	boolean room[];	
	Scanner sc;
	int roomsu;
	Room() throws IOException {
		sc = new Scanner(System.in);
		System.out.print("방의 갯수를 입력 : ");
		roomsu = sc.nextInt();
		room = new boolean[roomsu];
		start();
	}
	public void start() throws IOException{
		while(true) {
			System.out.print("1. 입실 2. 퇴실 3. 방보기 4.종료");
			int select = System.in.read() - 48; // 아스키코드 값으로 들어오기 때문에 -48해줘야 한다. 
			sc.nextLine(); // 엔터키가 들어올 때 까지 입력을 받겠다.
			switch (select) {
			case 1 :
				input(); break;
			case 2 :
				output(); break;
			case 3 :
				view(); break;
			case 4 :
				exit(); break;
			default : 
				System.out.println("잘못입력하셨습니다!");
			}
		}
	}
	Room(int roomsu){
		room = new boolean[roomsu]; //roomsu만큼 받겠다. 참일때는 사람이 있고 거짓일때는 사람이 없다.
		// 배열을 맨 처음 선언해주면 boolean의 초기값을 false로 만들어진다.
		sc = new Scanner(System.in);
		this.roomsu = roomsu;
	}
	public void input() {
		int roomNumber;
		do {
			System.out.print("입실하실 방의 번호 : ");
			roomNumber = sc.nextInt();
		} while(roomNumber < 1 || roomNumber > roomsu);
		// if (roomNumber < 1 || roomNumber > roomsu) input(); // input을 다시 실행 
		if (room[roomNumber-1]) { // roomNumber-1호실이 참이다 -> 사람이 있다. 
			System.out.println(roomNumber + "호실은 사용중입니다.");
		}else {
			System.out.println(roomNumber + "호실에 입실하셨습니다.");
			room[roomNumber-1] = true; // 입실하는 순간 true로 바꿔준다.
		}
	}
	public void output() {
		int roomNumber;
		do {
			System.out.print("퇴실하실 방의 번호 : ");
			roomNumber = sc.nextInt();
		} while(roomNumber < 1 || roomNumber > roomsu);
		// if (roomNumber < 1 || roomNumber > roomsu) input(); // input을 다시 실행 
		if (!room[roomNumber-1]) { // roomNumber-1호실이 참이다 -> 사람이 있다. 
			System.out.println(roomNumber + "호실은 빈 방입니다.");
		}else {
			System.out.println(roomNumber + "호실에 퇴실하셨습니다.");
			room[roomNumber-1] = false; // 입실하는 순간 true로 바꿔준다.
		}
		
	}
	public void view() {
		for (int i = 0; i < roomsu; ++i) {
			if (room[i]) {
				// 만약 방에 사람이 있을 때
				System.out.println(i+ 1 + "호실은 사용중입니다.");
			}
			else {
				System.out.println(i + 1 + "호실은 빈 방 입니다.");
			}
		}
	}
	public void exit() {
		System.out.print("프로그램을 종료합니다.");
		System.exit(0); // 프로그램을 영구히 종료합니다.
	}
}
public class Exam_01 {
	public static void main (String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		Room room = new Room(); // 객체를 생성해준다. 
	}
}

[출력]

 


10. 클래스 배열


11. 문제 풀어보기

package ch06;

import java.util.Scanner;

class SungJuk{
	String name;
	int kor, eng, mat;
	int tot, rank;
	public void sumTot() {
		tot = kor + eng + mat;
	}
	public void disp() {
		System.out.print(name + "\t");
		System.out.print(kor + "\t");
		System.out.print(eng + "\t");
		System.out.print(mat + "\t");
		System.out.print(tot + "\t");
		System.out.println(rank + "\t");
	}
}
public class Exam_02 {
	public static void main(String[] args) {
		System.out.print("인원수를 입력 : ");
		Scanner sc = new Scanner(System.in);
		int inwon = sc.nextInt();
		
		SungJuk sj[] = new SungJuk[inwon];
		// 참조 변수의 갯수만 들어간 상태 
		for (int i = 0; i < inwon; ++i) {
			sj[i] = new SungJuk();
			// 생성자를 생성해 주어야지만 실제로 데이터가 만들어지고
			// 메모리상에 저장할 수 있는 공간이 생겨 값이 들어갈 수 있다.  
			System.out.print("이름 입력 : ");
			sj[i].name = sc.next();
			System.out.print("국어점수 입력 : ");
			sj[i].kor = sc.nextInt();
			System.out.print("영어점수 입력 : ");
			sj[i].eng = sc.nextInt();
			System.out.print("수학점수 입력 : ");
			sj[i].mat = sc.nextInt();
			sj[i].sumTot();
			sj[i].rank = 1;
		}
		for (int i = 0; i < inwon; ++i) {
			for (int j = 0; j < inwon; ++j) {
				if(sj[i].tot < sj[j].tot) sj[i].rank++;
			}
		}
		System.out.print("이름\t국어\t영어\t수학\t총점\t순위\n");
		for (int i = 0; i < inwon; ++i) {
			sj[i].disp();
		}
	}
}

[출력]