첫 개발 경력, 바른개발연구소/OJT

Variable

yebin0322 2025. 1. 21. 14:18
반응형

Variable

  • 데이터를 저장할 수 있는 메모리상의 공간
  • 변수에는 데이터 타입과 일치하는 단 하나의 값만 저장할 수 있음
  • data type(자료형) = 기본형 + 참조형

Primivite type(기본형)

  • 어떠한 값에 대한 연산이 필요한 경우 사용
  • 8개
    • boolean
    • char
    • byte
    • short
    • int
    • long
    • float
    • double

Reference type(참조형)

  • 기본형을 제외한 모든 타입(클래스, 인터페이스 등)
  • null값 저장 가능
  • 객체의 주소(4 byte 정수) 저장 가능
  • memory address(실제 데이터가 저장된 주소)를 저장함
    package day2;

import org.slf4j.Logger;  
import org.slf4j.LoggerFactory;

public class MemberTest {  
private static final Logger logger = LoggerFactory.getLogger(StringSharingExample.class);

public static class Member {
    int age = 20;
    int height = 180;
    int weight = 80;
}

public static void main(String[] args) {
    Member member = new Member();

    logger.info("member : {}", member);
    logger.info("age : {}", member.age);
    logger.info("height : {}", member.height);
    logger.info("weight : {}", member.weight);
    }

}

  • 위의 코드의 결과를 보면 member에는 Memeber 클래스로부터 생성된 객체의 주소가 저장된다는 것을 알 수 있음
  • member의 실제 데이터 : 메모리의 heap 영역에 저장
  • member의 주소값 : 메모리의 stack 영역에 저장

자바의 변수 종류

Class Variable(클래스 변수, = static 변수, = 공유 변수)

  • 필드 내에서 static 키워드와 함께 선언된 변수
  • 해당 클래스의 모든 인스턴스가 공유
  • 클래스가 메모리에 로드될 때 생성됨 -> 프로그램이 시작될 때 또는 해당 클래스를 처음 사용할 때 발생
  • 클래스의 인스턴스를 생성하지 않고도 접근할 수 있음
  • 클래스 변수는 프로그램의 실행 내내 메모리에 유지됨
package day2;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ClassVariableExample {

    static int classVariable = 0;

    private static final Logger logger = LoggerFactory.getLogger(LoggerExample.class);

    public ClassVariableExample() {
        classVariable++; // 인스턴스가 생성될 때마다 증가
    }

    public static void main(String[] args) {
        //인스턴스를 생성하지 않고 클래스 변수에 접근
        logger.info("Initial count : {}", ClassVariableExample.classVariable);

        //첫 번째 인스턴스 생성
        ClassVariableExample obj1 = new ClassVariableExample();
        //두 번째 인스턴스 생성
        ClassVariableExample obj2 = new ClassVariableExample();

        //인스턴스를 통해 접근
        logger.info("total : {}", classVariable);
    }

}

  • 위의 코드에서 classVariable이 static으로 선언되었기 때문에 클래스 이름을 통해 직접 접근할 수 있는 것을 볼 수 있음

Instance Variable(인스턴스 변수)

  • 클래스의 인스턴스(객체)가 생성될 때마다 각각의 객체에 속하는 변수
  • 각 인스턴스는 자신의 인스턴스 변수에 대해 별도의 값을 가짐
  • new 생성자()를 통해 인스턴스가 생성될 때 만들어짐
  • 인스턴스를 생성한 뒤 '인스턴스명.인스턴스변수명'을 통해 사용할 수 있음
  • 인스턴스는 힙 메모리의 독립적인 공간에 저장됨
  • 동일한 클래스로부터 생성되어도 객체의 고유한 개별성을 가짐
package day2;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class InstanceVariableExample {
    private static final Logger logger = LoggerFactory.getLogger(StringSharingExample.class);

    String color; // 인스턴스 변수
    String name; // 인스턴스 변수

    public InstanceVariableExample(String color, String name) {
        this.color = color;
        this.name = name;
    }

    public static void main(String[] args) {
        InstanceVariableExample ex1 = new InstanceVariableExample("red", "빨강");
        InstanceVariableExample ex2 = new InstanceVariableExample("blue", "파랑");

        logger.info(ex1.color);
        logger.info(ex2.color);
    }

}

Local Variable(지역 변수)

  • 특정 블럭 또는 메소드 네에서 선언되고 사용되는 변수
  • 선언된 블록, 메서드, 함수 내에서만 유효하며 해당 블록을 벗어나면 사용할 수 없음
  • 메소드 내에서 선언된 변수는 그 메소드가 실행되는 동안에만 존재함
  • 지역변수는 사용하기 전 반드시 초기화해야 함
  • 같은 이름의 지역 변수가 여러 블록에서 선언될 수 있는데, 이 경우 각 블록의 지역 변수는 서로 독립적임
반응형

'첫 개발 경력, 바른개발연구소 > OJT' 카테고리의 다른 글

File I/O Handling  (0) 2025.01.22
LGEricsson JAVA Standard  (3) 2025.01.20
Windows-based Development Environment Settings  (1) 2025.01.20