푸들푸들

[JAVA] 기본형, 참조형 본문

SELF-STUDY

[JAVA] 기본형, 참조형

COCO_develop 2025. 3. 25. 21:53

기본형

변수에 사용할 값을 직접 넣을 수 있는 데이터 타입

해당 값 바로 사용 가능, 연산 가능

소문자로 시작(int, long, double, boolean)

 

참조형

데이터에 접근하기 위한 참조(주소, 참조값)를 저장하는 데이터 타입

객체(.), 배열([ ])에 사용됨

기본형을 제외한 나머지 모두

String - 클래스

 

 

변수 대입

대원칙 = 자바는 항상 변수의 값을 복사해서 대입한다.

기본형: 해당 값 복사

참조형: 참조값만 복사됨

package ref;

public class Data {
 int value;
}
Data dataA = new Data();
dataA.value = 10;
Data dataB = dataA;

System.out.println("dataA 참조값=" + dataA);
System.out.println("dataB 참조값=" + dataB);
System.out.println("dataA.value = " + dataA.value);
System.out.println("dataB.value = " + dataB.value);

변수에 들어있는 참조값만 복사해서 전달

>결과

dataA = ref.Data@x001
dataB = ref.Data@x001
dataA.value = 10
dataB.value = 10

 

 

메서드 호출

메서드 호출할 때 사용하는 매개변수(파라미터) => 변수

값 복사해서 전달

package ref;
public class MethodChange2 {
     public static void main(String[] args) {
         Data dataA = new Data();
                dataA.value = 10;
         System.out.println("메서드 호출 전: dataA.value = " + dataA.value);
         changeReference(dataA);
         System.out.println("메서드 호출 후: dataA.value = " + dataA.value);
    }
    static void changeReference(Data dataX) {
         dataX.value = 20;
    }
 }

> 결과

메서드 호출 전: dataA.value = 10
메서드 호출 후: dataA.value = 20

 

- 기본형: 메서드로 기본형 데이터를 전달하면, 해당 값이 복사되어 전달됨. 메서드 내부에서 매개변수 값을 변경해도, 호출자의 변수 값에는 영향X

- 참조형: 메서드로 참조형 데이터를 전달하면, 참조값이 복사되어 전달됨. 메서드 내부에서 매개변수로 전달된 객체의 멤버 변수를 변경하면, 호출자의 객체도 변경됨

 

 

ex. 학생정보 출력 - 메서드 활용

package ref;

public class Method1 {
    public static void main(String[] args) {
        Student student1 = new Student(); // x001
        initStudent(student1, "학생1", 15, 90);
        Student student2 = new Student(); // x002
        initStudent(student2, "학생2", 16, 80);
        printStudent(student1);
        printStudent(student2);
    }
    static void initStudent(Student student, String name, int age, int grade) {
        student.name = name;
        student.age = age;
        student.grade = grade;
    }
    static void printStudent(Student student1) {
    	System.out.println("이름:" + student1.name + " 나이:" + student1.age + " 성적:" + student1.grade);
}
}

-> 코드 중복 줄이기

package ref;
public class Method2 {
 	public static void main(String[] args) {
        Student student1 = createStudent("학생1", 15, 90); //메서드 호출 후 결과 반환
        Student student2 = createStudent("학생2", 16, 80);
        printStudent(student1);
        printStudent(student2);
    }
 	static Student createStudent(String name, int age, int grade) {
       Student student = new Student(); // x001
       student.name = name;
       student.age = age;
       student.grade = grade;
       
       return student; // x001
    }
    static void printStudent(Student student1) {
         System.out.println("이름:" + student1.name + " 나이:" + student1.age + " 성적:" + student1.grade);
    }
 }

return = 매서드 호출 결과 반환

 

'SELF-STUDY' 카테고리의 다른 글

[JAVA] 절차 지향, 객체 지향 프로그래밍  (2) 2025.03.26
[JAVA] 변수와 초기화  (1) 2025.03.25
[JAVA] 클래스, 객체  (0) 2025.03.20
[IntelliJ] Window 단축키  (0) 2025.03.13
Join과 Subquery  (0) 2025.02.21