1. 실행 클래스

public class Student_executionClass {
	public static void main(String[] args) {
		
		// 방법 1. 생성자를 이용. (객체데이터를 활용할 수 있어 코드도 간결하고 에러가 적다.)
		// 접근 3. 객체데이터에 배열을 이용할거다. 이렇게 하면 코드도 줄일 수 있고, 학생/중간/기말 따로 관리해서 생기는 오류를 방지할 수 있다. 
		Student s[] = new Student[10]; // 클래스 Student를 이름 s로 배열로 만들거다. Student를 10개를 만들어 메모리에 할당해라. 즉, 배열 하나로 묶어서 이곳에 0번부터 9번까지 10개의 Student 클래스 방을 오려다 붙인거다.
		s[0] = new Student("홍길동", 100, 100);	// s의 0번방 Student 클래스에는 "홍길동", 100, 100을 생성자로 넣어라.
		s[1] = new Student("둘리", 10, 10);		// s의 1번방 Student 클래스에는 "둘리", 10, 10을 생성자로 넣어라.
		s[2] = new Student("고길동", 74, 46);
		s[3] = new Student("짱구", 39, 85);
		s[4] = new Student("이순신", 41, 65);
		s[5] = new Student("장보고", 26, 100);
		s[6] = new Student("이성계", 93, 57);
		s[7] = new Student("희동이", 24, 41);
		s[8] = new Student("또치", 98, 95);
		s[9] = new Student("박혁거세", 32, 54);
		
		int totalMiddleScore = 0;
		int totalFinalScore = 0;
		int numberOfstudent = s.length;
		for (int i = 0; i < numberOfstudent; i++) {
			totalMiddleScore = totalMiddleScore + s[i].middleScore;
			totalFinalScore = totalFinalScore + s[i].finalScore;
		}
		
		double avgMiddleScore = (double)totalMiddleScore / numberOfstudent;
		double avgFinalSocre = (double)totalFinalScore / numberOfstudent;
		
		System.out.println("중간고사 총점은 " + totalMiddleScore);
		System.out.println("중간고사 평균은 " + avgMiddleScore);
		System.out.println("기말고사 총점은 " + totalFinalScore);
		System.out.println("기말고사 평균은 " + avgFinalSocre);
		
		
//		// 접근 2. 객체데이터로 10개만 만들어 넘기면 된다.
//		Student s0 = new Student("홍길동", 100, 100);
//		Student s1 = new Student("둘리", 10, 10);
//		
//		// 접근 1. 모든 데이터를 하나하나 넘기는 방법.
//		이거를 10번 반복해야 하는데 위에 방법처럼 객체데이터로 만들어 생성자에 전달할거다.
//		Student s0 = new Student();
//		s0.name = "홍길동";
//		s0.middleScore = 100;
//		s0.finalScore = 100;
		
		
		
		
//		// 방법 2. setter, getter 이용하는 경우. 국내 자바업계는 이렇게 쓴다는데 코드가 너무 길어진다.
//		Student[] s = new Student[10];
//		
//		s[0] = new Student();
//		s[0].setName("홍길동");
//		s[0].setMiddleScore(100);
//		s[0].setFinalScore(100);
//		s[1] = new Student();
//		s[1].setName("둘");
//		s[1].setMiddleScore(10);
//		s[1].setFinalScore(10);
//		s[2] = new Student();
//		s[2].setName("고길동");
//		s[2].setMiddleScore(74);
//		s[2].setFinalScore(46);
//		s[3] = new Student();
//		s[3].setName("짱구");
//		s[3].setMiddleScore(39);
//		s[3].setFinalScore(85);
//		s[4] = new Student();
//		s[4].setName("이순신");
//		s[4].setMiddleScore(41);
//		s[4].setFinalScore(65);
//		s[5] = new Student();
//		s[5].setName("장보고");
//		s[5].setMiddleScore(26);
//		s[5].setFinalScore(100);
//		s[6] = new Student();
//		s[6].setName("이성계");
//		s[6].setMiddleScore(93);
//		s[6].setFinalScore(57);
//		s[7] = new Student();
//		s[7].setName("희동이");
//		s[7].setMiddleScore(24);
//		s[7].setFinalScore(41);
//		s[8] = new Student();
//		s[8].setName("또치");
//		s[8].setMiddleScore(98);
//		s[8].setFinalScore(95);
//		s[9] = new Student();
//		s[9].setName("박혁거세");
//		s[9].setMiddleScore(32);
//		s[9].setFinalScore(54);
//		
//		int totalMiddleScore = 0;
//		int totalFinalScore = 0;
//		int numberOfstudent = s.length;
//		for (int i = 0; i < numberOfstudent; i++) {
//			totalMiddleScore = totalMiddleScore + s[i].getMiddleScore();
//			totalFinalScore = totalFinalScore + s[i].getFinalScore();
//		}
//		
//		double avgMiddleScore = (double)totalMiddleScore / numberOfstudent;
//		double avgFinalSocre = (double)totalFinalScore / numberOfstudent;
//		
//		System.out.println("중간고사 총점은 " + totalMiddleScore);
//		System.out.println("중간고사 평균은 " + avgMiddleScore);
//		System.out.println("기말고사 총점은 " + totalFinalScore);
//		System.out.println("기말고사 평균은 " + avgFinalSocre);
		
		
		
	}

}

