
오늘의 잔디

오늘의 공부



맥북을 샀다.
맥북에 개발환경을 무성이의 도움을 받아 세팅했다.
오로지 맥북은 코딩만 할 수 있게끔 개발 환경을 세팅했다.
김성한 강사님의 첫 자바 입문 편을 다 들었다.
감상평도 남겼는데 곧바로 댓글을 남겨주셨다.
나중에 유튜브 올리신 인생 이야기도 찾아서 봐봐야겠다 재밌다.
이제 자바 기본편인데 이것도 끝까지 열심히 해보자.
자바 세상은 클래스와 객체로 이루어져 있다. 그만큼 클래스와 객체라는 개념은 중요하다. 그런데 클래스와 객체는 너무 많은 내용을 포함하고 있어서 한번에 이해하기 쉽지 않다. 여기서는 클래스와 객체라는 개념이 왜 필요한지 부터 시작해서, 클래스가 어떤 방식으로 발전하면서 만들어졌는지 점진적으로 알아보겠다.
먼저 클래스가 왜 필요한지 이해하기 위해 다음 문제를 풀어보자.
지금까지 학습한 내용을 기반으로 문제를 풀어보면 된다.
문제: 학생 정보 출력 프로그램 만들기
당신은 두 명의 학생 정보를 출력하는 프로그램을 작성해야 한다. 각 학생은 이름, 나이, 성적을 가지고 있다.
요구 사항:
1. 첫 번째 학생의 이름은 "학생1", 나이는 15, 성적은 90입니다.
2. 두 번째 학생의 이름은 "학생2", 나이는 16, 성적은 80입니다.
3. 각 학생의 정보를 다음과 같은 형식으로 출력해야 합니다: "이름: [이름] 나이: [나이] 성적: [성적]"
4. 변수를 사용해서 학생 정보를 저장하고 변수를 사용해서 학생 정보를 출력해야 합니다.
예시 출력:
이름: 학생1 나이: 15 성적: 90
이름: 학생2 나이: 16 성적: 80
변수를 사용해서 이 문제를 풀어보면 다음과 같다.
ClassStart1 - 변수 사용
package class1;
public class ClassStart1 {
public static void main(String[] args) {
String student1Name = "학생1";
int student1Age = 15;
int student1Grade = 90;
String student2Name = "학생2";
int student2Age = 16;
int student2Grade = 80;
System.out.println("이름:" + student1Name + " 나이:" + student1Age + " 성
적:" + student1Grade);
System.out.println("이름:" + student2Name + " 나이:" + student2Age + " 성
적:" + student2Grade);
}
}
학생 2명을 다루어야 하기 때문에 각각 다른 변수를 사용했다. 이 코드의 문제는 학생이 늘어날 때 마다 변수를 추가로 선언해야 하고, 또 출력하는 코드도 추가해야 한다.
이런 문제를 어떻게 해결할 수 있을까? 앞서 배운 배열을 사용하면 문제를 해결할 수 있다.
문제: 이전 문제에 배열을 사용하자
이전 문제에 배열을 적용하자. 그래서 학생이 추가되어도 코드 변경을 최소화 해보자.
ClassStart2
package class1;
public class ClassStart2 {
public static void main(String[] args) {
String[] studentNames = {"학생1", "학생2"};
int[] studentAges = {15, 16};
int[] studentGrades = {90, 80};
for (int i = 0; i < studentNames.length; i++) {
System.out.println("이름:" + studentNames[i] + " 나이:" +
studentAges[i] + " 성적:" + studentGrades[i]);
}
}
}
배열을 사용한 덕분에 학생이 추가되어도 배열에 학생의 데이터만 추가하면 된다. 이제 변수를 더 추가하지 않아도 되
고, 출력 부분의 코드도 그대로 유지할 수 있다.
학생 추가 전
String[] studentNames = {"학생1", "학생2"};
int[] studentAges = {15, 16};
int[] studentGrades = {90, 80};
학생 추가 후
String[] studentNames = {"학생1", "학생2", "학생3", "학생4", "학생5"};
int[] studentAges = {15, 16, 17, 10, 16};
int[] studentGrades = {90, 80, 100, 80, 50};
배열을 사용해서 코드 변경을 최소화하는데는 성공했지만, 한 학생의 데이터가 studentNames[] ,studentAges[] , studentGrades[] 라는 3개의 배열에 나누어져 있다. 따라서 데이터를 변경할 때 매우 조심해서 작업해야 한다. 예를 들어서 학생 2의 데이터를 제거하려면 각각의 배열마다 학생2의 요소를 정확하게 찾아서 제거해주어야 한다.
학생2 제거
String[] studentNames = {"학생1", "학생3", "학생4", "학생5"};
int[] studentAges = {15, 17, 10, 16};
int[] studentGrades = {90, 100, 80, 50};
한 학생의 데이터가 3개의 배열에 나누어져 있기 때문에 3개의 배열을 각각 변경해야 한다. 그리고 한 학생의 데이터를 관리하기 위해 3개 배열의 인덱스 순서를 항상 정확하게 맞추어야 한다. 이렇게 하면 특정 학생의 데이터를 변경할 때 실수할 가능성이 매우 높다.
이 코드는 컴퓨터가 볼 때는 아무 문제가 없지만, 사람이 관리하기에는 좋은 코드가 아니다.
지금처럼 이름, 나이, 성적을 각각 따로 나누어서 관리하는 것은 사람이 관리하기 좋은 방식이 아니다.
사람이 관리하기 좋은 방식은 학생이라는 개념을 하나로 묶는 것이다. 그리고 각각의 학생 별로 본인의 이름, 나이, 성적을 관리하는 것이다.