'분류 전체보기'에 해당되는 글 55건

다형성은 정말 편리한 기능이다.
인터페이스에도 다형성 기능을 활용해 더욱 편리한 기능을 제공해준다.

  1. 인터페이스 클래스 - Scheduler.java

    package interfaceex;
    
    public interface Scheduler {
      public void getNextCall();
      public void sendCallToAgent();    
    }

    -기능 명세를 알려주는 추상메서드 2개를 선언하였다.

  2. 인터페이스 기능을 구현한 각 클래스들 정의

    package interfaceex;
    
    public class RoundRobin implements Scheduler{
    
       @Override
       public void getNextCall() {
           System.out.println("상담 전화를 순서대로 대기열에서 가져옵니다.");
       }
    
       @Override
       public void sendCallToAgent() {
           System.out.println("다음 순서 상담원에게 배분합니다.");
       }
    
    }

    -인터페이스에 선언 된 기능을 구현하였다. 나머지들도 똑같으므로 생략.

  3. 테스트

    package interfaceex;
    
    import java.io.IOException;
    
    public class SchedulerTest {
    
       public static void main(String[] args) throws IOException {
           System.out.println("전화 상담 할당 방식을 선택하세요.");
           System.out.println("R: 한명씩 차례로 할당");
           System.out.println("L: 쉬고 있거나 대가가 가장 적은 상담원에게 할당");
           System.out.println("P: 우선순위가 높은 고객 먼저 할당 ");
           System.out.println("A: 상담원이 직접 선택 ");
    
           int ch = System.in.read();
           Scheduler scheduler = null;
    
           if(ch == 'R' || ch == 'r') {
               scheduler = new RoundRobin();
           }
           else if(ch == 'L' || ch == 'l') {
               scheduler = new LeastJob();
           }
           else if(ch == 'P' || ch == 'p') {
               scheduler = new Priorityallocation();
           }
           else if(ch == 'A' || ch == 'a') {
               scheduler = new AgentGetCall();
           }
           else {
               System.out.println("지원되지 않는 기능입니다.");
           }
    
           scheduler.getNextCall();
           scheduler.sendCallToAgent();
    
       }
    }

    -기능은 간단하다. 다른 업무에 따라 해야하는 일들이 fix 에 되어있다.
    -그렇지만 모두 Scheduler 클래스를 상속받았으므로, 다형성을 활용해 자료형을 Scheduler로 통일할 수 있다.
    -만약 다형성이 없다면 각 클래스의 인스턴스를 만들어야 할 것이다.

  1. 만약 다형성이 없다면 ?

    package interfaceex;
    
    import java.io.IOException;
    
    public class SchedulerTest2 {
    
       public static void main(String[] args) throws IOException {
           System.out.println("전화 상담 할당 방식을 선택하세요.");
           System.out.println("R: 한명씩 차례로 할당");
           System.out.println("L: 쉬고 있거나 대가가 가장 적은 상담원에게 할당");
           System.out.println("P: 우선순위가 높은 고객 먼저 할당 ");
           System.out.println("A: 상담원이 직접 선택 ");
    
           int ch = System.in.read();
    
           if(ch == 'R' || ch == 'r') {
               RoundRobin instance1 = new RoundRobin();
               instance1.getNextCall();
               instance1.sendCallToAgent();
           }
           else if(ch == 'L' || ch == 'l') {
               LeastJob instance2 = new LeastJob();
               instance2.getNextCall();
               instance2.sendCallToAgent();            
           }
           else if(ch == 'P' || ch == 'p') {
               Priorityallocation instance3 = new Priorityallocation();
               instance3.getNextCall();
               instance3.sendCallToAgent();            
           }
           else if(ch == 'A' || ch == 'a') {
               AgentGetCall instance4 = new AgentGetCall();
               instance4.getNextCall();
               instance4.sendCallToAgent();            
           }
           else {
               System.out.println("지원되지 않는 기능입니다.");
           }
    
       }
    }

    -각 클래스의 인스턴스를 하나하나 다 선언해줘야한다 ㅜㅜ



- 출처: Do it 자바프로그래밍


'프로그래밍 > Java' 카테고리의 다른 글

기본클래스 - Object  (0) 2019.12.09
인터페이스의 구현과 상속  (0) 2019.12.08
인터페이스 - 디폴트메서드, 정적메서드  (0) 2019.12.08
jdk환경변수 설정하기 (feat. window10)  (0) 2019.12.08
인터페이스  (0) 2019.12.07
블로그 이미지

파니동

,

인터페이스란 ?

