230314 클래스 및 객체, 액세스 지정자, 캡슐화, VO, DTO,

  • by

class data type 객체 참조 변수;

객체 참조 변수 =new 클래스 이름();

객체 참조 변수 =new 생성자 메서드 호출();

class data type 객체 참조 변수 =new 생성자 메서드 호출();

)User u01=new User();

==

-java의 클래스와 객체

– 액세스 지정(제어)자, 캡슐화(클래스, 필드 등 역할 분리) – 작업 분리/처리 과정에서 분리 생각 -> 설정 후 게팅)

-VO(Value Object), DTO(Data Transfer Object)

– 내용 / 설정 방법 선언? 얻는 방법 선언? -> 담당하는 클래스? 클래스를 통해 생성된 객체?

==

1단계: 데이터 영역 uid 필드(전역 변수)에 설정할 수 없음

이유/매개 변수 a에게 id001을 받았습니다.

그러나 data area uid 필드 (전역 변수)에 설정 처리하는 프로세스가 없었습니다.


로드할 값이 있음


2단계: 해결 코드 입력


3단계: 데이터 영역 uid 필드(전역 변수)로 설정할 수 없음

이유/전역 변수(필드) 이름과 로컬 변수(파라미터 포함) 이름이 같으면 메서드 내에서 로컬 변수로 취급됩니다.

-> 지역 변수는 메소드 호출시 처리 후 휘발한다 (사라짐)

결론적으로 전역 변수(필드)로 설정되지 않음

해결 방법/전역 변수(필드)와 로컬 변수(파라미터 포함)의 이름이 같으면 구분 기호가 필요합니다.

전역 변수(필드) 앞에 this.를 사용하여 구분합니다.

예) this.uid = uid;

package kr.or.ksmart.a;
public class AA01 {
//실행은(ctrl+F11) main메서드 포함된 클래스
	public static void main(String() args) {
		User u01 = new User();
		System.out.println(u01 + "<-u01");
		u01.setUid("id001");
		System.out.println(u01.getUid() + "<- u01.getUid()");
	}


}
--
package kr.or.ksmart.a;

public class User {
	private String uid;
	private String upw;
	private String uphone; 
	private char ugender;
	private int uage;
	private String ulevel;

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

uid = uid; 오류


4 단계 : 해결 코드 입력, 설정됩니다.

최종 코드 완성

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



만약, 반대로 했다면?설정할 수 없음

로컬 변수(파라미터) uid에 this.uid 글로벌 변수에 포함되어 있는 null값을 대입(입력)하고 있다.





인스턴스 User 클래스에 의해 생성된 객체

로컬 변수

– 하나의 함수에서 이름을 결정하고 변수를 지정하면 바로 로컬 변수가됩니다.

– 대신 메소드 내에서 실행되는 로컬 변수는 메소드 실행시 살아 있지만 함수가 종료하면 휘발합니다 (사라짐).

​​

전역 변수 = 필드

– 함수에 관계없이 전체 프로그램에서 사용 가능(제한 X, 어디서나 사용)

– 프로그램이 종료되지 않으면 메모리에서 사라짐

​ – 클래스 블록 바로 안에 메소드 블록 밖에 선언됨

– 전역 변수에 직접 액세스할 수 없습니다.

설정하고 획득할 수 없음

(해결 방법) 전역 변수 1 개당에 세팅하는 메소드를 선언해 호출한다.

게팅하는 메소드를 선언하고 호출하면 해결된다.

질문)setUid 메소드를 호출하면 어디에서 선언된 메소드가 실행됩니까?

User u01=new User();
u01 setUid(“id001”)

답변)User 클래스를 통해 생성되면 객체 내부의 method 영역에 선언 된 setUid 메서드가 실행됩니다.

(정리 1)

public static void main(String() args) {

User u01 = new User(); …}

1. User Class data type에 객체 참조 변수u01을 선언하면 u01에 할당된 주소 값은 null입니다.

2. User() 생성자 메서드에서 호출하면 새 객체를 만들면 (인스턴스가 생성되면) 새 주소가 생성됩니다.

data 영역과 method 영역이 발생

3. 생성된 새 주소 값을 u01에 할당

public class User {

String uid=”id001″;

}

4. u01을 찾아서 (User 클래스를 통해 생성 된 객체의 주소 찾기) 내부 데이터 영역의 uid에 액세스하여 값을 u01 오브젝트 참조 변수로 설정

5. User Class data type의 파라미터 getu에 생성된 주소가 할당된 u01을 입력하여 Uprint 메서드를 호출합니다.

public static void Uprint (User getu) {}

6. u01을 찾아 (사용자 클래스를 통해 생성 된 객체의 주소 찾기) 내부 데이터 영역에 접근하여 원하는 값을 검색하여 콘솔 창으로 출력

