위 단계를 공부하다가 문득 신기한 생각이 들어 정리해보았다. 사이트를 보면 아래와 같은 코드가 있다.
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;의 차이는?
- this.name = name;: 이 코드는 객체의 name 속성을 해당 객체를 생성할 때 전달된 값으로 설정한다. 즉, 매개변수 name에 전달된 값으로 객체의 name 속성이 초기화된다. 따라서 전달된 값이 무엇이든 해당 객체의 name 속성으로 설정된다.
- 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 |