클래스와 객체
1. 클래스
- 객체를 설계하는 설계도
- ex) 붕어빵 틀, 레시
2. 객체, 인스턴스
- 객체(Object)
- 실체
- 인스턴스 (Instance)
- 클래스와 객체의 관계
- 클래스로부터 객체를 선언 (인스턴스 화)
- 어떤 객체는 어떤 클래스의 인스턴스
3. 클래스 사용
- 클래스 : 객체를 만들기 위한 설계도
- 객체 변수, 메소드로 이루어짐
1
2
3
4
5
6
7
8
public class 클래스명 {
// 객체 변수
// 메소드
// + 접근제어자
// + static
}
클래스명 객체명 = new 클래스명();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// ex)
class Car {
String name;
String type;
public void printCarInfo() {
System.out.println("== Car Info ==");
System.out.println("name = " + name);
System.out.println("type = " + type);
}
public void move() {
System.out.println("이동!");
}
public void brake() {
System.out.println("정지!");
}
}
4. 생성자 (Constructor)
- 객체가 생성될 때 자동으로 호출됨
- 생성자 규칙
- 클래스명과 이름 맞추기
- 리턴 타입 없음
1
2
3
public class 클래스명 {
클래스명() {}
}
1
2
3
4
5
6
7
8
9
10
11
// ex)
class Car2 {
String name;
String type;
Car2(String name, String type) {
this.name = name;
this.type = type;
}
}
5. this, this()
- this
- 객체 자신을 의미
- this()
- 생성
(실습1 : Car 클래스 만들어서 진행)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
class Car {
String name;
String type;
// Car() {} 생성자가 기본적으로 있는것이므로 생략가능
public void printCarInfo() {
System.out.println("== Car Info ==");
System.out.println("name = " + name);
System.out.println("type = " + type);
}
public void move() {
System.out.println("이동!");
}
public void brake() {
System.out.println("정지!");
}
}
// Car2 클래스 - 생성자, this
class Car2 {
String name;
String type;
Car2(String name, String type) {
this.name = name;
this.type = type;
}
public void printCarInfo() {
System.out.println("== Car2 Info ==");
System.out.println("name = " + name);
System.out.println("type = " + type);
}
public void load() {
System.out.println("짐을 주세요!");
}
public void horn() {
System.out.println("빵빵!");
}
}
public class Main {
public static void main(String[] args) {
// Car 클래스 사용
Car myCar1 = new Car();
myCar1.name = "a";
myCar1.type = "suv";
myCar1.printCarInfo();
myCar1.move();
myCar1.brake();
// Car2 클래스 사용
Car2 myCar2 = new Car2("a", "sedan");
myCar2.printCarInfo();
myCar2.load();
myCar2.horn();
}
}
6. 오버로딩 (Overloading)
- 한 클래스 내에서 같은 이름의 메소드를 여러 개 정의
- 오버로딩 조건
- 메소드의 이름이 같아야 함
- parameter의 개수 또는 타입이 달라야 함
(리턴타입의 차이로는 오버로딩이 되지 않음)
1
2
3
4
5
6
public class 클래스명 {
클래스명() {}
클래스명(String name, String type) {
구현 내용;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// ex)
class Car {
String name;
String type;
Car(String name, String type) {
this.name = name;
this.type = type;
}
public void printCarInfo() {
System.out.println("== Car Info ==");
System.out.println("name = " + name);
System.out.println("type = " + type);
}
public void printCarInfo(String date) {
this.printCarInfo();
System.out.println("date : " + date);
}
public void printCarInfo(int number) {
this.printCarInfo();
System.out.println("number : " + number);
}
public void printCarInfo(String date, int number) {
this.printCarInfo();
System.out.println("date : " + date);
System.out.println("number : " + number);
}
}
7. 접근제어자
- 클래스의 변수나 메소드의 접근에 제한을 두는 키워드
- 접근제어자 종류
- private : 해당 클래스에서만 접근 가능
- public : 어디서든 접근 가능
- default : 해당 패키지 내에서만 접근 가능
- protected : 해당 패키지 및 상속받은 클래스에서 접근 가능
ex)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package car;
// Car2 클래스 - 생성자, this
public class Car2 {
public String name1;
private String name2;
protected String name3;
String name4;
public Car2(String name1, String name2, String name3, String name4) {
this.name1 = name1;
this.name2 = name2;
this.name3 = name3;
this.name4 = name4;
}
}
- name2 - private : car내의 Car2클래스 내에서만 접근 가능
- name3 - protected : 추상클래스 및 상속을 받는 클래스 내에서만 접근 가능
- name4 - default : car라는 패키지 내에서만 접근 가
8. Static
- 변수나 메소드의 특성을 바꾸는 키워드
- Static 특징
- 메모리에 한번만 할당
- 즉, Static 변수나 메소드는 공유되는 특성을 가짐
- Static 클래스 변수
- 해당 클래스의 각 객체들이 값을 공유
- Static 클래스 메소드
- 객체를 생성하지 않아도 호출 가능
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Car3 {
static String name = "None";
String type;
Car3(String name, String type) {
this.name = name;
this.type = type;
}
// 스태틱 메소드
public static void getName() {
System.out.println("Car name : " + name);
}
}
public class Main {
public static void main(String[] args) {
// 3. Static
System.out.println("=== Static ===");
Car3.getName();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Main {
public static void main(String[] args) {
// 3. Static
System.out.println("=== Static ===");
Car3.getName();
Car3 myCar3_1 = new Car3("a", "sedan");
Car3 myCar3_2 = new Car3("b", "suv");
Car3 myCar3_3 = new Car3("c", "rv");
myCar3_1.printCarInfo();
myCar3_2.printCarInfo();
myCar3_3.printCarInfo();
}
}
This post is licensed under CC BY 4.0 by the author.