본문 바로가기
  • 평범한 나의 개발공부 일지
개발자 수강노트/Java /Spring

수강노트 - 자바 클래스 선언 및 호출 (5)

by 블랑 블랑 2022. 7. 31.
반응형
package kr.or.ksmart.A;

public class AA01 {

	public static void main(String[] args) {
		user u01 = new user();
		user u02 = new user();
		System.out.println(u01 + " <-u01.uid 01");
		System.out.println(u01.getUid() + " <-u01.uid 02");
		u01.setUid("id001");
		System.out.println(u01.getUid() + " <-u01.uid 03");

	}
	
	
}

User.java

package kr.or.ksmart.A;

//User(회원관리 클래스 틀)
public class user {
//field(필드) = Member = Member field 
//전역변수(global variable)
//프로퍼티(property)
	private String uid;
	private String upw;
	private String uphone;
	private char ugender;
	private int uage;
	private String ulevel;
	
//셋팅(setting)하는 메서드 선언
	public void setUid(String aa) {
		System.out.println(aa + " <-aa setUid User.java");
	}
//겟팅(getting)하는 메서드 선언
	public String getUid() {
		System.out.println(uid + " <-uid getUid User.java");
		return uid;
	}
}

AA01.java

 

두개의 클래스(AA01, User) 생성하고

AA01클래스를 실행


<결과>

kr.or.ksmart.A.user@2401f4c3 <-u01.uid 01

null <-uid getUid User.java

null <-u01.uid 02

id001 <-aa setUid User.java

null <-uid getUid User.java

null <-u01.uid 03


4,5번째줄 결과가 null이 출력된 이유는

u01 객체참조변수에 값을 셋팅하는 처리과정이 없기 때문이다.

