JAVA

래퍼런스와 스태틱(static)

🤖 Play with Android 🤖 2021. 8. 21. 12:33
728x90


래퍼런스

래퍼런스란 자바 타입의 큰 범주 즉 카테고리이다. 

자바에서 변수의 타입은 크게 두 가지로 나뉜다

  1. 래퍼런스형 (reference type)
  2. 기본형 (primitives type)

여기서 래퍼런스형이란 클래스 타입, 사용자 정의형 타입이라고도 불린다. 이는 객체를 변수에 연결하기 위해 사용된다.

 

 

 

 

 

 

엄밀히 말하면 객체의 주소 정보를 담고 있다.

// 객체 생성 후, 그 객체의 주소를 marine1 변수에 저장. 그 객체를 Marine 타입 으로 해석.
Marine marine1 = new Marine("레이너", 80);

// marine1 주소의 객체이 접근하여, stimpack() 동작을 실행
marine1.stimpack();

 

 

여기서 래퍼런스 변수와 기본형 변수의 차이를 알 수 있는데 

래퍼런스 변수는 객체의 주소를 저장함으로써 객체를 간접적으로 저장

기본형 변수는 값을 직접 저장 (ex : int score = 100;  double weight = 67.8; boolean is Male = true; )

 

 

 

이때 객체도 변수에 담으면 안되는가 하는 생각을 할 수 있다.

하지만 객체는 하나의 변수에 담기는 그 양이 클 수 있다. 심지어 객체는 그 크기가 유동적인 경우도 있다. 따라서 자바는 객체 접근을 위해 주소지를 통한 접근 방식을 취한다. 

 

 

static 키워드

static은 “공유”라는 개념을 담은 키워드이다. static은 클래스의 필드와 메소드에 적용될 수 있다. static 필드는 클래스 변수, static 메소드는 클래스 메소드라 부른다. 

 

 

 

 

클래스 변수 vs 인스턴스 변수

static 키워드가 필드에 적용된 경우 이를 클래스 변수라고 하는데 클래스 변수는 객체 밖에 존재한다.

이에 반해 인스턴스 변수는 객체 내부에 존재한다.

 

 

 

 

예를 들어 학생관리 프로그램을 만든다고 하자.

이때 학생수를 세는 count라는 변수는 클래스 변수 즉 static으로 학생 개개인의 정보가 담겨있는 변수는 인스턴스 변수로 선언하면 된다.

 

이를 간단하게 코드로 구현하면 다음과 같다.

public class Main {
  public static void main(String[] args) {
    Student std0 = new Student(2019122104, "Park");
    Student std1 = new Student(2019206028, "Kim");
    Student std2 = new Student(2019153237, "Lee");
  }
}

class Student {
  // 클래스 변수
  static int count = 0;
  
  // 인스턴스 변수
  int id;
  String name;
  
  // 생성자
  Student (int i, String s) {
    id = i;
    name = str;
    count++;
  }
}

 

전체 학생수를 세주는 count변수는 static int count = 0; 을 통해서 선언해 주었고

학생 개개인의 정보를 담을 수 있는 id 와 name 은 static을 붙여주지 않고 인스턴스 변수로 선언해 주었다.

 

 

클래스 메소드 vs 인스턴스 메소드

클래스 메소드(static 메소드)는 주체 객체가 없이 간편한 기능 구현에 유리하게 실행된다.

 

 

 

 

 

인스턴스 메소드는 주 객체가 동작하는 메소드로 특정 객체의 동작 구현에 유리하다.

 

 

 

// 인스턴스 메소드를 수행하려면 먼저, 주체 객체가 생성되야 한다.
Student std4 = new Student(2007122104, "Choi");

// std4 변수에 연결된 객체가 주체가 되어, 인스턴스 메소드를 수행
std4.study();

 

 

 

 

 

 

 

 

 

 

이 글은 홍팍의 자바 OOP 인프런강의를 보고 공부하기 위해 정리한 글입니다. 

https://www.inflearn.com/course/그림으로-배우는-자바-객체지향/dashboard