코딩/2-JAVA

C16캡슐화

tree0505 2025. 7. 10. 10:50
반응형
    • C16캡슐화

  • C1601캡슐화_개념

  • C1601개념01캡슐화
package C1601캡슐화_개념;


class Test01 {
	// 접근제어자 : public, protected(추후 설명), default, private
	
	//캡슐화란 
		//private=> 접근제어자를 사용해서. 코딩을 좀더 안전하게 관리하는것
		//private을 사용하면 이 안에서만 사용할 수 있다. 
	//변수에 대해 제어를 해주어야 한다. 
	//private : 안에서만 사용 가능 
	//public : 어디서든 사용 가능 
	//없음 : 에매한것 / 사용x 
	
	private int a;
	private int b;
	
	// 접근제어가 없는 것을 default 라고 부른다.
	// 지금까지는 접근제어자를 사용하지 않았지만, 정확하게 명시해주는 것이 좋다.
	// 이제부터 아무것도 안적는것은 권장하지않는다. 
	int c; //사용하면 안된다. 
	
	// public은 어느 클래스에서도 접근가능한 것
	public int d;
	
	
}

public class C1601개념01캡슐화 {
	public static void main(String[] args) {
		
		
		Test01 t = new Test01();
		
		// 1. private을 붙인 변수는 클래스 내부에서만 사용이 가능하다.
		// 2. 다른 클래스에서는 사용할 수 없다.
		// The field Test01.a is not visible
		// t.a = 10;	// 에러
		// t.b = 20;	// 에러
				
		t.c = 30; 
		//자바에서는 금지 
		//.(점) 찍어서 바로 정보를 넣는것 
		t.d = 40;
		
	}
}

  • C1601개념02캡슐화 
package C1601캡슐화_개념;

class Student1 {
	//private으로 막은 변수를 정보를 어떻게 넣느냐? 
	//일일이 set함수. get함수를 만들어 주어야 한다. 
	private String name;
	private int age; //본 데이터는 private으로 막는다. 
	
	public Student1(String name, int age){
		this.name = name;
		this.age = age;
	}
	
	public void setName(String name) { //public을 쓴다. 
		this.name = name;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	
	public String getName() {
		return name;
	}
	
	public int getAge() {
		return age;
	}	
}
//----------------------------------------------
class Student2{
	public String name;
	public int age;
}


public class C1601개념02캡슐화 {
	public static void main(String[] args) {
		
		
		Student1 hgd = new Student1("홍길동", 11);

		System.out.println(hgd.getName());
		System.out.println(hgd.getAge());
		//함수형으로 쓸 수 밖에 없다. 
		
		hgd.setName("이만수");
		hgd.setAge(20);
				
		System.out.println(hgd.getName());
		System.out.println(hgd.getAge());
		
		// hgd.name = "aaa"; 직접접근을 불가하다.
		
		// 아래가 훨씬 편한데 왜 위와 같이 사용할까? 다음에 설명 
		Student2 s2 = new Student2();
		s2.name = "이영희";
		s2.age = 10;
		//위처럼 쓰는것은 막아야 한다.
		
		
		
	}
}

  • C1601개념03캡슐화
package C1601캡슐화_개념;

class Product { //상품 
	private String regiDate;
	private String name;
	private int price;
	
	public Product (String date , String name , int price){
		//상품의 제조년월일 => data 
		this.regiDate = date;
		this.name = name;
		this.setPrice(price);
	}
	
	public void setPrice(int price) {
		this.price = price;
	}
	
	public String getRegiDate() {
		return regiDate;
	}
	public String getName() {
		return name;
	}
	public int getPrice() {
		return price;
	}
}

public class C1601개념03캡슐화 {
	public static void main(String[] args) {
		// [get set의 활용법]
		
		// 위와같이 set메서드는  price만 만들어놓고 , 
		// 제조년과  상품이름의 set메서드를  만들지않으면 
		// 제조년과  상품이름은 처음 저장한 이후 변경이 절대로 불가능하다. 
		Product pr = new Product("20210420", "김치", 2000);
		System.out.println(pr.getName());
		System.out.println(pr.getRegiDate());
		System.out.println(pr.getPrice());
		System.out.println("-------------------------------");
		pr.setPrice(1500);

		System.out.println(pr.getName());
		System.out.println(pr.getRegiDate());
		System.out.println(pr.getPrice());
		
	}
}

