본문 바로가기
▶개발/JAVA

[JAVA] 자바 정리노트(2)

by 브라더 준 2018. 12. 17.

[JAVA] 자바 정리노트(2)


1. 인스턴스를 생성할때에 참조변수 타입과 인스턴스 타입이 일치해야 한다. 

다만, 참조변수 타입이 서로 상속관계에 있을 경우 조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조하는 것이 가능하다. 이 경우 참조변수 타입에 따라 사용 가능한 멤버 개수가 달라짐.

Car c = new Car(); // 서로 타입이 일치한 경우
class Car{
    boolean opener;
    boolean power;

    void power() { power = !power; }

}

class OpenCar extends Car{
    // Car 클래스를 상속한 OpenCar 클래스
    void opener() { opener = !opener; }
}

Car c = new OpenCar(); // 조상 클래스 타입으로 자손 클래스 인스턴스 참조
OpenCar oc = new OpenCar(); // 서로 타입이 일치한 경우

// c.opener(); c 참조변수로는 조상 클래스의 멤버만 사용 가능
oc.opener(); // opener() 멤버 사용가능
oc.power(); // 상속했기에 당연히 사용 가능


2. 선언위치에 따라 변수의 종류는 인스턴스, 클래스(static, 공유), 지역변수로 구분된다. static의 붙임여부는 공통, 공유성에 주안을 둔다.

class Car{
    int instanceVariable; // 인스턴스 변수
    static int staticVariable; // 클래스 변수(static, 공유)

    void power() { int localVariable = 0; // 지역 변수 }

}


3. 인스턴스변수와 클래스변수는 초기화가 선택적이지만, 지역변수는 꼭 초기화를 해주어야 한다.


4. 메소드의 return문은 메서드의 반환타입이 void가 아닐 경우 반드시 있어야 한다. 또한 메소드의 타입과 리턴타입은 같거나 자동으로 형변환이 가능한 경우만 허용한다.


5. static의 여부에 따라 클래스 메소드(static)와 인스턴스 메소드로 나눠진다. 클래스 메소드는 인스턴스를 생성하지 않아도 사용이 가능하다. 반면에 인스턴스 메소드는 인스턴스를 꼭 사용하여야 한다. 

1) 메인 메소드에서 클래스 메소드를 바로 호출이 가능하다.

2) 메인 메소드에서 인스턴스 메소드를 호출하기 위해서는 인스턴스를 생성해야 한다.

3) 클래스 메소드에서 인스턴스 변수, 메소드를 작업할 수 없다. 이유인즉 클래스 메소드는 인스턴스를 생성하지 않아도 사용이 가능하지만 인스턴스 변수, 메소드는 인스턴스가 생성되어야 하며, 생성되었는지를 알 수 없기 때문.

4) 인스턴스 메소드에서 클래스 변수, 메소드를 호출 혹은 작업할 수 있다.


6. 오버라이딩시 자식 클래스는 부모클래스보다 많은 예외를 선언할 수 없다. 다만, throw Exception은 모든 예외이므로 순전히 예외의 갯수라고 생각하지 않아야 한다.


7. 한 생성자에서 다른 생성자를 호출할 때에는 꼭 첫 줄에서만 호출이 가능하다. 또한 생성자의 이름은 클래스 이름이 아닌 'this()'로 사용하여 호출한다.

(첫 줄에 호출하여야 하는 이유) A생성자의 내용을 수행하던 중간에 다른 B생성자를 호출하게 되어 이전에 수행했던 작업(A 생성자의 작업)들의 내용이 변경될 수 있기 때문이다. (B 생성자가 A생성자가 작업했던 변수의 값을 초기화한다면 A생성자의 이전 작업은 쓸모가 없어진다는 것)


8. 생성자의 첫줄에서 다른 생성자를 호출하지 않을 경우 컴파일러가 자동으로 'super()'를 삽입, 호출한다. super()은 부모 클래스의 생성자를 호출하는 것이다. 최종적으로 Object클래스의 생성자까지 호출하게 된다.


9. this()는 생성자에서 다른 생성자 호출시에 사용, super()은 상속대상이었던 부모클래스의 생성자를 호출할 때에 사용한다. 

반응형