[자바] 3. 참조 자료형

개발자 춘식이·2023년 7월 5일
0

Java

목록 보기
3/8
post-thumbnail

도서 자바의신, 이것이 자바다를 참고하였습니다.

1. 참조 자료형

기본 연산자와는 다르게 참조 자료형은 new 연산자를 사용해서 객체를 생성합니다. 참조 자료형 중 new 없이도 객체 생성이 가능한 것은 String 밖에 없습니다. 그렇다면 왜 참조라 불릴까요? 바로 객체(Object)의 번지를 참조하기 때문입니다. 참조 자료형에는 배열, Enum, 클래스, 인터페이스가 있습니다.


2. 기본 생성자

기본 생성자는 한 클래스 내에 아무런 생성자를 정의하지 않으면, 컴파일 시 컴파일러가 자동으로 매개변수가 없는 생성자가 생성됩니다. 만약, 다른 생성자가 있으면 자동으로 만들어지지 않습니다.


3. 오버로딩(Overloading)

같은 역할을 하는 메소드는 같은 메소드 이름을 가져야 합니다. 오버로딩은 메소드의 이름은 같고, 매개변수만 달리 하는 것을 말합니다. 매개 변수의 타입, 개수, 순서 중 하나가 달라야 합니다. 오버로딩된 메소드를 호출할 경우 JVM은 매개값의 타입을 보고 메소드를 선택합니다. 꼭 메소드 뿐만 아니라 생성자도 매개 변수에 따라 다르게 인식됩니다.


4. static

정적 필드와 정적 메소드는 클래스에 고정된 멤버로 Class Loader가 Class(byte 코드)를 로딩해서 메소드 메모리 영역에 적재할 때 클래스별로 관리됩니다. 따라서 클래스의 로딩이 끝나면 바로 사용할 수 있습니다.

1) static 메소드

static은 객체를 생성하지 않아도 클래스.메소드();와 같이 메소드 호출이 가능합니다. static 메소드는 클래스 변수만 사용할 수 있습니다. 그렇지 않을 경우, non-static variable A cannot be referenced from a static context 라는 컴파일 에러가 발생하게 됩니다.

2) static 블록

static 블록은 복잡한 초기화 작업을 하기 위해서 사용됩니다. static 블록은 클래스가 메모리에 load될 때 자동으로 딱 한 번 실행 됩니다. 그 이후로는 아무리 호출하려해도 호출이 되지 않습니다. static 블록은 클래스 내에 선언되어 있어야 하며, 메소드 내에서는 선언이 안됩니다. 또한 static 블록을 여러 개 선언해도 되지만, 선언된 순서대로 실행되므로 순서가 중요합니다.

3) 주의할 점

static 메소드와 static 블록은 객체가 없어도 실행되므로, 이들 내부에서는 인스턴스 필드나 인스턴스 메소드를 사용할 수 없습니다. 또한 this 키워드 사용도 불가능합니다. 만약, 인스턴스 멤버를 사용하고 싶으면 객체를 먼저 생성하고 참조 변수로 접근해야 합니다. main() 메소드도 static 메소드이므로 객체 생성 없이 인스턴스 필드와 인스턴스 메소드를 main() 메소드에서 바로 사용할 수 없습니다.

public class Car {
  int speed;

  void run() {...}

//  public static void main(String[] args) {
//    speed = 60;     //컴파일 에러
//    run();          //컴파일 에러
//  }

  public static void main(String[] args) {
    Car myCar = new Car();  //객체 생성
    myCar.speed = 60;       //참조 변수로 접근
    myCar.run();
  }
}

5. Pass by Value

Pass by Value는 value, 즉 값만 전달하는 작업을 수행합니다. 모든 기본 자료형은 무조건 Pass by Value를 통해 값을 전달하며, 호출되기 전과 후에도 데이터 변경이 안된다는 특징을 갖고 있습니다.

6. Pass by Reference

객체에 대한 참조(Reference)가 넘어가는 것으로, 참조 자료형은 Pass by Reference입니다. 호출한 메소드의 데이터에도 영향이 있으며, 따라서 객체는 호출된 메소드에서 변경한 대로 데이터가 변경됩니다.


7. 타입...변수명

매개변수 수를 정하기 애매한 경우 타입과 변수명 사이에 점 3개를 공백 없이 연달아 입력해주면 됩니다. 하나의 메소드에서 한 번만 가능하며, 여러 매개변수가 있는 경우 가장 마지막에 선언해야 합니다.


지속적으로 수정해나갈 예정입니다.
2023-07-06 v1.0

profile
춘식이를 너무 좋아하는 주니어 백엔드 개발자입니다.

0개의 댓글