public void setUid(String aa) {
		System.out.println(aa + " <-aa setUid User.java");
		uid = aa;

uid = aa; 와 같은 셋팅하는 처리과정을 추가해준다.


결과

kr.or.ksmart.A.user@2401f4c3 <-u01.uid 01

null <-uid getUid User.java

null <-u01.uid 02

id001 <-aa setUid User.java

id001 <-uid getUid User.java

id001 <-u01.uid 03


이와같이 null값이 "id001"로 셋팅된 결과값이 나온다.

만약,

public void setUid(String aa) {
		System.out.println(aa + " <-aa setUid User.java");
		uid = aa;

에서

매개변수 aa가 uid로 바뀐다면 (매개변수=전역변수)

public void setUid(String uid) {
		System.out.println(uid + " <-uid setUid User.java");
		uid = uid;

결과

kr.or.ksmart.A.user@2401f4c3 <-u01.uid 01

null <-uid getUid User.java

null <-u01.uid 02

id001 <-uid setUid User.java

null <-uid getUid User.java

null <-u01.uid 03


다시 4,5번째줄에 null값이 나오게 된다.

이유는

전역변수와 매개변수 포함 지역변수가 이름이 같으면 ( uid=uid)

왼쪽에있는 uid는 전역변수를 가르키는게아니라 지역변수를 가르키는걸로 인식이 된다.

그렇기 때문에 전역변수( private String uid = null) 값이 변화되지 않은 상태로 종료가 된다.

해결하기 위해서는

전역변수앞에 this. 를 붙여주어 매개변수 포함 지역변수 구분을 해주면 된다.

 
	public void setUid(String uid) {
		System.out.println(uid + " <-uid setUid User.java");
		this.uid = uid;​

결과

kr.or.ksmart.A.user@2401f4c3 <-u01.uid 01

null <-uid getUid User.java

null <-u01.uid 02

id001 <-uid setUid User.java

id001 <-uid getUid User.java

id001 <-u01.uid 03


전역변수 uid에 "id001"값이 셋팅이 되어 이와같이 출력이 된다.

/응용/

아래와같은

AA01클래스,User클래스, Goods클래스, Order클래스

에서

AA01클래스 안에있는 출력메서드를

새로운 TotaPrint 클래스를 생성하고 그 안에 출력메서드를 선언 후 AA01클래스 내에서 호출 하고 출력해보기

1. TotalPrint 클래스

: public void uPrint(user getu)

- static 없이 uPrint메서드를 위와같이 선언한다.

2. AA01클래스

: TotalPrint tp = new TotalPrint();

- TotalPrint 클래스 데이터타입으로 tp객체참조변수선언, TotalPrint 생성사 메서드를 호출하여 새로운 객체를 생성한다

:

u01.setUid("id001");

u01.setUpw("pw001");

u01.setUphone("010-0001");

u01.setUgender('남');

u01.setUage(20);

u01.setUlevel("구매자");

tp.uPrint(u01);

- tp객체참조변수의 할당된 주소를 찾아가서 입력되어있는 주소값u01로 uPrint메서드를 호출

AA01클래스

package kr.or.ksmart.A;

public class AA01 {

	public static void main(String[] args) {
		user u01 = new user();
		user u02 = new user();
		TotalPrint tp = new TotalPrint();
		
		
		u01.setUid("id001");
		u01.setUpw("pw001");
		u01.setUphone("010-0001");
		u01.setUgender('남');
		u01.setUage(20);
		u01.setUlevel("구매자");
		tp.uPrint(u01);

		
		u02.setUid("id002");
		u02.setUpw("pw002");
		u02.setUphone("010-0002");
		u02.setUgender('여');
		u02.setUage(20);
		u02.setUlevel("판매자");
		tp.uPrint(u02);
		
		Goods g01 = new Goods();
		
		g01.setPcode("p001");
		g01.setUid(u02.getUid()); 
		g01.setPname("노트북");
		g01.setPjungsang(2000000);
		g01.setPhalin(1000000);
		g01.setPsangse("SW개발용");
		tp.gPrint(g01);
		
		Order o01 = new Order();
		
		o01.setOcode("o001");
		o01.setPcode(g01.getPcode());
		o01.setUid(u01.getUid());
		o01.setOcount(3);
		o01.setOprice(g01.getPjungsang());
		o01.setOtotal(o01.getOcount() * o01.getOprice());
		o01.setOaddress("금암동");
		tp.oPrint(o01);
	
		
		
	
	}

	
	
	
}

TotalPrint 클래스

package kr.or.ksmart.A;

public class TotalPrint {
//static 으로 선언하지않고 non-static(static없는)
	
	//03 회원출력메서드선언
	public void uPrint(user getu) {
		System.out.println("--- 회원내역 시작 ---");
		System.out.println("회원아이디: " + getu.getUid());
		System.out.println("회원비번: " + getu.getUpw());
		System.out.println("회원연락처: " + getu.getUphone());
		System.out.println("회원성별: " + getu.getUgender());
		System.out.println("회원나이: " + getu.getUage());
		System.out.println("회원권한: " + getu.getUlevel());
		System.out.println("--- 회원내역 끝 ---");	
	}
	
	
	//02 상품출력메서드선언
	public void gPrint(Goods getg) {
		System.out.println("--- 상품출력 시작 ---");
		System.out.println("상품코드: " + getg.getPcode());
		System.out.println("판매자id: " + getg.getUid());
		System.out.println("상품이름: " + getg.getPname());
		System.out.println("상품가격: " + getg.getPjungsang());
		System.out.println("정상가격: " + getg.getPhalin());
		System.out.println("할인가격: " + getg.getPsangse());
		System.out.println("--- 상품출력 끝 ---");
		
	}
	
	
	//01 주문출력메서드선언
	public void oPrint(Order geto) {
		System.out.println("--- 주문 내역 시작 ---");
		System.out.println("주문코드: " + geto.getOcode());
		System.out.println("상품포드: " + geto.getPcode());
		System.out.println("구매자id: " + geto.getUid());
		System.out.println("주문수량: " + geto.getOcount());
		System.out.println("주문단가: " + geto.getOprice());
		System.out.println("결제금액: " + geto.getOtotal());
		System.out.println("배송주소: " + geto.getOaddress());
		System.out.println("--- 주문 출력력 끝 ---");
	
	}
}

반응형

댓글