본문 바로가기

빅데이터과정/JAVA

#54_140828_접근제어 지시자

728x90

# 접근제어 지시자



 

접근제어 지시자

지시자

클래스내부

동일패키지

상속받은 클래스

이외의 영역

private

O

X

X

X

default

O

O

X

X

protected

O

O

O

X

public

O

O

O

O

 

 

 

접근 제어 지시자가 사용될 수 있는 곳

private : 같은 클래스 내에서만 접근이 가능

default : 같은 패키지 내에서만 접근 가능

protected : 같은 패키지 내에서그리고 다른 패키지의 자손 클래스에서 접근 가능

public : 접근 제한이 없다

 

 

 

 

정보은닉

정보은닉은 사과장수와 나 클래스의 멤버 변수에 직접 접근 못하게 막는 방법

 

 

 

 

 

같은 클래스 이름이 존재할 때 해결 방법

아래 처럼 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를 붙여줌으로써 해결 가능하다

 

 

 

캡슐화

캡슐화는 메인 메소드를 실행할 때 단순하게 실행할 때 사용

예 : 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