자바의 클래스에 대해서 알아보았다.

서재환·2021년 11월 10일
0

JAVA

목록 보기
2/16

빠지지 않는 클래스 그래서 우리는 참조 변수를 알 필요가 있다.

자바에는 원시타입을 값으로 갖는 변수와 객체의 주소값을 갖는 참조변수가 있다. 참조변수는
가리키고 있는 객체의 크기와 상관없이 JVM 종류에 따라 그 크기가 동일하다.

인스턴스를 새로 생성 할 때마다 객체는 힙 메모리에 올려져서 생성이 되어진다.

참조 변수 내부의 변수나 메소드는 생성한 인스턴스에 '.'을 붙여서 해당 객체의 변수나
method에 접근한다.

참조변수끼리 참조변수1 == 참조변수2 라는 부분이 있으면 참조변수1과 참조변수2가 가리키는
객체가 동일하다라는 의미를 갖는다.

class Book {
	public String title;
}

public class Main {
	public static void main(String[] args) {
    
    	Book b = new Book();
        Book d = new Book();
        
        Book c = d;
    }
}

원소가 원시타입인 배열 뿐만 아니라 class type의 배열을 만들 수 있다.

class 타입으로 배열을 선언할 수 있다. 따라서 배열 내부의 각각의 원소는 class 타입의
크기를 갖는다. 따라서 자료형 Dog이고 index가 6인 배열을 생성하면 배열 원소 하나의 크
기는 자료형 Dog의 크기를 갖는다.

배열의 각 원소는 클래스 타입이이므로 해당 index 안에 들어가는 자료형이 한정적이지 않다.

class Dog {
	String name;
}

public class Main {
	public static void main(String[] args) {
    	Dog[] pets = new Dog[6];
                
        pets[0] = new Dog();
        pets[1] = new Dog();        
    }
}

인스턴스에 따라 클래스 내부의 함수를 다르게 실행시킬 수 있다.

클래스 내부에 선언된 변수는 인스턴스를 통해 접근해서 해당 값에 값을 부여하고 난 후
클래스 내부에선 해당 변수를 사용할 때 값을 갖는다. 대단히 당연한 말이지만 인스턴스
에 따라 변수에 다른 값을 부여했을 때 클래스 내부 메소드를 인스턴스 별로 다르게 사
용 할 수 있기에 이 같은 내용을 추가하게 되었다.
class Dog {
    int size;
    String name;

    void bark() {
        if (size > 60) {
            System.out.println("Wooof! Wooof!");
        } else if (size > 14) {
            System.out.println("Ruff! Ruff!");
        } else {
            System.out.println("Yip! Yip!");
        }
    }
}

class DogTestDrive {
    public static void main(String[] args) {
        Dog one = new Dog();
        one.size = 70;
        Dog two = new Dog();
        two.size = 8;
        Dog three = new Dog();
        three.size = 35;
        one.bark();
        two.bark();
        three.bark();
    }
}

ooof! Wooof!
Yip! Yip!
Ruff! Ruff!

클래스 내부 변수는 초기화하지 않아도 값을 가진다

다음과 같이 PoorDog 클래스를 선언해주고 main에서 초기화하지 않은 size와 name의
값을 가져오려고 하면 어떤 일이 발생할까?

다행히도 자바는 사용자가 초기화 해주지 않아도 아래와 같이 자료형에 대해 해당하는 값
으로 초기화 시킨다.

class PoorDog {
    private int size;
    private String name;

    public int getSize() {
        return size;
    }

    public String getName() {
        return name;
    }
}

public class PoorDogTestDrive {
    public static void main(String[] args) {
        PoorDog one = new PoorDog();
        System.out.println("Dog size is " + one.getSize());
        System.out.println("Dog name is " + one.getName());
    }
}

클래스 내부에 선언된 변수와 메서드 안에 선언된 변수

클래스 안에 선언된 변수는 인스턴스의 변수이다.
class Horse {
    private double height = 15.2;
    private String breed;    
}
클래스 안의 메서드 안에 선언된 변수는 지역변수이다.
class AddThing {
    int a;
    int b = 12;

    public int add() {
        int total = a + b;
        return total;
    }
}
인스턴스 변수와는 다르게 지역변수는 사용하기 위해선 반드시 초기화 시켜야 한다.

0개의 댓글