# 접근제어 지시자
l 접근제어 지시자
지시자 | 클래스내부 | 동일패키지 | 상속받은 클래스 | 이외의 영역 |
private | O | X | X | X |
default | O | O | X | X |
protected | O | O | O | X |
public | O | O | O | O |
l 접근 제어 지시자가 사용될 수 있는 곳
- private : 같은 클래스 내에서만 접근이 가능
- default : 같은 패키지 내에서만 접근 가능
- protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근 가능
- public : 접근 제한이 없다
l 정보은닉
- 정보은닉은 사과장수와 나 클래스의 멤버 변수에 직접 접근 못하게 막는 방법
같은 클래스 이름이 존재할 때 해결 방법 - 아래 처럼 pakage를 다른 이름으로 생성한다 - 생성하면 오류가 발생하는데 라인 넘버 옆에 보이는 오류 버튼을 누르면 새로운 패키지로 자동으로 move 시킬 수 있다 - 또는 직접 선언한 package 명과 동일하게 만들어 주면 해결 가능하다 | |
package bigdata;
class FruitSeller { private int numOfApple; private int myMoney; final int APPLE_PRICE;
public FruitSeller(int money, int appleNum, int price) { myMoney=money; numOfApple=appleNum; APPLE_PRICE=price; }
public int saleApple(int money) { int num=money/APPLE_PRICE; numOfApple-=num; myMoney+=money; return num; } public void showSaleResult() { System.out.println("남은 사과: " + numOfApple); System.out.println("판매 수익: " + myMoney); } }
class FruitBuyer { private int myMoney; private int numOfApple;
public FruitBuyer(int money) { myMoney=money; numOfApple=0; }
public void buyApple(FruitSeller seller, int money) { numOfApple+=seller.saleApple(money); myMoney-=money; } public void showBuyResult() { System.out.println("현재 잔액: " + myMoney); System.out.println("사과 개수: " + numOfApple); } }
class FruitSalesMain3 { public static void main(String[] args) { FruitSeller seller1 = new FruitSeller(0, 30, 1500); FruitSeller seller2 = new FruitSeller(0, 20, 1000);
FruitBuyer buyer = new FruitBuyer(10000); buyer.buyApple(seller1, 4500); buyer.buyApple(seller2, 2000);
System.out.println("과일 판매자1의 현재 상황"); seller1.showSaleResult();
System.out.println("과일 판매자2의 현재 상황"); seller2.showSaleResult();
System.out.println("과일 구매자의 현재 상황"); buyer.showBuyResult(); } } | |
package bigdata;
import java.util.Scanner;
class FruitSalesMain4 { public static void main(String[] args) { FruitSeller seller = new FruitSeller(0, 30, 1500); FruitBuyer buyer = new FruitBuyer(10000);
System.out.print("사과 가격은 하나에 1500 원입니다. " + "사과를 사시기 위해서 내실 돈이 얼마예요 ? "); Scanner keyboard = new Scanner(System.in); int n1 = keyboard.nextInt(); ;
System.out.print("사과 몇개 드릴까요 ? "); Scanner keyboard2 = new Scanner(System.in); int n2 = keyboard2.nextInt();
seller.myMoney += n1; // 돈 500원 내고! buyer.myMoney -= n1;
seller.numOfApple -= n2; buyer.numOfApple += n2; // 사과 스무 개 가져가는 꼴이네!
System.out.println("과일 판매자의 현재 상황"); seller.showSaleResult();
System.out.println("과일 구매자의 현재 상황"); buyer.showBuyResult(); } }
| |
결과값 | 사과 가격은 하나에 1500 원입니다. 사과를 사시기 위해서 내실 돈이 얼마예요 ? 500 사과 몇개 드릴까요 ? 20 과일 판매자의 현재 상황 남은 사과: 10 판매 수익: 500 과일 구매자의 현재 상황 현재 잔액: 9500 사과 개수: 20
- 돈은 500원 밖에 안냈지만 하나에 1500원짜리 사과를 20개를 살수 있도록 프로그래밍 되는 것을 확인할 수 있다. - 이렇게 외부 클래스에서 접근하는 것을 막기 위해 private가 필요하다 - 결국 각각의 변수에 private를 붙여줌으로써 해결 가능하다 |
l 캡슐화
- 캡슐화는 메인 메소드를 실행할 때 단순하게 실행할 때 사용
- 예 : rTwitter를 이용할 때 : 트위터 인증, 트위터 인증키 입력
캡슐화 예제 | |
class SinivelCap // 콧물 처치용 캡슐 { public void take(){System.out.println("콧물이 싹~ 납니다.");} }
class SneezeCap // 재채기 처치용 캡슐 { public void take() {System.out.println("재채기가 멎습니다.");} }
class SnuffleCap // 코막힘 처치용 캡슐 { public void take() {System.out.println("코가 뻥 뚫립니다.");} }
class CONTAC600 { SinivelCap sin; SneezeCap sne; SnuffleCap snu;
public CONTAC600() { sin=new SinivelCap(); sne=new SneezeCap(); snu=new SnuffleCap(); } public void take() { sin.take(); sne.take(); snu.take(); } }
class ColdPatient { public void takeCONTAC600(CONTAC600 cap){cap.take();} }
class Encapsulation2 { public static void main(String args[]) { ColdPatient sufferer = new ColdPatient(); sufferer.takeCONTAC600(new CONTAC600());
} }
| |
결과값 | 사과 가격은 하나에 1500 원입니다. 사과를 사시기 위해서 내실 돈이 얼마예요 ? 500 사과 몇개 드릴까요 ? 20 과일 판매자의 현재 상황 남은 사과: 10 판매 수익: 500 과일 구매자의 현재 상황 현재 잔액: 9500 사과 개수: 20
- 돈은 500원 밖에 안냈지만 하나에 1500원짜리 사과를 20개를 살수 있도록 프로그래밍 되는 것을 확인할 수 있다. - 이렇게 외부 클래스에서 접근하는 것을 막기 위해 private가 필요하다 - 결국 각각의 변수에 private를 붙여줌으로써 해결 가능하다 |
'빅데이터과정 > JAVA' 카테고리의 다른 글
#54_140828_JAVA_OVERLOADING (0) | 2014.08.28 |
---|---|
#54_140828_JAVA_STATIC (0) | 2014.08.28 |
#54_140828_JAVA_클래스 패스 (0) | 2014.08.28 |
#52_140827_JAVA_상속 (0) | 2014.08.27 |
#52_140827_JAVA_메소드 (0) | 2014.08.27 |