[목차]
01. 접근제어자(Access Modifier)
💡
접근 영역 : public > protexted > default > private
1️⃣ public
👉🏻모든 접근을 허용합니다. 어떠한 클래스가 접근을 하든 모두 허용 됩니다.
2️⃣ protected
👉🏻상속받은 클래스 또는 같은 패키지에서만 접근이 가능합니다.
3️⃣ default
👉🏻기본 제한자로써 아무것도 붙지 않고, 자신 클래스 내부와 같은 패키지 내에서만 접근이 가능합니다.
4️⃣ private
👉🏻외부에서 접근이 불가능합니다. 즉, 같은 클래스 내에서만 접근이 -가능합니다.
02. DTO(Data Transfer Object)
💡
DTO
➡️ 순수하게 데이터를 담아 계층 간으로 전달하는 객체
➡️ setter/getter만을 가져야 한다.
➡️ 어떠한 비즈니스 로직을 가져서는 안된다고 한다.
[코드예제] User.java
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 String getUid() { return uid; } public void setUid(String uid) { System.out.println(uid + "<- uid setUid User.java"); this.uid = uid; } public String getUpw() { return upw; } public void setUpw(String upw) { System.out.println(upw + "<- upw setUpw User.java"); this.upw = upw; } public String getUphone() { return uphone; } public void setUphone(String uphone) { System.out.println(uphone + "<- uphone setUphone User.java"); this.uphone = uphone; } public char getUgender() { return ugender; } public void setUgender(char ugender) { System.out.println(ugender + "<- ugender setUgender User.java"); this.ugender = ugender; } public int getUage() { return uage; } public void setUage(int uage) { System.out.println(uage + "<- uage setUage User.java"); this.uage = uage; } public String getUlevel() { return ulevel; } public void setUlevel(String ulevel) { System.out.println(ulevel + "<- ulevel setUlevel User.java"); this.ulevel = ulevel; } }
03. 두개 클래스를 메서드 setters/getters로 캡슐화
1단계
👉🏻[데이터 영역] private String uid; ➡️ private된 전역변수 [method 영역] ➡️ private된 전역변수를 메서드로 간접적으로 접근 public void setUid(String a) { System.out.println(a + " <- a setUid User.java"); }- data영역 uid필드(전역변수)에 셋팅이 안된다.
- 매개변수 a에 id001을 받았다. (u01.setUid(”id001”);
- 하지만 data영역 uid 필드(전역변수)에 셋팅 처리하는 과정이 없다.
2단계
👉🏻private String uid; ➡️ private된 전역변수 public void setUid(String a) { System.out.println(a + " <- a setUid User.java"); uid = a; }- 셋팅이 된다.
3단계
👉🏻private String uid; ➡️ private된 전역변수 public void setUid(String uid) { System.out.println(uid + " <- a setUid User.java"); uid = uid; ➡️ 앞에 변수는 전역변수, 뒤에 변수는 지역변수 }- 셋팅이 안된다. ➡️ uid = uid;
- 전역변수(필드) 이름과 지역변수(매개변수포함) 이름이 같으면 메서드 내에서는 지역변수로 처리 된다.
- 결론적으로 전역변수(필드)에 셋팅 되지 않는다.
4단계(최종)
👉🏻private String uid; ➡️ private된 전역변수 public void setUid(String uid) { System.out.println(uid + " <- a setUid User.java"); this.uid = uid; ➡️ 앞에 변수는 전역변수, 뒤에 변수는 지역변수 }- 해결방법 ➡️ 전역변수 앞에 this.을 붙여서 구분한다 (this.uid = uid;)
- 전역변수 이름과 지역변수 이름이 같을 때 구분이 필요하다.
5단계
👉🏻private String uid; ➡️ private된 전역변수 public void setUid(String uid) { System.out.println(uid + " <- a setUid User.java"); uid = this.uid; ➡️ 앞에 변수는 매개변수, 뒤에 변수는 전역변수 }- uid = this.uid; ➡️ 매개변수에 전역변수(null) 값을 대입
04. 서로다른 클래스의 메서드 선언 및 호출
다른 클래스 내 메서드 호출 과정
💡클래스를 통해 생성된 객체내에 method영역에 선언된 메서드를 호출한다. User u = new User(); u.a(); ➡️ User 클래스에 a() 메서드가 선언되어 있어야 한다.- User 클래스 data type인 u객체참조변수를 선언하여, User() 생성자 메서드를 호출하고 객체가 생성되면 새로운 주소가 생기고, 그 주소를 u객체참조변수에 할당한다.
- u객체참조변수의 주소를 찾아가서 메서드영역의 메서드이름이 a인 메서드를 호출한다.
[코드예제] AA02_2.java
package kr.or.ksmart.a; public class AA02_2 { public static void main(String[] args) { User u = new User(); BB02_2 check = new BB02_2(); u.setUid("id001"); u.setUpw("pw001"); u.setUphone("010-0001"); u.setUgender('남'); u.setUage(20); u.setUlevel("판매자"); check.levelCheck(u); } }
[코드예제] BB02_2.java
package kr.or.ksmart.a; public class BB02_2 { public void levelCheck(User u) { if (u.getUlevel() == "판매자") { TotalPrint tp = new TotalPrint(); Goods g = new Goods(); g.setPcode("p001"); g.setUid(u.getUid()); g.setPname("노트북"); g.setPjungsang(2000000); g.setPhalin(1000000); g.setPsangse("SW개발용"); tp.gPrint(g); }else { System.out.println("판매자 권한이 없어요"); } } }
[코드예제] User.java
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 String getUid() { return uid; } public void setUid(String uid) { System.out.println(uid + "<- uid setUid User.java"); this.uid = uid; } public String getUpw() { return upw; } public void setUpw(String upw) { System.out.println(upw + "<- upw setUpw User.java"); this.upw = upw; } public String getUphone() { return uphone; } public void setUphone(String uphone) { System.out.println(uphone + "<- uphone setUphone User.java"); this.uphone = uphone; } public char getUgender() { return ugender; } public void setUgender(char ugender) { System.out.println(ugender + "<- ugender setUgender User.java"); this.ugender = ugender; } public int getUage() { return uage; } public void setUage(int uage) { System.out.println(uage + "<- uage setUage User.java"); this.uage = uage; } public String getUlevel() { return ulevel; } public void setUlevel(String ulevel) { System.out.println(ulevel + "<- ulevel setUlevel User.java"); this.ulevel = ulevel; } }
[코드예제] Goods.java
package kr.or.ksmart.A; public class Goods { private String pcode; private String uid; private String pname; private int pjungsang; private int phalin; private String psangse; public String getPcode() { return pcode; } public void setPcode(String pcode) { this.pcode = pcode; } public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public int getPjungsang() { return pjungsang; } public void setPjungsang(int pjungsang) { this.pjungsang = pjungsang; } public int getPhalin() { return phalin; } public void setPhalin(int phalin) { this.phalin = phalin; } public String getPsangse() { return psangse; } public void setPsangse(String psangse) { this.psangse = psangse; } }
tag : #java #객체 #클래스 #DTO #setter #getter #캡슐화
Uploaded by N2T