Java

Java 변수 기본형 참조형

김한토 2024. 8. 26. 10:17
반응형

변수란 ? 데이터를 저장할 수 있는 메모리 공간을 의미한다. 변수는 특정한 데이터 타입을 가지며, 이 데이터는 프로그램에서 사용될 수 있다. 변수를 사용하면 데이터를 쉽게 관리하고 조작할 수 있다.

 

변수의 종류에는 두가지가 있다.

 

1. 기본형(Primitive Type)

: 기본형 변수는 자바에서 제공하는 기본 데이터 타입으로, 직접 값을 저장한다. 기본형은 8가지 타입이 있다.

기본형 데이터 타입은 null값을 가질 수 없다.

 

  • byte: 8비트 정수 (범위: -128 ~ 127)
  • short: 16비트 정수 (범위: -32,768 ~ 32,767)
  • int: 32비트 정수 (범위: -2,147,483,648 ~ 2,147,483,647)
  • long: 64비트 정수 (범위: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)
  • float: 32비트 부동소수점 수
  • double: 64비트 부동소수점 수
  • char: 16비트 Unicode 문자 (단일 문자)
  • boolean: true 또는 false 값
int age = 25; // int 타입의 기본형 변수
boolean isHanto = true; // boolean 타입의 기본형 변수

 

2. 참조형(Reference Type)

:  참조형 변수는 객체를 참조하는 변수이다. 즉, 변수 자체에는 객체의 주소가 저장되고, 이 주소를 통해 실제 객체에 접근할 수 있다. 참조형 변수는 클래스, 배열, 인터페이스 등 다양한 객체를 가리킬 수 있다. 참조형 데이터 타입은 null값을 가질 수 있따. null 값을 사용하면 객체가 초기화 되지 않았거나, 더 이상 필요하지 않음을 나타낼 수 있다. 하지만 null 값을 가지 변수를 사용하려고 하면 널포인터익셉션이 발생할 수 있으므로 주의해야한다.

 

String name = "김한토"; // String은 참조형 변수
int[] numbers = {1, 2, 3, 4, 5}; // 배열도 참조형 변수
String myString = null; // myString은 어떤 문자열도 참조하지 않음

 

String[] weeks = new String[7];
week[0] = "월";
week[1] = "화";
week[2] = "수";
week[3] = "목";
week[4] = "금";
week[5] = "토";
week[6] = "일";

 

 

enum

: enum은 자바에서 열거형을 정의하는 키워드이다. 열거형은 상수 집합을 정의할 때 사용되며, 코드의 가독성을 높이고 잘못된 값을 방지하는 데 유용하다. enum을 사용하면 관련된 상수들을 그룹화 할 수 있다.

 

enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}

// 사용 예
Day today = Day.MONDAY;

 

인스턴스(Instance)

: 인스턴스는 클래스에서 생성된 구체적인 객체를 의미한다. 클래스는 객체를 만들기 위한 설계도 같은 역할을 하며, 인스턴스는 그 설계도를 기반으로 실제로 만들어진 물건이다. 예를 들어 사람이라는 클래스가 있을 때, 김한토, 김민아 등은 각각의 인스턴스이다. 

class Person {
    String name; 
    String gender;
    String age;
    String mbti;
    
    // static 변수: 전체 인구 수
    static int totalPopulation = 0; 

    // 생성자
    Person() {
        totalPopulation++; // 새로운 Person 인스턴스가 생성될 때마다 totalPopulation 증가
    }

    void smile() { 
        System.out.println(name + "이(가) 미소를 짓습니다");
    }

    // static 메서드: 전체 인구 수 보여주기
    static void showTotalPopulation() {
        System.out.println("현재 전체 인구 수: " + totalPopulation);
    }
}

// 인스턴스 생성
Person hanto = new Person();
hanto.name = "김한토";
hanto.gender = "여";
hanto.smile(); // "김한토이(가) 미소를 짓습니다" 출력

// 또 다른 인스턴스 생성
Person donghee = new Person();
donghee.name = "윤동희";
donghee.gender = "남";
donghee.smile(); // "윤동희가 미소를 짓습니다" 출력

