반응형
클래스와 객체란?
객체를 붕어빵, 클래스를 붕어빵 틀로 비유 (클래스를 사용해서 객체를 생성한다는 의미)
Circle c1 = new Circle();
- 위의 코드에서 Circle은 클래스(데이터 타입), c1은 객체(변수명)
- new는 객체 생성을 뜻하고, ()는 함수 생성자를 의미함
- Circle, String, int[], char[], ...을 참조형 타입이라고 함
- 이와 반대되는 개념으로 기본형 타입(Primitive Type)이 8개 있음
- 논리형 : boolean
- 문자형 : char
- 숫자형(정수) : byte, short, int, long
- 숫자형(실수) : float, double
- 기본형 타입은 각각 크기가 다른데, 참조형 타입은 모두 4byte임 => 메모리 주소값을 담고 있기 때문
클래스, 객체 사용 예제
public class Main {
public static void main(String[] args) {
Student student1 = new Student("Tom", 17, 177.8);
Student student2 = new Student("Harry", 18, 168.1);
Student student3 = new Student("Alice", 16, 161.2);
student1.PrintStudentInfo();
student2.PrintStudentInfo();;
student3.PrintStudentInfo();
}
}
class Student {
String name;
int age;
double height;
Student(String name, int age, double height) {
this.name = name;
this.age = age;
this.height = height;
}
void PrintStudentInfo() {
System.out.print("이름 : " + name + " ");
System.out.print("나이 : " + age + " ");
System.out.println("키 : " + height);
}
}
- 위의 코드에서 Student는 클래스, student1,2,3은 객체를 뜻함
- Student(String name, ...)은 생성자를 뜻함
- 기본적으로 생성자를 작성하지 않으면 JVM이 자동으로 파라미터가 없는 생성자(default 생성자)를 생성해줌
- 단, 위와같이 직접 생성자를 작성하면 default 생성자를 따로 생성하지 않기 때문에, new Student()와 같이 사용할 수 없음
- 오버로딩을 사용해서 생성자를 여러개 생성할 수도 있음
- 생성자에서 this를 사용하는데 이는 파라미터로 넘어온 변수들과 클래스 변수들의 이름이 같기 때문에 구분을 위해 사용
- PrintStudentInfo 메소드에서도 this를 사용해도 되지만, this를 사용하지 않아도 알아서 자기 클래스 변수로 인식해줌
결과
객체 배열 사용법
- 만약 만들고자 하는 객체가 많아진다면 위의 예시처럼 하나씩 넣기 힘들 수 있고 관리도 불편할 수 있음
- 그럴때 객체 배열을 사용해서 더 편하게 관리할 수 있음
- main 메소드를 아래와 같이 수정해보자
public static void main(String[] args) {
Student[] students = new Student[3]; // 객체 배열
String[] namelist = {"Tom", "Harry", "Alice"};
int[] agelist = {17, 18, 16};
double[] heightlist = {177.7, 168.1, 161.2};
for(int i = 0 ; i < 3 ; i ++) {
students[i] = new Student(namelist[i], agelist[i], heightlist[i]);
}
for(Student student : students) {
student.PrintStudentInfo();
}
}
- 실행 결과는 위의 결과와 일치
반응형
'JAVA > 기본 문법' 카테고리의 다른 글
[JAVA] 접근 제한자, 정보은닉, Static, psvm (0) | 2021.08.17 |
---|---|
[JAVA] 얕은 복사(Shallow Copy), 깊은 복사(Deep Copy) (0) | 2021.08.16 |
[JAVA] 배열 + java.util.Arrays 패키지 활용 (1) | 2021.08.16 |
[JAVA] 문자열(String) 관련 메소드 정리 + 형변환 (0) | 2021.08.14 |
[JAVA] Hello, World! (Eclipse) (0) | 2021.08.10 |