인터페이스는 추상클래스와 마찬가지로, 하위클래스에서 기능구현을 강제하도록 하는 클래스이다. 추상클래스의 확장형이라고 생각할 수 있다. 추상메서드만 존재할 수 있다.

  1. 인터페이스 클래스 선언 - Calc.java

    package interfaceex;
    
    public interface Calc {
      double PI = 3.14; // 컴파일 과정에서 상수가 됨.
      int ERROR = -999999999; // 컴파일 과정에서 상수가 됨.
    
      int add(int num1, int num2);
      int substract(int num1, int num2);
      int times(int num1, int num2);
      int divide(int num1, int num2);
      int square(int num);
    
    }

    -클래스를 인터페이스로 선언하였다. 인터페이스로 선언한 클래스의 멤버변수는 컴파일 과정에서 상수값으로 변경되고, 메서드 또한 컴파일과정에서 추상메서드로 바뀌게 된다.

  2. 인터페이스 클래스의 구현 - Calculator.java

    package interfaceex;
    
    public abstract class Calculator implements Calc{
    
       @Override
       public int add(int num1, int num2) {
           // TODO Auto-generated method stub
           return num1 + num2;
       }
    
       @Override
       public int substract(int num1, int num2) {
           // TODO Auto-generated method stub
           return num1 - num2;
       }
    }

    -인터페이스 클래스의 일부를 구현하였다. 일부만 구현이 가능한 이유는 Calculator 가 추상클래스이기 때문이다. 누군가는 Calc 의 기능(메서드)를 구현할 것이다.

  3. 기능구현의 완전체 - CompleteCalc.java

    package interfaceex;
    
    public class CompleteCalc extends Calculator{
    
       @Override
       public int times(int num1, int num2) {
           return num1 * num2;
       }
    
       @Override
       public int divide(int num1, int num2) {
           if(num2 != 0) 
               return num1 / num2;
           else 
               return Calc.ERROR;
    
       }
    
       public void showInfo() {
           System.out.println("Calc 인터페이스를 구현하였습니다.");
       }
    
       @Override
       public int square(int num) {
           return num * 2;
       }    
    
    }

    -추상클래스인 Calculator를 상속받아 Calc에 있는 나머지 메서드들을 구현했다.

  1. 테스트하기.

    package interfaceex;
    
    public class CalculatorTest {
    
       public static void main(String[] args) {
           int num1 = 10;
           int num2 = 5;
    
           CompleteCalc calc = new CompleteCalc();
           System.out.println(calc.add(num1, num2));
           System.out.println(calc.substract(num1, num2));
           System.out.println(calc.times(num1, num2));
           System.out.println(calc.divide(num1, num2));
           System.out.println(calc.square(num1));
           calc.showInfo();
    
       }
    
    }

    -상위 클래스의 기능을 모두 가지고 있는 CompleteCalc 클래스의 인스턴스만 생성한다
    -인터페이스 또한 묵시적 형변환이 가능하다.( 상위클래스 자료형으로 변환 )



- 출처: Do it 자바프로그래밍


블로그 이미지

파니동

,

처음 리눅스를 설치할 때 관리자권한과, 일반사용자를 설정하였다.
사용자별로 권한을 다르게 할 수 있는데, 우선 일반사용자와 루트사용자의 접속화면부터 살펴보자.

루트사용자 와 일반사용자 접속 화면 비교.

  • 우선 루트사용자는 맨끝에 # 이 붙는다. 이것은 루트사용자라는 의미이다.
  • 일반사용자의 경우에는 끝에 $ 가 붙는다.

폴더 생성하기.

  • 각 사용자들마다 루트 디렉토리에 폴더를 생성하였다.
  • 루트 사용자는 정상적으로 생성되는 반면, 일반사용자는 "허가거부" 라는 메시지가 출력된다.

'프로그래밍 > 리눅스' 카테고리의 다른 글

[우분투] 자바 개발환경 & 이클립스 설치  (0) 2020.05.16
디렉토리 구조  (0) 2019.12.15
디렉토리 경로 보이게 수정  (0) 2019.12.15
디렉토리 만들기 / 지우기  (0) 2019.12.07
putty로 ssh 접속하기.  (0) 2019.12.06
블로그 이미지

파니동

,

1. centOS에서 ssh 확인하기.

2. ssh 서버가 실행 되어있는지 확인.

3. putty 클라이언트에서 접속 가능하도록 버추얼박스 네트워크 설정.

4. putty 클라이언트에서 접속하기.

블로그 이미지

파니동

,

코딩을하거나 문서작업을 할 때, 윈도우에서 컨트롤 키의 위치를 불편해한다.
나는 그냥 그럭저럭 쓸만해서 그냥 그대로 썼지만, 팔랑귀인지 다들 불편하다고 하니
나도 불편한거 같고, 새끼손까락이 짧아서 컨트롤 키를 누를 때 조금도 왼쪽으로 손목이 꺾이는 걸 볼 수 있다.

이번에 적응을 해볼 마음으로, 레오폴드는 딥 스위치로 저 둘의 위치를 바꾸었고,
그램은 레지스트리키로 위키를 바꾸었다. 아! 그램에 레지스트리를 바꿨으니, 레오폴드에서는 다시 원래대로 돌려놔야겠다 ㅎㅎ

윈도우10 에서 CapsLock, Ctrl Swaping 스위치 번경 방법이다.

  1. 레지스트리 이동
  2. 키보드 레이아웃 디렉토리로 이동 -> 주소창에 복사하면 됨.
    컴퓨터\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
    - Scancode Map
  3. 이진값 생성
  4. 생성 후 수정을 눌러 아래 코드를 입력 후 재부팅한다.
블로그 이미지

파니동

,