(정리 1-1)

User u01=new User();
u01 setUid(“id001”)

(한 줄로 정리)

전역 변수 uid에 id001을 설정하고, u01 주소의 전역 변수 uid에 설정된 값을 획득하여 출력합니다.



1) User u01 = new User();

u01.setUid(“id001”);

사용자 클래스 생성되고 객체 참조 변수 u01에 할당된 주소 값은 null입니다.

User() 생성자 메서드에서 호출하면 새 객체를 만들면 (인스턴스가 생성되면) 새 주소가 생성됩니다.

data 영역과 method 영역이 발생

새로운 주소값이 생성되어 그 안에 데이터 영역, 메소드 영역이 발생한다

생성된 주소 값을 객체 u01 참조 변수에 할당합니다.

생성된 새 주소 값을 u01에 할당

2) public void setUid(String uid) {

this.uid = uid;

u01 객체 참조 변수에 할당된 주소에 액세스하여

setUid 메소드를 호출하면 (메소드 이름이 동일한 setUid가됩니다)

매개변수 uid에 “id001” 값을 입력하여 메소드를 실행합니다.

3) String uid;

데이터 영역 글로벌 변수 uid에 null로 “id001″을 대입한다

4) public String getUlevel() {

return ulevel;}

u01 객체 참조 변수에 할당된 주소로 이동하여 -> if(u01.getUlevel().equals(“판매자”)) { }

getUlevel 메소드를 호출하면 (메소드 이름이 동일한 getUlevel로 이동합니다)

데이터 영역 전역 변수 uid에 입력 된 “id001″값을 검색하고,

메소드를 호출한 장소에 돌려줍니다.

5) “id001″이 콘솔 창에 출력합니다.

*주의해야 할 메소드를 작성하는 방법

* 전역 변수에 직접 액세스할 수 없음. 설정하고 게팅 할 수 없다.

(해결 방법)

전역 변수 1개당설정하다 메서드를 선언하고 호출합니다.

얻기 메서드를 선언하고 호출하면 해결됩니다.

*지역 변수와 전역 변수 이름 같은 시 어떻게 구별?uid = uid; 쓸 시간이없는 코드입니다.

.

(해결 방법)

전역 변수 전에 this.uid 로 구분한다.

this.uid = uid; 로 변경해야 하는 객체의 값 설정

* 메소드의 지역 변수는 실행 후 휘발한다.

지역 변수에 값을 얼마 설정(입력,대입) 하지만 개체 내 데이터 지역에 설정되지 않음 아니


다른 클래스 메소드 선언 및 호출




체크 -> 자동으로 메소드 선언 호출

액세스 지정자(access modifier)



실습/판매자라면 상품 등록 가능. 그렇지 않으면 상품 등록 불가능 (if, else 사용)

package kr.or.ksmart.a;
public class AA02_2 {
public static void main(String() args) {
		BB02_2 bb= new BB02_2 ();
		User u01 = new User ();
		u01.setUid("id002");
		u01.setUpw("pw002");
		u01.setUphone("010-0002");
		u01.setUgender('여');
		u01.setUage(30);
		u01.setUlevel("판매자");
		bb.levelChcek(u01);//판매자 권한 등록
	}
}
--
package kr.or.ksmart.a;
public class BB02_2 {
	public void levelChcek (User u) {
		System.out.println(u + "<- 권한");
	if(u.getUlevel().equals("판매자")) {
	System.out.println("2-1 판매자 권한");
	Goods g01 = new Goods();
	g01.setPcode("p001");
	g01.setUid(u.getUid());
	g01.setPname("노트북");
	g01.setPjungsang(2000000);
	g01.setPhalin(1000000);
	g01.setPsangse("SW개발용");
	TotalPrint tp = new TotalPrint();//상품등록
	tp.gPrint(g01);
	} else {
	System.out.println("2-2 판매자 권한이 없다");
		}
	}
}
--


u01.setUlevel(“판매자”); /판매자 권한을 가진

package kr.or.ksmart.a;
public class AA02_2 {
public static void main(String() args) {
		BB02_2 bb= new BB02_2 ();
		User u01 = new User ();
		u01.setUid("id002");
		u01.setUpw("pw002");
		u01.setUphone("010-0002");
		u01.setUgender('여');
		u01.setUage(30);
		u01.setUlevel("구매자");
		bb.levelChcek(u01);//구매자or판매자 권한 등록
	}
}


u01.setUlevel(‘구매자’);/판매자 권한 없음/구매자 대신…


230314 자습서

인스턴스 User 클래스에 의해 생성된 객체

로컬 변수

