public class Main {
public static void main(String[] args) {
사람 a사람 = new 사람();
}
}
class 사람 {
}
위의 코드는 사람이라는 클래스를 하나 만들었다 그리고 사람이라는 객체를 만들었다고 보면 된다.
지금 사람 a사람 = new 사람() 이라는 코드를 작성해서 사람이라는 객체를 하나 만들었다.
여기에서 a사람은 사람 클래스의 인스턴스라고 생각하면 된다.
저 사람 클래스에 무수한 인스턴스를 만들 수 있다 뭐 예를 들면 사람이라는 것을 전부 쓰면 된다.
예를 들면 사람 변호사 = new 사람 이 될 수도 있고
사람 의사 = new 사람 이 될 수도 있고 기타 등등 되게 많은 것들이 있다.
public class Main {
public static void main(String[] args) {
사람 a사람 = new 사람();
}
}
class 사람 {
String name;
}
이번에는 사람 클래스에 String name 이라는 변수를 추가 했는데 이것을 객체 변수라고 한다.
객체 변수는 인스턴스 변수, 멤버 변수, 속성 이라고도 하는데 수업 때 주로 사용한 단어는 인스턴스 변수라고 했었다.
* 클래스에 의해서 생성되는 것은 객체이고 그 클래스에 선언된 변수는 인스턴스 변수라고 생각하면 된다.
그리고 이제 이 인스턴스 변수는 변수이므로 당연히 값을 넣을 수 있다 그리고 그 값을 넣어서 활용할 수 있다.
예를 들면
public class Main {
public static void main(String[] args) {
사람 a사람 = new 사람();
a사람.name = "김철수";
System.out.println(a사람.name);
}
}
class 사람 {
String name;
}
public class Main {
public static void main(String[] args) {
사람 a사람 = new 사람();
System.out.println(a사람.name);
}
}
class 사람 {
String name = "홍길동";
}
위의 코드 처럼 활용해서 사람 객체에다가 name인 김철수를 넣어서 활용할 수 있다.
근데 인스턴스 변수에다가 값을 넣는 방법이 위의 코드 처럼 넣을 수 있지만 변수 선언하면서 바로 값을 넣고도 사용할 수 있다.
아래 조금 띄어서 쓴 코드 처럼 클래스 자체의 인스턴스 변수에다가 값을 넣어 출력을 해도 활용을 할 수 있다.
클래스에는 객체 변수와 더불어 메소드(Method)라는 것이 있다. 메소드는 클래스 내에 구현된 함수를 의미하는데 보통 함수라고 말하지 않고 메소드라고 말한다.
public class Main {
public static void main(String[] args) {
사람 a사람 = new 사람();
System.out.println(a사람.name);
}
}
class 사람 {
String name = "홍길동";
public void setName (String name) {
this.name = name;
}
}
위의 코드는 setName이라는 메소드를 하나 만들었다고 보면 된다.
그냥 public void setName () {} 의 형태이며 위의 코드에서는 String name으로 해서 name 값을 받아온거라고 보면 된다.
다만 return인 출력이 값이 없는 상태라고 보면 되며 입력값인 name 값만 받아온 상태이다.
이 메소드를 호출 하는 방법에 대해서 먼저 알아보자. 객체 변수에 접근하기 위해서 객체.변수 와 같이 도트연산자(.)로 접근할 수 있었던 것과 마찬가지로 객체가 메소드를 호출하기 위해서는 객체.메소드 로 호출해야 한다.
public class Main {
public static void main(String[] args) {
사람 a사람 = new 사람();
a사람.setName("김철수");
System.out.println(a사람.name);
}
}
class 사람 {
String name = "홍길동";
public void setName (String name) {
this.name = name;
}
}
위에서 말한 것 처럼 메소드를 호출하기 위해서는 객체.메소드로 호출을 해야하기 때문에 객체인 a사람.setName() 을 통해서
메소드를 호출한거라고 보면 된다, 그리고 setName의 값에 김철수를 넣어서 String name의 값인 홍길동은 묻혔다.
사실 묻혔다고 표현하는 것 보다는 String name 인 인스턴스 변수에다가 홍길동이라는 값을 주었지만
this.name = name이 중요하다 setName 이라는 메서드에 this.name = name 이라는 코드를 작성함으로써
객체.메서드로 김철수를 줬으니 김철수라고 출력이 나온거라고 보면 된다 여기에서 중요한 건 this 라는 코드인데
setName 메소드 내부에 사용된 this는 사람 클래스에 의해서 생성된 객체를 지칭한다. 만약 사람 a사람 = new 사람() 과 같이 a사람이라는 객체를 만들고 a사람.setName("김철수") 와 같이 a사람 객체에 의해 setName 메소드를 호출하면 setName 메소드 내부에 선언된 this는 바로 a사람 객체를 지칭한다.
public class Main {
public static void main(String[] args) {
사람 a사람 = new 사람();
a사람.setName("김철수");
System.out.println(a사람.name);
사람 변호사 = new 사람();
변호사.setName("김변호사");
System.out.println(변호사.name);
}
}
class 사람 {
String name = "홍길동";
public void setName(String name) {
this.name = name;
}
}
위의 코드를 보면 똑같이 사람이라는 클래스지만 변호사라는 새로운 객체를 만들어서 setName 메서드를 활용했다
위와 같이 하게 되면 출력값은 김철수,김변호사가 나오게 될거다
이런것처럼 같은 클래스 내에서 객체를 새롭게 만들어도 굳이 새로 메서드를 만들 필요 없이 하나의 메서드만 만들어도
그 메서드를 같이 활용을 할 수 있다고 보면 된다.
단, 인스턴스 변수들은 서로 공유가 되지 않는다는 점을 알자!
'Java' 카테고리의 다른 글
| 나 혼자 공부하는 자바 (객체 값 받는 법) (0) | 2022.10.04 |
|---|---|
| 나 혼자 자바 공부하기 (메소드 알아보기) (1) | 2022.10.04 |
| 2022-09-30 자바 (최대값 구하기) (0) | 2022.09.30 |
| 2022-09-30 자바(숫자만 뽑은 후 더하기) (1) | 2022.09.30 |
| 2022-09-16 자바 (1) | 2022.09.16 |
댓글