멋쟁이v의 개발일지

[JAVA] 클래스와 객체, 접근제어자, DTO(getters, setters) 본문

0년차/JAVA

[JAVA] 클래스와 객체, 접근제어자, DTO(getters, setters)

멋쟁이v 2023. 5. 2. 21:22
728x90
320x100

[목차]


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

728x90
320x100
Comments