– 하나의 함수에서 이름을 결정하고 변수를 지정하면 바로 로컬 변수가됩니다.

– 대신 메소드 내에서 실행되는 로컬 변수는 메소드 실행시 살아 있지만 함수가 종료하면 휘발합니다 (사라짐).

​​

전역 변수 = 필드

– 함수에 관계없이 전체 프로그램에서 사용 가능(제한 X, 어디서나 사용)

– 프로그램이 종료되지 않으면 메모리에서 사라짐

​ – 클래스 블록 바로 안에 메소드 블록 밖에 선언됨

– 전역 변수에 직접 액세스할 수 없습니다.

설정하고 획득할 수 없음

(해결 방법) 전역 변수 1 개당에 세팅하는 메소드를 선언해 호출한다.

게팅하는 메소드를 선언하고 호출하면 해결된다.

질문)setUid 메소드를 호출하면 어디에서 선언된 메소드가 실행됩니까?

User u01=new User();
u01 setUid(“id001”)

답변)User 클래스를 통해 생성되면 객체 내부의 method 영역에 선언 된 setUid 메서드가 실행됩니다.

(나노 1)

public static void main(String() args) {

User u01 = new User(); …}

1. User Class data type에 객체 참조 변수u01을 선언하면 u01에 할당된 주소 값은 null입니다.

2. User() 생성자 메서드에서 호출하면 새 객체를 만들면 (인스턴스가 생성되면) 새 주소가 생성됩니다.

data 영역과 method 영역이 발생

3. 생성된 새 주소 값을 u01에 할당

public class User {

String uid=”id001″;

}

4. u01을 찾아서 (User 클래스를 통해 생성 된 객체의 주소 찾기) 내부 데이터 영역의 uid에 액세스하여 값을 u01 오브젝트 참조 변수로 설정

5. User Class data type의 파라미터 getu에 생성된 주소가 할당된 u01을 입력하여 Uprint 메서드를 호출합니다.

public static void Uprint (User getu) {}

6. u01을 찾아 (사용자 클래스를 통해 생성 된 객체의 주소 찾기) 내부 데이터 영역에 접근하여 원하는 값을 검색하여 콘솔 창으로 출력

(나노 1-1)

User u01=new User();
u01 setUid(“id001”)

(한 줄로 정리)

전역 변수 uid에 id001을 설정하고, u01 주소의 전역 변수 uid에 설정된 값을 획득하여 출력합니다.



1) User u01 = new User();

u01.setUid(“id001”);

사용자 클래스 생성되고 객체 참조 변수 u01에 할당된 주소 값은 null입니다.

User() 생성자 메서드에서 호출하면 새 객체를 만들면 (인스턴스가 생성되면) 새 주소가 생성됩니다.

data 영역과 method 영역이 발생

새로운 주소값이 생성되어 그 안에 데이터 영역, 메소드 영역이 발생한다

생성된 주소 값을 객체 u01 참조 변수에 할당합니다.

생성된 새 주소 값을 u01에 할당

2) public void setUid(String uid) {

this.uid = uid;

u01 객체 참조 변수에 할당된 주소에 액세스하여

setUid 메소드를 호출하면 (메소드 이름이 동일한 setUid가됩니다)

매개변수 uid에 “id001” 값을 입력하여 메소드를 실행합니다.

3) String uid;

데이터 영역 글로벌 변수 uid에 null로 “id001″을 대입한다

4) public String getUlevel() {

return ulevel;}

u01 객체 참조 변수에 할당된 주소로 이동하여 -> if(u01.getUlevel().equals(“판매자”)) { }

getUlevel 메소드를 호출하면 (메소드 이름이 동일한 getUlevel로 이동합니다)

데이터 영역 전역 변수 uid에 입력 된 “id001″값을 검색하고,

메소드를 호출한 장소에 돌려줍니다.

5) “id001″이 콘솔 창에 출력합니다.

*주의해야 할 메소드를 작성하는 방법

* 전역 변수에 직접 액세스할 수 없음. 설정하고 게팅 할 수 없다.

(해결 방법)

전역 변수 1개당설정하다 메서드를 선언하고 호출합니다.

얻기 메서드를 선언하고 호출하면 해결됩니다.

*지역 변수와 전역 변수 이름 같은 시 어떻게 구별?uid = uid; 쓸 시간이없는 코드입니다.

.

(해결 방법)

전역 변수 전에 this.uid 로 구분한다.

this.uid = uid; 로 변경해야 하는 객체의 값 설정

* 메소드의 지역 변수는 실행 후 휘발한다.

지역 변수에 값을 얼마 설정(입력,대입) 하지만 개체 내 데이터 지역에 설정되지 않음 아니


나만 이해할 수 있는 필기…