13일차(5)/java(6) : 객체의 field, method 호출 실습
- 객체의 field, method를 사용하는 실습
test.main 안에 MainClass03, test.mypac 안에 Member이라는 새 클래스 생성.
<Member>
package test.mypac;
public class Member {
//번호를 저장할 필드
public int num;
//이름을 저장할 필드
public String name;
//주소를 저장할 필드
public String addr;
//메소드
public void showInfo() {
//필드에 저장된 내용을 활용해서 정보를 출력하기
System.out.println("번호:"+this.num+", 이름:"+this.name+", 주소:"+this.addr);
}
}
<MainClass03>
package test.main;
import test.mypac.Member;
/*
* 1.한명의 회원정보를 담을 수 있는 객체를 생성할 Member 클래스를 test.mypac 패키지에 만들어 보세요.
*
* 회원 한명의 정보는 번호, 이름, 주소로 이루어져 있다.
* 따라서 3개의 필드를 적당한 데이터 type을 선언해서 만들어야 한다.
*/
public class MainClass03 {
public static void main(String[] args) {
//2. Member 클래스로 객체를 생성해서(new Member()) 참조값을 m1이라는 지역변수에 담아 보세요.
Member m1=new Member();
//3. m1에 담긴 참조값을 이용해서 1, 바나나, 서울이라는 정보를 객체에 저장해 보세요.
m1.num=1;
m1.name="바나나";
m1.addr="서울";
/*
* 비슷한 작업을 javascript로 한다면?
*
* let m1={};
* m1.num=1;
* m1.name="바나나";
* m1.addr="서울";
*
* or
*
* let m1={num:1, name:"바나나", addr="서울"};
*/
//2, 딸기, 부산이라는 회원정보도 Member 객체에 담아보기
Member m2=new Member();
m2.num=2;
m2.name="딸기";
m2.addr="부산";
//m1 안에 있는 참조값을 이용해서 콘솔창에 바나나의 정보를 아래와 같은 형식으로 출력해 보세요.
//번호:1, 이름:바나나, 주소:서울
System.out.println("번호:"+m1.num+", 이름:"+m1.name+", 주소:"+m1.addr);
}
}
- non-static method 사용법 (참조값 사용)
- new member(); 하면 heap영역에 num, name, addr 저장소가 만들어진다. (각각 int, str, str)
- 다른 회원이 있으면 똑같은 모양의 객체를 또 만들면 된다.(단, 각각의 참조값은 다르다.)
- 설계도를 하나 만들어놓고 필요할 때마다 new로 가져다가 쓰는 것.
→ 이런 경우에는 static으로 만들면 안 된다!
- 메소드를 꼭 만들어야하는건 아닌다. 필드만 선언해도 된다!
- m1 뒤에 . 을 찍으면 Member 클래스에 선언해 둔 필드와 데이터타입이 뜬다.
- m1.num=" " 안에 값을 넣어주면 된다.
- 디버깅을 처음 할 때는 이렇게 보이는데,
- step over로 진행해보면 참조값이 대입되며 값이 바뀌는 것을 확인할 수 있다.
- member 하나 더 추가하기. new를 하나 더 추가해서 m2를 만들어준다.
- 같은 new를 사용했지만 다른 사용자 정보! m1과 m2의 참조값이 다른 것 확인하기.
Member라는 클래스를 불러올 때마다 다른 참조값이 부여된다.(non-static)
let m1={};
m1.num=1;
m1.name="바나나";
m1.addr="서울";
or
let m1={num:1, name:"바나나", addr="서울"};
- javascript 라면 위와 같이 그냥 변수를 선언하고 바로 넣었을 내용을
java는 들어갈 수 있는 데이터타입을 정해서 클래스 설계부터 해야한다.(좀더 문법이 까다롭기 때문에...)
- Member 클래스에서 new Member(); 로 호출할 경우,
heap영역에는 field 3개 method 1개가 만들어진다.
- 객체의 참조값을 this라고 한다.(설계 단계에서는 아직 무엇일지는 알 수 없고, new를 해봐야만 알 수 있다.)
<MainClass04> : Member의 필드,메소드 호출하기
package test.main;
import test.mypac.Member;
public class MainClass04 {
public static void main(String[] args) {
//1.Member 객체를 생성해서
Member m1=new Member();
//2.회원 한명의 정보를 담고
m1.num=1;
m1.name="바나나";
m1.addr="서울";
//3.showInfo() 메소드를 호출해 보세요.
m1.showInfo();
}
}
public void showInfo() {
System.out.println("번호:"+this.num+", 이름:"+this.name+", 주소:"+this.addr);
}
- Member 클래스에 위와 같은 메소드를 생성하여 MainClass 에서 호출.
- MainClass04에서는 new Member로 선언해둔 m1을 사용하여 m1.showInfo(); 로 출력한다!
- 빨간색은 필드(값), 파란색은 메소드(함수).
- 필드와 메소드를 확인하고 구분하기! 콘솔창에 나오는 내용도 확인.
- 사각형의 넓이를 계산하는 Rect 클래스 생성하여 호출하기
<MainClass05>
package test.main;
import test.mypac.Rect;
/*
* test.mypac 패키지에 Rect 라는 이름의 클래스를 만들고자 한다.
* 해당 클래스로 객체를 생성하고
* 사각형의 폭과(width), 높이(height)를 필드에 대입하고
* showArea()를 호출하면 사각형의 넓이가 콘솔창에 출력될 수 있도록
* Rect 클래스를 설계해 보세요.
*/
public class MainClass05 {
public static void main(String[] args) {
Rect rect1=new Rect();
rect1.width=5;
rect1.height=10;
rect1.showArea();
}
}
<Rect>
package test.mypac;
public class Rect {
public int width;
public int height;
public void showArea() {
System.out.println(width*height);
}
}
- width, height는 int 타입의 필드, showArea는 넓이값을 계산하여 콘솔에 출력하는 메소드!
package test.mypac;
public class Rect {
//필드 2개
public int width;
public int height;
//메소드
public void showArea() {
//필드에 있는 값을 활용해서 면적을 계산한다.
int area = this.width * this.height;
System.out.println("면적은:" +area+" 입니다.");
}
}
- 위와 같은 내용. 이렇게 작성할 수도 있다.(변수에 대입)
<Rect대입하는 MainClass>
package test.main;
import test.mypac.Rect;
public class MainClass06 {
public static void main(String[] args) {
//폭과 높이가 10, 20인 사각형 객체
Rect r1=new Rect();
r1.width=10;
r1.height=20;
r1.showArea();
//폭과 높이가 5,10인 사각형 객체
Rect r2=new Rect();
r2.width=5;
r2.height=10;
r2.showArea();
}
}
- r1, r2라는 가상의 2개의 사각형 객체로 불러와 본 모습
'국비교육(22-23)' 카테고리의 다른 글
14일차(2)/java(8) : Method (0) | 2022.10.25 |
---|---|
14일차(1)/java(7) : class / static, non-static / eclipse에서 git으로 관리하기 (0) | 2022.10.25 |
13일차(4)/java(5) : class, field, method / static method (0) | 2022.10.24 |
13일차(3)/java(4) : Operator (0) | 2022.10.24 |
13일차(2)/java(3) : DataType, 객체지향 언어 (0) | 2022.10.24 |