Java/[inflearn] 자바 기본

[김영한_자바기본][2. 기본형과 참조형] (보충) 메서드에 객체 전달 / 메서드에서 객체 반환 / NullPointerException (p.16-20, p.26-29)

줌인. 2024. 2. 15. 11:32

▶ 1. 클래스와 데이터 : 클래스 생성 + 클래스의 이해

https://zoooom-in.tistory.com/65

 

[김영한_자바기본][1.클래스와 데이터] (보충) 배열 / 클래스 생성 / 배열 + 클래스 이해 (p.14, p.17,

▶ 배열의 선언과 생성 이해 https://zoooom-in.tistory.com/44 [김영한_자바입문][9.배열] 배열의 선언과 생성 이해하기 (p.2-7) 배열 선언은 아파트 부지 확보, 생성은 몇 개의 아파트를 확보할 것인지 배열

zoooom-in.tistory.com

 

[BigData / Data 코드] Java에서 클래스의 멤버 변수는 선언 시에만 초기화할 수 있다

public class BigData {

    Data data = new Data();

    Data data2; //null값
    data2 =  new Data();
}

- 클래스의 멤버 변수인 data는 선언과 동시에 객체를 생성할 수 있다.

- 하지만 data2와 같이 클래스의 멤버 변수를 선언한 후에 다른 위치에서 객체를 생성하는 것은 불가하다.

 

[해결방법1] 생성자 생성

public BigData() {
    data2 = new Data();
}

- 생성자 : 초기 객체값 부여

 

[해결방법2] 객체 생성과 동시 초기화

Data data2 =  new Data();

 

 


 

▶ 기본형 / 참조형 - 메서드 이해

https://zoooom-in.tistory.com/49

 

[김영한_자바기본][2.기본형과 참조형] (보충) 기본형 / 참조형 - 메서드, 문제 풀이 해석 (p.11-20, p.

▶ 기본형과 참조형 이해 https://zoooom-in.tistory.com/45 [김영한_자바기본][2.기본형과 참조형] 기본형 / 참조형 이해 (p.1-6) 참조값에 접근한다는 것은 설계도와 부지 위치에 접근해서 같이 공동 작업

zoooom-in.tistory.com

▶기본형 / 참조형 이해

https://zoooom-in.tistory.com/45

 

[김영한_자바기본][2.기본형과 참조형] 기본형 / 참조형 이해 (p.1-6)

참조값에 접근한다는 것은 설계도와 부지 위치에 접근해서 같이 공동 작업을 하는 것이다. 기본형은 실제 값이 저장되어 독립적으로 관리되지만, 참조형은 변수에는 객체 위치(참조값)가 저장

zoooom-in.tistory.com

 

  * 객체 전달 : 메서드 매개변수로 객체를 전달해 메서드 내부에서 객체의 상태를 변경/활용할 수 있다.
   이는 객체 참조를 전달하므로, 메서드에서의 변경이 호출자에게 영향을 미친다.

* 객체 반환 : 메서드에서 생성 or 초기화한 객체를 반환하며,
이는 호출자가 변수에 할당하거나 직접 활용할 수 있다.

 

 

[p.17 / Method1] 메서드 매개변수에 객체 전달

public class Method1 {
    public static void main(String[] args) {
        Student student1 = new Student();
        inputData(student1, "학생1", 15,90);

        Student student2 = new Student();
        inputData(student2, "학생2", 16, 80);

        printData(student1);
        printData(student2);
    }
    
    public static void inputData(Student student, String name, int age, int grade) {
        student.name = name;
        student.age = age;
        student.grade = grade;
    }
    
    public static void printData(Student student) {
        System.out.println("이름 : " + student.name + ", 나이 : " + student.age + ", 성적 : " + student.grade);
    }
}

- 매서드 매개변수는 멤버변수이기도 하며, 외부에서 호출된 데이터를 사용한다.

 

[p.17 / Method1_메서드 발췌] 메서드 매개변수에 객체 참조값 전달

public static void inputData(Student student, String name, int age, int grade) {
    student.name = name;
    student.age = age;
    student.grade = grade;
}

- 객체 참조값을 기반으로 메서드 내에서 해당 객체의 멤버 변수를 조작할 수 있다. 

- 참조값 기반 name 데이터 입력

- name은 지역변수 name 사용 : 즉 외부에서 호출한 내용이 전달됨

 

*메서드 객체 참조값 전달 도식화

 

 

 

[p.17 / Method2] 메서드에서 객체 생성 및 초기화 후 반환

public class Method2 {
    public static void main(String[] args) {
        Student student1 = inputData("학생1", 15,90);
        Student student2 = inputData("학생2", 16, 80);

        printData(student1);
        printData(student2);
    }
    public static Student inputData(String name, int age, int grade) {
        Student student = new Student();
        student.name = name;
        student.age = age;
        student.grade = grade;
        return student;
    }
    public static void printData(Student student) {
        System.out.println("이름 : " + student.name + ", 나이 : " + student.age + ", 성적 : " + student.grade);
    }
}

- 기존 new Student 객체 생성을 동일하게 유지하기 때문에 동일한 위치에 호출자를 넣고, 변수에 저장한다.

- Student 타입을 반환하는 메서드를 생성하고, 내부에서 Student 타입 객체를 생성한다.

- 객체에 내부 데이터를 담고(초기화하고), 객체의 참조값(위치)를 반환한다.

- 반환한 데이터를 Student 타입의 변수에 저장한다.

 

*메서드 내부 객체 생성/초기화 후 반환 도식화

 

 


 

 

객체 생성은 main과 무관하게 클래스내에서 언제든지 사용할 수 있다.
또한, 타입을 지정하고 멤버변수 내에서만 사용할 경우 초기값은 자동으로 null이 지정되며,

내부적으로 접근해야할 경우 객체 생성을 만들 수 있는 코드를 작성해야 한다.

 

▶ NullPointerException 이해

https://zoooom-in.tistory.com/50

 

[김영한_자바기본][2.기본형과 참조형] Null/NullPointerExcepiton 이해 (p.23-29)

null은 가리키는 대상이 없거나, 나중에 입력하고 싶을때 사용된다. nullPointerException은 null이 없는 곳(참조 주소가 없음)을 찾아갈 때 발생한다. NullPointerException 이해하기 [p.23 / Data 클래스] public cla

zoooom-in.tistory.com

 

[p.29 / NullMain4] NullPointerException 이해

public static void main(String[] args) {
    BigData bigData = new BigData();
    bigData.data = new Data();
    System.out.println("bigData.count = " + bigData.count);
    System.out.println("bigData.data = " + bigData.data); // null

    //System.out.println("bigData.data.value = " + bigData.data.value);
}

 

[p.28 / BigData] Data 클래스를 가져오긴 했으나, 아무런 값도 입력하지 않아 null로 표기됨

public class BigData {

    Data data;
    int count;
}

- Data 클래스 기반으로 Data타입의 변수를 생성하긴 했으나, 해당 변수에 어떠한 표기도 없기에 초기값 null로 설정된다.

 

 

[p.28 / BigData_보완]  Null해결 방법① : BigData클래스에 Data 객체 생성 

Data data = new Data();

- 클래스 내에서 main 메서드를 사용하지 않고도 객체 생성이 가능하다.

- main 메서드는 Java 프로그램의 시작점이지만, 객체 생성은 main 메서드와는 독립적으로 클래스 내에서

 언제든지 할 수 있다.

 

[p.29 / NullMain4] Null해결 방법② : Main에서 BigData에 접근해 Data 객체 생성 

public static void main(String[] args) {
    BigData bigData = new BigData();
    bigData.data = new Data();
    System.out.println("bigData.count = " + bigData.count);
    System.out.println("bigData.data = " + bigData.data); // null
    System.out.println("bigData.data.value = " + bigData.data.value);
}

 

*Data와 BigData의 상관성 도식화 : BigData → Data 접근 가능

 

728x90