국비교육(22-23)

13일차(5)/java(6) : 객체의 field, method 호출 실습

서리/Seori 2022. 10. 24. 23:10

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개의 사각형 객체로 불러와 본 모습