Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- ring counter
- vivado
- test bench
- prescaling
- Edge Detector
- soc 설계
- KEYPAD
- half adder
- java
- Linked List
- LED
- D Flip Flop
- gpio
- structural modeling
- DHT11
- i2c 통신
- stop watch
- pwm
- uart 통신
- Recursion
- verilog
- behavioral modeling
- atmega 128a
- Pspice
- BASYS3
- dataflow modeling
- ATMEGA128A
- FND
- Algorithm
- hc-sr04
Archives
- Today
- Total
거북이처럼 천천히
Java - 클래스 정리 (3) 본문
package Chapter2;
public class Code01 {
public static void main(String[] args) {
PersonInfo person1 = new PersonInfo();
person1.name = "Chirs";
person1.phoneNumber = "010-1234-5678";
System.out.printf("Before => name: %s, phone: %s \n", person1.name, person1.phoneNumber);
PersonInfo person2 = person1;
person1.name = "David";
System.out.printf("After => name: %s, phone: %s \n", person2.name, person2.phoneNumber);
}
}
- PersonInfo (사용자 정의) 타입의 person1 객체는 이름은 "Chris", 전화번호는 "010-1234-5678" 데이터를 담고 있는 이름없는 객체의 주소(참조) 정보를 담고 있다.
- 이번에는 새로운 PersonInfo (사용자 정의) 타입의 person2 객체를 생성하고, 대입 연산자와 함께 PersonInfo person2 = person1 이라고 작성하였다.
- PersonInfo person2 = person1 → person1 객체가 가르키고 있는 주소(참조) 정보를 person2 객체에 복사 붙어넣기
- 따라서 person2 또한 이름은 "Chris", 전화번호는 "010-1234-5678" 데이터를 담고 있는 이름없는 객체를 가르키고 있어 person2를 통해서도 데이터에 접근 및 수정이 가능하다.
package Chapter2;
public class Code01 {
public static void main(String[] args) {
PersonInfo person1 = new PersonInfo();
person1.name = "Chirs";
person1.phoneNumber = "010-1234-5678";
PersonInfo person2 = person1;
PersonInfo[] people = new PersonInfo[100];
people[0] = person1;
people[1] = person2;
System.out.printf("name: %s, phone: %s \n", people[0].name, people[0].phoneNumber);
System.out.printf("name: %s, phone: %s \n", people[1].name, people[1].phoneNumber);
}
}
- PersonInfo 타입으로 100개의 사이즈를 갖는 people 객체 배열을 생성하였다.
- people 배열의 각각의 원소들도 PersonInfo 타입인 동시에 데이터를 담고 있는 것이 아닌 이름과 전화번호를 갖고 있는 객체의 주소(참조)를 갖고있다.
- 따라서 각각의 원소들은 주소(참조) 정보를 갖고 있는 것이다. (= 각각의 원소들은 참조 변수가 된다.)
배열 생성 분석 (Primitive 타입 배열)
int형 배열을 생성하는 방법은 다음과 같다.
int[] numbers = new int[8];
위 코드를 분석해보자.
- 먼저, int형 배열인 int[ ]은 primitive 타입이 아니다.
- 따라서 numbers 변수는 정수형 배열로, primitive 타입이 아니기 때문에 참조 변수이다.
즉, numbers 자체가 배열이 아니라 배열의 주소를 저장하는 참조 변수이다. - new int[8] 은 new 명령어에 의해서 생성된 배열 형태의 객체이다.
- 그리고, numbers는 배열의 시작점의 주소를 저장하고 있는 참조 변수이다.
- 배열의 각각의 원소들은 정수형 변수(int형 변수), primitive 타입 변수인 것이다.
배열 생성 분석 (사용자 정의 타입 배열)
이번에는 아래와 같이 코드를 작성해 보았다.
public class Code01 {
public static void main(String[] args) {
PersonInfo person1 = new PersonInfo();
person1.name = "Chris";
person1.phoneNumber = "010-1234-5678";
PersonInfo[] people = new PersonInfo[100];
people[0] = person1;
System.out.printf("peron1, name: %s, phoneNumber: %s\n", people[0].name, people[0].phoneNumber);
people[1].name = "David";
people[1].phoneNumber = "011-7895-1452";
System.out.printf("peron2, name: %s, phoneNumber: %s\n", people[1].name, people[1].phoneNumber);
}
}
위 코드를 분석하면
- PersonInfo 타입의 배열을 생성하여 people이라는 객체명을 정했다. 사이즈 100이다.
- 그리고, 첫 번째 원소에 person1 참조 변수를 복사하였다.
- 두 번째 원소의 name과 phoneNumber를 각각 David, 011-7895-1452이라고 수정하였다.
- 하지만, people[1].name과 people[1].phoneNumber에서 오류가 발생하였다.
무엇이 문제인가?
- people 객체는 PersonInfo 타입이며, 배열 형태의 객체이다.
- people 객체는 PersonInfo 타입의 배열 주소(참조)를 담고 있으며, 배열 원소들 또한 PersonInfo 타입이기 때문에 객체의 주소(참조)를 담고 있다.
- 그런데, 두 번째 원소는 아직 객체가 생성되지 않은 상태이기 때문에 null 값이 들어가 있다.
- 그런 상태에서 name과 phoneNumber를 수정하려고 하니까 오류가 발생한 것이다.
그럼 해결책은 무엇인가?
- 두 번째 원소는 아직 객체가 생성되지 않은 상태이기 때문에 new 명령어를 이용하여 객체를 생성한다.
- 그 다음에 name과 phoneNumber를 수정하자.
public class Code01 {
public static void main(String[] args) {
PersonInfo person1 = new PersonInfo();
person1.name = "Chris";
person1.phoneNumber = "010-1234-5678";
PersonInfo[] people = new PersonInfo[100];
people[0] = person1;
System.out.printf("peron1, name: %s, phoneNumber: %s\n", people[0].name, people[0].phoneNumber);
people[1] = new PersonInfo();
people[1].name = "David";
people[1].phoneNumber = "011-7895-1452";
System.out.printf("peron2, name: %s, phoneNumber: %s\n", people[1].name, people[1].phoneNumber);
}
}
peron1, name: Chris, phoneNumber: 010-1234-5678
peron2, name: David, phoneNumber: 011-7895-1452
Reference
- Java로 배우는 자료 구조, 권오흠
'Back-end > Java 개념' 카테고리의 다른 글
Java - 메서드와 생성자(2) (0) | 2022.06.30 |
---|---|
Java - 클래스 정리 (4) (0) | 2022.06.27 |
Java - 클래스 정리 (2) (0) | 2022.06.26 |
Java - 클래스 정리 (1) (0) | 2022.06.26 |
Java - 변수 선언 위치에 따른 변수 구분 (0) | 2022.06.26 |