결과 : 

중간고사 총점은 537
중간고사 평균은 53.7
기말고사 총점은 653
기말고사 평균은 65.3

 

2. 함수 메소드가 있는 클래스

public class Student {
	
	// 방법 1. 생성자를 이용. (객체데이터를 활용할 수 있어 코드도 간결하고 에러가 적다.)
	String name;
	int middleScore;
	int finalScore;
	
	// 생성자 이용하기. 일반적으로 객체데이터 만들 때는 생성자 이용하는게 코드가 간결해진다.
	Student(String name, int middleScore, int finalScore) {
		this.name = name;
		this.middleScore = middleScore;
		this.finalScore = finalScore;
	}
	
	
//	// 방법 2. setter, getter 이용하는 경우. 국내 자바업계는 이렇게 쓴다는데 코드가 너무 길어진다.
//	private String name;
//	private int middleScore;
//	private int finalScore;
//	
//	// String name에 대한 setter(public void), getter(public String) 만들기.
//	public void setName(String name) {
//		this.name = name;
//	}
//	public String getName() {
//		return this.name;
//	}
//	
//	// int middleScore에 대한 setter(public void), getter(public int) 만들기.
//	public void setMiddleScore(int middleScore) {
//		this.middleScore = 	middleScore;
//	}
//	public int getMiddleScore() {
//		return this.middleScore;
//	}
//	
//	// int finalScore에 대한 setter(public void), getter(public int) 만들기.	
//	public void setFinalScore(int finalScore) {
//		this.finalScore = finalScore;
//	}
//	public int getFinalScore() {
//		return this.finalScore;		
//	}

}

 

만약 객체데이터를 이용한다면

Student[] s = new Student[10];   ->   클래스 Student의 이름은 s고, 배열로 묶어 10개의 클래스 방을 한 번에 만들거다. 그리고 이 10개의 s는 각각 '메모리에 할당해라 s0 = Student[0], s1 = Student[1], ... , s0 Student[9]'이다. (값은 비어있다. 클래스는 빈 방이다. 값이 들어있는 것으로 혼동하면 큰일난다. 매트릭스처럼 생각하자. 그저 행을 만들었을 뿐이다.)

(자바에서의 배열은 파이썬이나 스위프트와 다르게 단지 여러개의 변수를 한 번에 선언해주는 것이었다. 여기서도 마찬가지다.
Student s0 = new Student();
Student s1 = new Student();
...
Student s9 = new Student();
노가다 10번 해서 10개의 클래스 방을 만들어야 하는걸 그냥 배열 형태로 한 번에 해결한 것 뿐이다.)

 

아래의 코드를 보자.
외부 클래스를 10번 오려다 붙여 s = { s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], s[8], s[9] } 라는 비어있는 클래스 방 10개가 만들어졌고, 이제 이 방을 채울거다. (매트릭스의 열을 채운다고 생각하자.)

s[0] = new Student("홍길동", 100, 100);    / 풀어서 쓰면 Student s0 = new ("홍길동", 100, 100); 과 같다.
s[1] = new Student("둘리", 10, 10);             / 풀어서 쓰면 Student s1 = new ("둘리", 10, 10); 과 같다.
...
s[9] = new Student("박혁거세", 32, 54);     / 풀어서 쓰면 Student s9 = new ("박혁거세", 32, 54); 과 같다.

를 통해서
0번방 s[0]에 new를 통해 Student("홍길동", 100, 100)을 생성자로 갖는 방이 생성된다.
1번방 s[1] new를 통해 Student("둘리", 10, 10)을 생성자로 갖는 방이 생성된다.
...
9번방 s[9] new를 통해 Student("박혁거세", 32, 54)을 생성자로 갖는 방이 생성된다.

+ Recent posts