  • 왜 막을까? 
  • 상품의 제조년월일 => data 
    • 만약에 data의 set을 만들어 버리면.
    • 상품의 날짜가 변경될 수 있다. 
    • 그러면 큰일 난다. 
    • 그래서 상품의 set을 없애버리는 것이다. 
    • 그러면 원초적으로 data의 값을 변경하는게 불가능하다. 
    • 만약 data의 고쳤다고 한다면 
      • 범인 => 개발자 or 스티커 붙이는 사람 
    • 상품의 보안을 강화하기 위해서 사용하는것이다. 
    • 이래서 자바스크립트가 쓸모가 없다. 
      • 그래서 자바스크립트를 생으로 안 쓰고. 타입스크립트로 한다. 
      • let => int String 
      • => private 
      • 근데 자바스크립트가 금방 만들꺼래.
class Product { //상품 
	private String regiDate;
	private String name;
	private int price;
	
	public Product (String date , String name , int price){
		//상품의 제조년월일 => data 
		this.regiDate = date;
		this.name = name;
		this.setPrice(price);
	}

  • C1601개념04산업기사기출_암기
package C1601캡슐화_개념;

import java.util.Vector;

class Member {
	private int custno;				// 회원번호
	private String custname;		// 회원성명
	private String phone;			// 회원전화
	private String address;			// 통신사
	private String joindate;		// 가입일자
	private String grade;			// 고객등급
	private String city;			// 거주도시
	public Member(int custno, String custname, String phone, String address, String joindate, String grade, String city) {
		this.custno = custno;
		this.custname = custname;
		this.phone = phone;
		this.address = address;
		this.joindate = joindate;
		this.grade = grade;
		this.city = city;
	}
	
	public int getCustno() { return custno;	}
	public void setCustno(int custno) {	this.custno = custno; }
	public String getCustname() { return custname; }
	public void setCustname(String custname) { this.custname = custname; }
	public String getPhone() { return phone; }
	public void setPhone(String phone) { this.phone = phone; }
	public String getAddress() { return address; }
	public void setAddress(String address) { this.address = address; }
	public String getJoindate() { return joindate; }
	public void setJoindate(String joindate) { this.joindate = joindate; }
	public String getGrade() { return grade; }
	public void setGrade(String grade) { this.grade = grade; }
	public String getCity() { return city; }
	public void setCity(String city) { this.city = city; }
	
}

class Money{
	private int custno;				// 회원번호
	private int saleno; 			// 판매번호
	private int pcost;				// 단가
	private int amount;				// 수량
	private int price;				// 가격(매출)
	private String pcode;			// 상품코드
	private String sdate;			// 판매일자
	public Money() {}
	public Money(int custno, int saleno, int pcost, int amount, int price, String pcode, String sdate) {
		this.custno = custno;
		this.saleno = saleno;
		this.pcost = pcost;
		this.amount = amount;
		this.price = price;
		this.pcode = pcode;
		this.sdate = sdate;
	}
	
	public int getCustno() { return custno; }
	public void setCustno(int custno) { this.custno = custno; }
	public int getSaleno() { return saleno; }
	public void setSaleno(int saleno) { this.saleno = saleno; }
	public int getPcost() { return pcost; }
	public void setPcost(int pcost) { this.pcost = pcost; }
	public int getAmount() { return amount; }
	public void setAmount(int amount) { this.amount = amount; }
	public int getPrice() { return price; }
	public void setPrice(int price) { this.price = price; }
	public String getPcode() { return pcode; }
	public void setPcode(String pcode) { this.pcode = pcode; }
	public String getSdate() { return sdate; }
	public void setSdate(String sdate) { this.sdate = sdate; }
	
}

class Manager{
	private Vector<Member> memberList = new Vector<Member>();
	private Vector<Money> moneyList = new Vector<Money>(); 	
	private Vector<Result> resultList = new Vector<Result>();
	
