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("--- 주문 출력력 끝 ---");
}
}
'개발자 수강노트 > Java /Spring' 카테고리의 다른 글
수강노트 - 자바 클래스 선언 및 호출 (6) (0) | 2022.07.31 |
---|---|
수강노트 - 자바 클래스 선언 및 호출 (4) (0) | 2022.07.31 |
수강노트 - 자바 클래스 선언 및 호출 (3) (0) | 2022.07.31 |
수강노트 - 자바 클래스 선언 및 호출 (2) (0) | 2022.07.31 |
수강노트 - 자바 클래스 선언 및 호출 (1) (0) | 2022.07.31 |
댓글