Post

클래스와 객체

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();
        
    }
}

Untitled

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);
    }
}

Untitled 1

7. 접근제어자

  • 클래스의 변수나 메소드의 접근에 제한을 두는 키워드
  • 접근제어자 종류
    • private : 해당 클래스에서만 접근 가능
    • public : 어디서든 접근 가능
    • default : 해당 패키지 내에서만 접근 가능
    • protected : 해당 패키지 및 상속받은 클래스에서 접근 가능

    Untitled 2

ex)

Untitled 3

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;
    }
}

Untitled 4

  • 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();

    }
}

Untitled 5

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();

    }
}

Untitled 6

This post is licensed under CC BY 4.0 by the author.