Java - Class

노우열·2022년 7월 19일
0

Class?

클래스는 객체 그자체가 아니라 객체를 생성하는 데 사용되는 하나의 틀이다. 이클래스를 통해 생성된 객체를 인스턴스라고한다.

기본 문법

클래스명은 주로 대문자로 시작한다.

class Example { // 클래스
    int x = 10; // 필드
    
    public void print() { // 메서드
    }
    
    Example() { // 생성자
    }
    
    class Example2 { // 이너 클래스
    }
}
  • 필드(Field) : 클래스의 속성을 나타내는 변수
  • 필드(Field) : 클래스의 속성을 나타내는 변수
  • 메서드(Method) : 클래스의 기능을 나타내는 함수
  • 생성자(Constructor) : 클래스의 객체를 생성하는 역할
  • 이너 클래스(Inner Class) : 클래스 내부의 클래스

인스턴스

new 키워드를 통해 실제 객체를 생성하여 클래스 멤버에 접근한다

public class Main { //클래스명
    public static void main(String[] args) { //main 클래스
        Car car1 = new Car(); // Car 클래스로 만들어진 car1 인스턴스
    }
}

}
  • Car 클래스 타입의 참조변수 bmw를 선언한다. bmw는 stack 메모리에 저장된다.
  • new 키워드와 Car() 생성자를 통해 새로운 인스턴스를 생성한다.
  • 생성된 인스턴스를 heap 메모리에 넣고, 그 주소 값을 참조변수에 저장한다.


활용

. 포인트 연산자로 객체 안에 있는 멤버들에게 접근할 수 있다.

public class Main {
    public static void main(String[] args) {
        Car car1 = new Car("sorento", "white"); // 인스턴스 생성
        
        // 필드 출력
        System.out.println("model : " + car1.model); // model : sorento
        System.out.println("color : " + car1.color); // color : white
        
        // 메서드 호출
        car1.power(); // 시동 걸기
        car1.stop(); // 정지하기
    }
}


class Car {
    String model; // 필드
    String color;

    Car(String modelName, String colorName) { // 생성자
        this.model = modelName;
        this.color = colorName;
    }
    
    void power() { // 메서드
        System.out.println("시동 걸기");
    }
    void stop() {
        System.out.println("정지하기");
    }
}

Field

클래스에 포함된 변수를 의미하는 것으로 객체의 속성을 정의할 때 사용된다.

class Example {
	static int num1; // 클래스 변수
	int num2; // 인스턴스 변수
    
    void method() {
    	int num3 = 0; // 지역 변수
    }
}

클래스 변수 (cv)

static 키워드가 함께 선언된 변수로, 한 클래스로부터 생성된 모든 인스턴스들이 특정한 값을 공유해야 할 때 사용된다. 독립적인 저장공간을 가지는 인스턴스 변수와는 달리 공통된 저장공간을 공유한다.
인스턴스를 따로 생성하지 않고도 클래스명.클래스변수명으로 사용할 수 있다.

인스턴스 변수 (iv)

static 키워드가 없는 변수로, 인스턴스가 가지는 각각의 고유한 속성을 저장하기 위한 변수이다. new 생성자()를 통해 인스턴스가 생성될 때 만들어진다.

지역 변수 (lv)

메서드 내에 포함된 모든 변수로, 메서드 {} 안에서만 사용할 수 있다. 다른 멤버 변수와는 달리 stack 메모리에 저장되어 메서드가 종료되는 것과 동시에 함께 소멸된다.
지역 변수는 직접 초기화하지 않으면 값을 출력할 때 에러가 발생한다.

public class Main {
    public static void main(String[] args) {
        Example obj1 = new Example();
        
        // 클래스 변수 출력 (권장)
        System.out.println(Example.num1); // 10
        
        // 인스턴스 참조를 통해 클래스 변수 출력
        System.out.println(obj1.num1); // 10
        
        // 인스턴스 변수 출력
        System.out.println(obj1.num2); // 5
        
        // 지역 변수 출력
        System.out.println(obj1.method()); // 0
        
        Example obj2 = new Example();
        obj2.num1 = 20; // 클래스 변수값 변경

        System.out.println(obj1.num1); // 20 (클래스 변수 공유)
        System.out.println(obj2.num1); // 20
    }
}


class Example {
    static int num1 = 10; // 클래스 변수
    int num2 = 5; // 인스턴스 변수

    int method() {
        int num3 = 0; // 지역 변수
        return num3;
    }
}

Method

특정 작업을 수행하는 명령문들의 집합이다.

public int add(int x, int y) { // 메서드 시그니처
	int result = x + y; // 메서드 바디
    return result;
}

반환타입이 void가 아닌 경우에는 메서드 바디에 return 문이 존재해야 한다.
return은 작업을 수행한 결과값을 호출한 메서드로 전달하며 반드시 반환타입과 일치하거나 적어도 자동 형변환이 가능해야 한다.

public class Main {
    public static void main(String[] args) {
        Example obj = new Example();
        System.out.println(obj.add(10, 6)); // 16
        obj.printHello(); // Hello
    }
}


class Example {
    public int add(int x, int y) { //자료형이 있는 메서드 
        int result = x + y; // 리턴값 초기화
        return result; //리턴
    }
    
    void printHello() { //반환타입 void 
        System.out.println("Hello"); 
    }
}

Constructor

객체를 생성하는 역할을 하는 클래스의 구성요소로, 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다.
new 생성자()로 인스턴스를 생성할 때 new는 인스턴스 생성을 담당하고, 생성자()는 인스턴스 변수들을 초기화한다.

특징

  • 모든 클래스에는 반드시 하나 이상의 생성자가 존재해야 한다.
    -> 생성자가 없으면 자바 컴파일러가 자동으로 기본 생성자를 추가한다.

  • 생성자명은 클래스명과 같아야 한다.

  • return이 없다.

  • 오버로딩으로 같은 이름을 가진 생성자를 여러 개 만들 수 있다.

public class Main {
    public static void main(String[] args) {
        Car sorento = new Car();
        bmw.model = "sorento";
        bmw.color = "white";
        System.out.println("model : " + sorento.model); // model : sorento
        System.out.println("color : " + sorento.color); // color : white

        Car k8 = new Car("k8", "black");
        System.out.println("model : " + k8.model); // model : k8
        System.out.println("color : " + k8.color); // color : black
    }
}


class Car {
    String model;
    String color;

    Car() { // 기본 생성자
    }

    Car(String modelName, String colorName) { // 매개변수가 있는 생성자 (오버로딩)
        this.model = modelName;
        this.color = colorName;
    }
}
profile
ㄱ...

0개의 댓글