	public void init() {
		memberList.add(new Member(100001, "김행복", "010-1111-2222", "SK", "20151202", "A", "01"));
		memberList.add(new Member(100002, "이축복", "010-1111-3333", "SK", "20151206", "B", "01"));
		memberList.add(new Member(100003, "장믿음", "010-1111-4444", "SK", "20151001", "B", "30"));
		memberList.add(new Member(100004, "최사랑", "010-1111-5555", "SK", "20151113", "A", "30"));
		memberList.add(new Member(100005, "진평화", "010-1111-6666", "SK", "20151225", "B", "60"));
		memberList.add(new Member(100006, "차공단", "010-1111-7777", "SK", "20151211", "C", "60"));
		
		moneyList.add(new Money(100001, 20160001, 500, 5, 2500, "A001", "20160101"));
		moneyList.add(new Money(100001, 20160002, 1000, 4, 4000, "A002", "20160101"));
		moneyList.add(new Money(100001, 20160003, 500, 3, 1500, "A008", "20160101"));
		moneyList.add(new Money(100002, 20160004, 2000, 1, 2000, "A004", "20160102"));
		moneyList.add(new Money(100002, 20160005, 500, 1, 500, "A001", "20160103"));
		moneyList.add(new Money(100003, 20160006, 1500, 2, 3000, "A003", "20160103"));
		moneyList.add(new Money(100004, 20160007, 500, 2, 1000, "A001", "20160104"));
		moneyList.add(new Money(100004, 20160008, 300, 1, 300, "A005", "20160104"));
		moneyList.add(new Money(100004, 20160009, 600, 1, 600, "A006", "20160104"));
		moneyList.add(new Money(100004, 20160010, 3000, 1, 3000, "A007", "20160106"));
	}
	
	public Vector<Member> getMemberList() { return memberList; }
	public Vector<Money> getMoneyList() { return moneyList; }
	public Vector<Result> getResultList() { return resultList; }
}

class Result {
	private int custno;
	private String custname;
	private int price;
	
	public int getCustno() { return custno; }
	public void setCustno(int custno) { this.custno = custno; }
	public String getCustname() { return custname; }
	public void setCustname(String custname) { this.custname = custname; }
	public int getPrice() { return price; }
	public void setPrice(int price) { this.price = price; }
	
	public void printInfo() {
		System.out.println(custno + "\t" + custname + "\t" + price);
	}
	
}

public class C1601개념04산업기사기출_암기 {
	public static void main(String[] args) {
		
		Manager mg = new Manager();
		mg.init();
		
		/*
		   [문제] 아 래와 같이 출력  매출(price) 의 합계 + 내림차순 
		  
			100001	김행복		8000
			--------------------------------
			100004	최사랑		4900
			--------------------------------
			100003	장믿음		3000
			--------------------------------
			100002	이축복		2500
			--------------------------------
		 */

		Vector<Member> memberList = mg.getMemberList();
		Vector<Money> moneyList = mg.getMoneyList();
		Vector<Result> resultList = mg.getResultList();
		
		for(int i=0; i<memberList.size(); i++) {
			Member member = memberList.get(i);
			
			int total = 0;
			for(int j=0; j<moneyList.size(); j++) {
				Money money = moneyList.get(j);
				if(member.getCustno() == money.getCustno()) {
					total += money.getPrice();
				}
			}
			
			System.out.println(total);

			Result rs = new Result();
			rs.setCustno(member.getCustno());
			rs.setCustname(member.getCustname());
			rs.setPrice(total);
			resultList.add(rs);
		}

		// 정렬
		for(int i=0; i<resultList.size(); i++) {
			for(int j=i; j<resultList.size(); j++) {
				if(resultList.get(i).getPrice() < resultList.get(j).getPrice()) {
					Result temp = resultList.get(i);
					resultList.set(i, resultList.get(j));
					resultList.set(j, temp);
				}
			}
		}
		
		for(int i=0; i<resultList.size(); i++) {
			if(resultList.get(i).getPrice() > 0) {
				resultList.get(i).printInfo();
			}
		}
		
	}
}

 

반응형

'코딩 > 2-JAVA' 카테고리의 다른 글

C18상속  (1) 2025.07.17
C17스태틱  (2) 2025.07.11
C1404콜렉션벡터_개념  (0) 2025.07.09
C14콜렉션 => C1401가변배열_개념  (0) 2025.07.07
C13파일입출력  (0) 2025.07.07