언어/Java

Java 객체 속성 설정 관련 공부

JM Lee 2024. 4. 6. 22:10
728x90

https://wikidocs.net/214

 

05-02 클래스

이 책에서는 클래스에 대한 개념적인 설명을 하기보다는 가장 간단한 클래스를 작성하는 것에서부터 시작하여 조금씩 클래스의 규모를 키워 가며 설명할 것이다. [TOC] ## 클래…

wikidocs.net

위 단계를 공부하다가 문득 신기한 생각이 들어 정리해보았다. 사이트를 보면 아래와 같은 코드가 있다.

class Animal {
    String name;

    public void setName(String name) {
        this.name = name;
    }
}

public class Sample {
    public static void main(String[] args) {
        Animal cat = new Animal();
        System.out.println(cat.name);
    }
}

 

이 중 this.name = name;이란 것이 궁금해서 Python으로 변환을 해보았다.

변환하니 아래와 같이 변환되었다.

def __init__(self):
    self.name = None

 

* 필자는 파이썬을 먼저 공부한 상태여서 파이썬과 비교해보며 공부하였다.

 

파이썬에서 클래스의 __init__ 메서드는 클래스의 생성자와 같은 역할을 한다. 따라서 __init__ 메서드 내부에서 객체의 속성을 초기화할 때 사용된다.

self.name = None은 객체의 name 속성을 초기화하는 부분이다. 파이썬에서는 클래스의 속성을 직접 정의할 때 해당 속성을 self를 통해 정의한다. 이렇게 함으로써 객체를 생성할 때 속성을 초기화할 수 있다.

따라서, def __init__(self):에서 void를 출력하는 것이 아니라 객체의 초기 상태를 설정하는 것이다.

 

자바에서 this.name = name;은 생성자나 메서드 내에서 매개변수로 전달받은 값을 객체의 속성에 할당하는 일반적인 방법이다. 이것은 생성자 또는 메서드가 호출될 때 전달된 매개변수 값을 객체의 속성에 할당하여 객체의 초기 상태를 설정하는 데 사용된다.

자바에서는 명시적으로 초기화하지 않은 멤버 변수들은 해당 타입의 기본값으로 초기화된다. 예를 들어, String 타입의 멤버 변수인 name은 null로 초기화된다. 그러나 생성자 또는 메서드를 통해 매개변수로 전달된 값으로 이를 덮어쓸 수 있다.

따라서 자바에서 this.name = name;을 사용하여 객체의 속성을 초기화하는 것은 객체를 생성하고 속성을 초기화하는 일반적인 방법 중 하나다.

 

Q : this.name = name;과 this.name = Null;의 차이는?

 

  1. this.name = name;: 이 코드는 객체의 name 속성을 해당 객체를 생성할 때 전달된 값으로 설정한다. 즉, 매개변수 name에 전달된 값으로 객체의 name 속성이 초기화된다. 따라서 전달된 값이 무엇이든 해당 객체의 name 속성으로 설정된다.
  2. this.name = null;: 이 코드는 객체의 name 속성을 null로 설정한다. null은 자바에서 아무런 값도 없음을 나타내는 특별한 상태다. 이 코드를 사용하면 객체의 name 속성을 명시적으로 비워둘 수 있다.

요약하면, 전자는 객체의 속성을 생성자나 메서드에 전달된 값으로 초기화하는 것이며, 후자는 객체의 속성을 명시적으로 비우는 것이다.

'언어 > Java' 카테고리의 다른 글

[JAVA] 스레드  (0) 2024.04.13
[Java] record  (0) 2024.04.12
[Java] JVM 개요  (0) 2024.04.11
Java static  (0) 2024.04.07
[Java] 추상 클래스란?  (0) 2024.04.07