목표
자바의 Class에 대해 학습하세요.
학습할 것 (필수)
클래스 정의하는 방법
객체 만드는 방법 (new 키워드 이해하기)
메소드 정의하는 방법
생성자 정의하는 방법
this 키워드 이해하기
public class Student { ..............(0)
private String name; ............(1)
private int age;
private int math;
public Student() { ............(2)
this.name="홍길동";
this.age=17;
}
public void setInfo(String name, int age, int math) { ............(3)
this.name = name;
this.age = age;
this.math = math;
}
public Student(String name, int age, int math) { ................(4)
this.name = name;
this.age = age;
this.math = math;
}
public void studyMath(int hour){ .............(5)
System.out.println(name+"이 "+hour+"시간 동안 수학 공부를 했다.");
if(math>=100){
System.out.println(name+"이 수학을 너무 잘해서 오를 성적이 없다!");
return;
}
this.math+=hour;
System.out.println(name+"의 성적이 올랐다");
if(math>=100) {
this.math = 100;
}
}
public String getName() { .............(6)
return name;
}
public int getAge() {
return age;
}
public int getMath() {
return math;
}
}
(0) 클래스를 정의할 때 이름은 반드시 java파일의 이름과 동일해야 한다. 그리고 그 클래스는 접근 범위를 public으로 해야 한다. 이를 통해 어플리케이션이 작동할 때 해당 클래스가 로딩되고 작동한다. 클래스(자바 파일)의 이름은 영어로 작성하고 첫 단어를 대문자로 하는 것을 원칙으로 한다.
(1) 필드 : 클래스의 필드를 정의한다. private을 통해 객체의 필드값에 바로 접근할 수 없도록 한다. 개발자가 의도한 방식으로 값을 입력하고 출력하도록 한다.
(2) 생성자 : 클래스를 통해 인스턴스(객체)를 생성시 초기화한다. this는 생성되는 객체의 필드값을 의미한다. 인스턴스가 초기화 될 때 해당 인스턴스의 필드 값도 함께 초기화할 수 있다.
(3) 메서드 : 생성자의 필드를 해당 메서드의 매개변수를 통해 주입한다.
(4) 생성자 : 클래스의 생성자에 입력하는 매개변수를 다양하게 설계하여, 다양한 방식으로 객체를 초기화 할 수 있다. 이러한 방식을 오버로딩Overloading이라 한다. 매서드도 가능하며, 이때에는 같은 리턴값과 같은 이름을 공유한다.
(5) 메서드 : 해당 객체의 행위를 설계한다. 여기서는 투여된 시간(매개변수 int)만큼 성적이 오르도록 설계했다.
(6) 매서드 : 필드 값을 출력한다.
public class School {
public static void main(String[] args) {
Student stuA = new Student(); ...........(1)
// stuA.math=80; // error : 'math' has private access .......(2)
// System.out.println(stuA.math);
stuA.register("김국진", 18, 70);...........(3)
Student stuB = new Student("노홍철", 20, 95);.........(4)
stuA.studyMath(8);.........(5) // 김국진이 8시간 동안 수학 공부를 했다. 김국진의 성적이 올랐다
stuA.studyMath(8);.........(5) // 김국진이 8시간 동안 수학 공부를 했다. 김국진의 성적이 올랐다
stuB.studyMath(8); // 노홍철이 8시간 동안 수학 공부를 했다. 노홍철의 성적이 올랐다
stuB.studyMath(8); //노홍철이 8시간 동안 수학 공부를 했다. 노홍철이 수학을 너무 잘해서 오를 성적이 없다!
System.out.println(stuA.getName()+"의 수학 성적은"+stuA.getMath()+"입니다.");..........(6) // 김국진의 수학 성적은 86입니다.
System.out.println(stuB.getName()+"의 수학 성적은"+stuB.getMath()+"입니다."); // 노홍철의 수학 성적은 100입니다.
}
}
(1) stuA 인스턴스를 생성한다. 이때 new 키워드를 사용한다. 이는 인스턴스를 선언하고 해당 데이터를 힙에 저장하며 해당 변수는 참조변수임을 의미한다. 구체적인 내용은 후술하겠다.
(2) private으로 접근 범위를 설정한 필드는 외부의 클래스에서 직접 접근할 수 없다. 아래의 코드처럼, 설계 시 의도한 방향으로 해당 값을 접근해야만 한다.
(3) stuA는 매개변수가 없는 생성자를 통해 초기화 했다. 그리고 매서드를 통해 필드를 초기화했다.
(4) stuB는 매개변수가 있는 생성자를 통해 필드값도 함께 초기화 했따.
(5) stuA와 B는 각각의 매서드를 사용했다.
(6) 매서드를 통해 필드값을 호출한다.
백기선 개발자님의 LiveStudy를 진행 중입니다!
주요 참고자료는 <이것이자바다>, 신용권 입니다.