클래스란?
드디어 클래스에 대해서 다루게 되었군요. 클래스란 객체를 생성하기 위한 상태와 행동을 정의하는 설계도입니다. C언어를 배우신 분들이라면 배열 다음에 구조체라는 것을 배우게 되죠. 배열은 같은 자료형 여러개의 묶음이라면 구조체는 여러 자료형을 묶어서 사용할 수 있습니다. 클래스 또한 구조체처럼 여러 자료형을 담아서 사용할 수 있고, (상태) 거기에 메서드(행동)까지 정의할 수 있습니다.
필드(멤버 변수)
필드는 해당 클래스의 속성을 나타냅니다. Student 클래스라면 학과 정보, 학번, 이름등이 필드에 넣을 수 있겠죠.
필드에서도 static을 붙이는 경우에는 클래스 변수라고 부르고 일반적인 변수는 인스턴스 변수라고 부릅니다.
2021.03.10 - [Java] - [java] 변수
이에 대해서는 저번에 다룬 내용이 있으니 링크만 걸어두겠습니다.
메서드
메서드는 클래스의 행동을 표현하는데 쓰입니다. Studet 클래스를 만들려고 한다면 method로 수강신청을 한다던가, 학교를 간다, 수업을 듣는다. 등의 행위들을 정의할 수 있겠죠. 메서드의 경우 다른 언어에서는 함수로 불리는 바로 그것입니다.
return형 메서드명(매개변수){
//do
}
위와 같은 형태로 작성이 됩니다. return형에는 메서드가 실행된 후에 반환되는 값의 타입을 적어둡니다. int 변수 두개를 더한 결과값을 return 하는 경우 int add(int a,int b)return a+b; 이런 식으로 사용할 수 있겠죠.
생성자
생성자는 객체가 생성되면 실행되는 메서드라고 생각해주세요. 일반적으로는 초기화를 할때 사용됩니다. 생성자의 경우 메서드처럼 여러 이름을 붙일 수 없습니다. 클래스의 이름과 동일한 이름을 가지게 된다는 점 유의해주세요. 또한 클래스에는 최소 한 개 이상의 생성자를 가지게 됩니다. '어라?? 저는 생성자라는 것을 사용한 적이 없는데요??' 괜찮습니다. 프로그래머가 다른 생성자를 따로 작성하지 않은 경우 매개 변수가 없는 기본 생성자는 알아서 생성이 됩니다. 그래서 눈치를 못채셨을 수 있습니다.
접근 제어자
해당 필드나 메서드의 접근 범위를 명시해주기 위해 작성합니다.
추가로 final 키워드도 종종 사용되는데 수정될 수 없도록 막아두는 키워드입니다. 일반적으로 다른 분들의 코드를 보면 static하고 final을 같이 사용하는 편이에요.
Student 클래스 정의
public class Student {
public int studentNumber;
private String name;
public String major;
public Student(int studentNumber, String name, String major) {
this.studentNumber = studentNumber;
this.name = name;
this.major = major;
}
public void enroll(int studentNumber,String subject){
//...
}
}
앞에서 다룬 내용들을 종합해보면 위와 같은 클래스를 만들 수 있습니다. 예시를 위해서 뼈대만 맞춰놓았는데 이 Student 클래스로 객체를 생성해봅시다.
객체 생성
객체 생성은 'new 키워드 + 생성자'를 조합해서 할 수 있습니다. 제가 조합이라고 언급한 이유는 하나의 클래스에는 매개변수가 다른 생성자를 여러 개 정의할 수 있기에 그 중에서 하나를 골라서 사용해야 하기에 조합이라고 언급했습니다.
사진을 보면 살짝 의아한 점이 있죠?? student 객체에는 studentNumber와 name,major 속성들이 있는데 name에는 접근할 수 없습니다. 아까 Student 클래스에서 name 변수를 private으로 정의했기 때문입니다. private 속성에 접근하고 싶으시다면 getter와 setter를 이용하시면 됩니다.
public String getName() {
return this.name;
}
Student 클래스에 getName 메서드를 만들어 볼게요.
public static void main(String[] args) {
Student student = new Student(1,"jennie","computer");
System.out.println(student.getName());
}
그러면 이렇게 private 변수의 값을 가져올 수 있습니다.
new 키워드는 객체에 메모리를 할당할 수 있도록 해줍니다. 그 메모리에 대한 참조값을 인스턴스화해주는데 student가 바로 그 인스턴스에 해당됩니다.
this 키워드
this 키워드는 (객체나 인스턴스의) 자기 자신을 가리킵니다. 제가 생성한 생성자를 보면 매개변수랑 멤버변수랑 이름이 똑같죠?? 얘네들을 어떻게 구분할까요?? this 키워드로 구분할 수 있습니다. this가 붙은 쪽은 인스턴스 자체적으로 보유하고 있는 name이구나~ 이런 식으로 구분하는거죠.
'Java' 카테고리의 다른 글
[JAVA] 자바 상속 (0) | 2021.04.26 |
---|---|
테스트 코드 작성 범위 (0) | 2021.04.21 |
[JAVA] LinkedList,Stack.Queue 구현하기 (0) | 2021.04.17 |
[JAVA] 자바 라이브 스터디 4주차 과제 1 : 과제 참여율 구하기 (0) | 2021.04.16 |
[JAVA] JUnit 5 기초 (0) | 2021.04.14 |