// 전체 인구 수 출력
Person.showTotalPopulation(); // "현재 전체 인구 수: 2" 출력

위의 코드에서 Person은 클래스이고, hanto는 Person이라는 설계도를 기반으로 만들어진 구체적인 사람 객체이다. 

 

new

: new는 참조형 변수를 생성할 때 객체를 메모리에 할당하는 역할을 한다.  new를 사용하면 해당 클래스의 인스턴스를 생성한다. Person hanto = new Person(); 와 같이 사용하면 Person의  새로운 객체가 메모리에 생성되고, 그 주소가 hanto 변수에 저장된다. new 키워드를 사용하여 객체를 생성하면, 생성자가 호출되며, 객체의 초기값을 설정할 수 있다. 생성자는 클래스 이름과 동일하며, 객체가 생성될 때 자동으로 호출되어 초기화 작업을 수행한다. 

 

메서드(Method)

: 메서드는 클래스 내에 정의된 함수로, 특정 작업을 수행하는 코드를 포함한다. 객체가 메서드를 호출하면 해당 작업이 실행된다. 메서드는 특정 값을 반환할 수 있으며, 반환할 값의 타입을 명시해야한다. 반환할 값이 없다면 void로 지정한다. 메서드는 매개변수를 받을 수 있으며, 이를 통해 입력값을 받아 처리할 수 있다. 

 

class Calc {
    // 메서드 정의
    int add(int a, int b) {
        return a + b;
    }
}

public class Main {
    public static void main(String[] args) {
        Calculator calc = new Calculator();
        int result = calc.add(5, 3); // 메서드 호출
        System.out.println(result); // 8
    }
}

 

생성자(Constructor)

: 생성자는 클래스의 인스턴스가 생성될 때 자동으로 호출되는 특수한 메서드이다. 주로 객체의 초기 상태를 설정하는 데 사용된다. 생성자의 이름은 클래스의 이름과 동일해야한다. 반환타입은 없으며, void를 명시하지 않는다. 객체가 생성될 때 자동으로 호출되므로, 별도로 호출하지 않아도 된다. 생성자는 객체 필드에 초기값을 설정하거나 필요한 리소스를 할당하는 데 사용된다. 

class Person {
    String name;
    int age;

    // 생성자 정의
    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class Main {
    public static void main(String[] args) {
        // 생성자를 통해 Person 객체 생성
        Person hanto = new Person("hanto", 1);
        System.out.println(hanto.name + " - " + hanto.age);
    }
}

 

 

 

static

: static 변수는 모든 인스턴스가 공유하는 값이다. 여러 객체가 같은 값을 참조해야할 때 사용한다. 클래스 이름으로 직접 호출 할 수 있어 인스턴스를 생성하지 않고도 접근할 수 있다. 특정 정보나 기능이 공통적으로 사용될 때 유용하다. 

주의해야할 점이 있는데, static변수는 모든 인스턴스가 공유하기 때문에, 한 인스턴스에서 값을 변경하면 다른 모든 인스턴스에 영향을 미칠 수 있다. 이로 인해 예기치 않은 동작이 발생할 수 있다. 그리고 메모리 누수가 발생할 수도 있는데  메모리 누수란 사용하지 않은 객체가 가비지 컬렉션에 의해 회수되지 않고 메모리에 남아 있는 상태를 의미한다. static 변수나 메서드가 객체를 참조하고 있을 경우, 해당 객체가 더이상 필요하지 않더라도, 메모리에서 해제되지 않는다. 이로 인해 메모리가 점점 고갈할 수 있따. 사용하지 않는 스태틱 변수들이 메모린를 게속 차지하면 메모리 사용량이 증가하고 성늘 저하를 초래할 수 있다. 

반응형

'Java' 카테고리의 다른 글

Java 패키지  (0) 2024.08.27
Java 오버로딩 & 오버라이딩  (0) 2024.08.27
Java 생성자  (0) 2024.08.26
Java 컬렉션  (0) 2024.08.26
자바 기초 자료 모음  (1) 2024.08.09