클래스와 객체(Class & Object)

  • 객체(Object): 실생활에서 우리가 인식할 수 있는 사물

  • 클래스(Class): 객체를 생성하는 틀 또는 설계도와 같은 개념


인스턴스(Instance)

  • 클래스의 인스턴스화: 클래스로부터 객체를 선언하는 과정
  • 인스턴스(Instance): 선언된 해당 클래스 타입의 객체
    • 메모리에 할당된 객체를 의미


클래스(Class)

  • 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메소드(method)로 구성

    • 필드(field): 클래스에 포함된 변수(variable)를 의미
    • 메소드(method): 어떠한 특정 작업을 수행하기 위한 명령문의 집합
1
2
3
4
5
6
7
8
9
public class 클래스명{
    //필드(객체 변수)
    //생성자
    //메소드
    //+접근제어자
    //+static
}

클래스명 객체명 = new 클래스명();


메소드(Method)

  • 어떠한 특정 작업을 수행하기 위한 명령문의 집합
1
2
3
접근제어자 반환타입 메소드이름(매개변수목록) { // 선언부
    // 구현부
}


생성자(Constructor)

  • 생성자 규칙: 클래스명과 생성자명이 같아야하며 반환타입이 없다.
1
2
3
public class 클래스명{
    생성자명(){}
}


this,this()

this : 객체 자신을 의미

this() : 생성자를 의미

1
2
3
4
5
6
7
8
9
10
class ThisExample{
    //필드
    String name;
    String type;

    //생성자
    public Car2(String name,String type) {
        this.name = name;	//this 는 객체 자신을 의미
        this.type = type;
}


오버로딩(Overloading)

  • 하나의 클래스 안에서 같은 이름의 메소드를 여러개 정의하는 것을 의미

  • 메소드의 이름이 같아야 하며 매개변수의 개수나 타입이 달라야 한다.

1
2
3
void display(int num1)              
void display(int num1, int num2)    // 매개변수의 개수가 다르다.
void display(int num1, double num2) // 매개변수의 타입이 다르다.


접근 제어자(Access Modifier)

  • 클래스의 변수나 메소드에 접근을 제한하는 기능을 제공


접근제어자의 종류

  1. private : 해당 클래스에서만 접근 가능
  2. default : 해당 패키지 내에서만 접근 가능
  3. protected : 해당 패키지 및 상속 받은 클래스에서 접근 가능
  4. public : 어디서든 접근 가능

modifier


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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class StaticExample {
    // 스태틱 변수
    static String name = "abc";
    int number;

    // 생성자
    public StaticExample() {
    }

    public StaticExample(String name, int number) {
        this.name = name;
        this.number = number;
    }

    // 출력 메소드
    void printInfo() {
        System.out.println("name : " + name);
        System.out.println("number : " + number);
    }

    // 스태틱 메소드
    static void getName() {
        System.out.println("name : " + name);
    }

}

public class Main {
	public static void main(String[] args) {
        StaticExample st = new StaticExample();	
        st.number = 1;	//static으로 지정하지 않은 변수는 객체를 생성해야 사용할 수 있다.
        
        //Static 변수 및 메소드는 객체를 생성하지 않아도 호출이 가능
        StaticExample.name = "Chulsoo";
        StaticExample.getName();
        
        //printInfo 메소드를 출력한다면 name이 static 변수기때문에 st1,st2,st3의 이름은 모두 마지막 설정인 '박효신'으로 출력된다.
        StaticExample st1 = new StaticExample("김범수", 1);
        StaticExample st2 = new StaticExample("나얼", 2);
        StaticExample st3 = new StaticExample("박효신", 3);
        
        st1.printInfo();
        st2.printInfo();
        st3.printInfo();
    }
}

카테고리:

업데이트:

댓글남기기