19.04.11 예외 처리, 예외 떠넘기기, 사용자 정의 예외

카테고리 없음 2019. 4. 11. 15:58
728x90
반응형

-예외 처리 코드-


예외가 발생했을 경우 프로그램의 갑작스러운 종료를 막고, 정상 싱행을
유지할 수 있도록 처리하는 코드
예외 처리 코드는 try-catch-finally 블록을 이용하고, 생성자 내부와 메소드 내부에서 작성함




-예외 처리 코드 (catch 순서)-


상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야 한다.
왜냐하면 하위 예외는 상위 예외를 상속했기 때문에 상위 예외 타입도 되기 때문이다.




-예외 떠넘기기-


throws 키워드는 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를
호출한 곳으로 떠넘기는 역할을 한다. throws 키워드 뒤에는 떠넘길 예외 클래스를
쉼표로 구분해서 나열해주면 된다.




-사용자 정의 예외-


애플리케이션 서비스와 관련된 예외를 애플리케이션 예외 또는 사용자 정의 예외 라고 한다.

사용자 정의 예외 클래스도 필드, 생성자, 메소드 선언들을 포함할 수 있지만 대부분 생성자 선언만 포함한다.

하나는 매개 변수가 없는 기본 생성자이고, 다른 하나는 예외 발생 원인(메시지)를 전달하기 위해 String 타입의 매개 변수를 갖는 생성자이다.

String 타입의 매개 변수를 갖는 생성자는 상위 클래스의 생성자를 호출하여 예외 메시지를 넘겨준다.


-예제 및 출력 결과-


예외가 발생되어 메소드 호출 위치로 예외가 떠넘겨짐


1
2
3
4
5
6
7
8
9
10
11
12
13
package com.hs.chap10;
 
public class BalanceInsufficientException extends Exception {
 
    public BalanceInsufficientException() {
 
    }
 
    public BalanceInsufficientException(String message) {
        super(message);
    }
}
 
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.hs.chap10;
 
public class Account {
 
    private long balance;
 
    public Account() {
 
    }
 
    public long getBalance() {
        return balance;
    }
 
    public void deposit(int money) {
        balance += money;
    }
                                       
    public void withdraw(int money) throws BalanceInsufficientException {  //사용자 정의 예외 떠넘기기
        if (balance < money) {
            throw new BalanceInsufficientException("잔고부족: " + (money - balance) + " 모자람");  //사용자 정의 예외 발생
        }                              
        balance -= money;
    }
}
 
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.hs.chap10;
 
public class AccountExample {
 
    public static void main(String[] args) {
        Account account = new Account();
 
        // 예금하기
        account.deposit(10000);
        System.out.println("예금액 : " + account.getBalance());
 
        // 출금하기
        try {
            account.withdraw(30000);
        } catch (BalanceInsufficientException e) {
            String message = e.getMessage();
            System.out.println(message);
            System.out.println();
            e.printStackTrace();
        }
    }
}
 




728x90
반응형
:

19.04.10 추상 클래스 / 메소드, 인터페이스

Back-End/Java 2019. 4. 10. 17:09
728x90
반응형

-추상 클래스 및 메소드 특징-


자체적으로 객체를 생성할 수 없다.
상속을 통해 자식 클래스에서 인스턴스를 생성해야 한다.
추상클래스는 추상 메소드, 일반 메소드, 필드(멤버변수), 생성자로 구성된다.
추상클래스와 추상메소드는 클래스와 메소드 앞에 abstract 키워드를 추가하면 된다.

 

-인터페이스-

 

추상클래스보다 더 추상도가 깊은 개념
필드는 모두 상수로 선언해야 한다.
메서드는 모두 추상메서드로 선언해야 한다.
추상클래스와 다른점은 다중상속이 가능하다는 점이다.

 

-인터페이스 식-

 

public interface 인터페이스_이름

{

필드(타입 상수명 = 값)

메소드( 추상, 디폴트, 정적 )

}

 

- 예제 및 출력 결과 -

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.hs.chap8;
 
public interface RemoteControl {
    // 상수 필드
    public int MAX_VOLUME = 10;
    public int MIN_VOLUME = 0;
 
    // 추상 메소드
    public void turnOn();
 
    public void turnOff(); // 메소드 선언부만 설정
 
    public void setVolume(int volume);
 
    // 디폴트 메소드
    default void setMute(boolean mute) {
        if (mute) {
            System.out.println("무음 처리합니다.");
        } else {
            System.out.println("무음 해제합니다.");
        }
    }
 
    // 정적 메소드
    static void changeBattery() {
        System.out.println("건전지를 교환합니다.");
    }
}
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.hs.chap8;
 
public class Audio implements RemoteControl {
 
    // 필드
    private int volume;
 
    // turnOn() 추상 메소드의 실체 메소드
    public void turnOn() {
        System.out.println("Audio를 켭니다.");
    }
 
    // turnOff() 추상 메소드의 실체 메소드
    public void turnOff() {
        System.out.println("Audio를 끕니다.");
    }
 
    // setVolume() 추상 메소드의 실체 메소드
    public void setVolume(int volume) {
        if (volume > RemoteControl.MAX_VOLUME) {
            this.volume = RemoteControl.MAX_VOLUME;
        } else if (volume < RemoteControl.MIN_VOLUME) {
            this.volume = RemoteControl.MIN_VOLUME;
        } else {
            this.volume = volume;
        }
        System.out.println("현재 Audio 볼륨:" + this.volume);
    }
}
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.hs.chap8;
 
public class RemoteControlExample {
    public static void main(String[] args) {
 
        RemoteControl rc = null;
 
        rc = new Television();
        rc.turnOn();
        rc.turnOff();
 
        rc = new Audio();
        rc.turnOn();
        rc.turnOff();
    }
}
 
cs

 

1
2
3
4
5
6
package com.hs.chap8;
 
public interface Searchable {
    void search(String url);
}
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.hs.chap8;
 
public class SmartTelevision implements RemoteControl, Searchable {
    private int volume;
 
    public void turnOn() {
        System.out.println("TV를 켭니다.");
    }
 
    public void turnOff() {
        System.out.println("TV를 끕니다.");
    }
 
    public void setVolume(int volume) {
        if (volume > RemoteControl.MAX_VOLUME) {
            this.volume = RemoteControl.MAX_VOLUME;
        } else if (volume < RemoteControl.MIN_VOLUME) {
            this.volume = RemoteControl.MIN_VOLUME;
        } else {
            this.volume = volume;
        }
        System.out.println("현재 TV 볼륨: " + this.volume);
    }
 
    public void search(String url) {
        System.out.println(url + " 을 검색합니다.");
    }
}
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.hs.chap8;
 
public class Television implements RemoteControl {
 
    // 필드
    private int volume;
 
    // turnOn() 추상 메소드의 실체 메소드
    public void turnOn() {
        System.out.println("TV를 켭니다.");
    }
 
    // turnOff() 추상 메소드의 실체 메소드
    public void turnOff() {
        System.out.println("TV를 끕니다.");
    }
 
    // setVolume() 추상 메소드의 실체 메소드
    public void setVolume(int volume) {
        if (volume > RemoteControl.MAX_VOLUME) {
            this.volume = RemoteControl.MAX_VOLUME;
        } else if (volume < RemoteControl.MIN_VOLUME) {
            this.volume = RemoteControl.MIN_VOLUME;
        } else {
            this.volume = volume;
        }
        System.out.println("현재 TV 볼륨: " + this.volume);
    }
}
 
cs

 

 

-출처-


-동영상 강의-
https://www.youtube.com/watch?v=XkSWgIQ2zkk

 

728x90
반응형
:

19.04.09 상속, final

Back-End/Java 2019. 4. 9. 17:39
728x90
반응형

-상속-


부모가 자식에게 물려주는 행위로 자식은 상속을 통해서 부모가 물려준것을 자연스럽게 이용할 수 있다.


부모클래스의 생성자 호출

-자식 클래스의 생성자 최상단에서 "super(매개값);" 명령어를 사용해서 부모클래스의
 생성자를 호출 한다.


상속하는 법

- public class "자식클래스 이름" extends "부모클래스 이름"


-예제 및 출력결과-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package chap07Inheritance;
 
public class chap07Inheritancefather {
    String model;
    String color;
    
    public chap07Inheritancefather()
    {
        System.out.println("부모 클래스의 생성자가 호출되었습니다.");
    }
    
    String name(String n) 
    {
        System.out.println("부모"+n+"메서드가 호출 되었습니다. ");
        return n;
    }
    
    public void print() 
    {
        System.out.println("super명령어 사용 메서드 호출");
    }
    
    public static void main(String[] args) {
        
 
    }
}
 
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package chap07Inheritance;
 
public class chap07Inheritance extends chap07Inheritancefather{ //자식인 chap07Inheritance클래스가 부모인 chap07Inheritancefather클래스를 선택해서 호출함
    int channel;
    
    chap07Inheritance (String model, String color, int channel)
    {
    super(); //부모클래스의 생성자 호출
    this.model = model; //부모클래스 필드 호출
    this.color = color; //부모클래스 필드 호출
    this.channel = channel;
    }
    
    String name(String n) //name 메소드를 부모 클래스에서 받고 내용을 수정한다.
    {
        System.out.println("오버라이딩 된 자식"+n+"메소드가 호출 되었습니다. ");
        return n;
    }
    
    public void print() //상속받은 부모클래스의 메소드를 호출
    {
        super.print();
    }
    
    void turnOnDmb() 
    {
        System.out.println("모델이름은"+model+"입니다.");
        System.out.println("색깔은"+color+"입니다.");
        System.out.println("채널은"+channel+"입니다.");    
    }
}
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package chap07Inheritance;
 
public class chap07InheritanceTest {
 
    public static void main(String[] args) {
        String n = "클래스";
        
        
        chap07Inheritance chap07Inheritance = new chap07Inheritance("모델이름 1","갈색",3);
        
        chap07Inheritance.turnOnDmb(); 
        
        chap07Inheritance.name(n); //오버라이딩으로 재정의된 자식 클래스의 메소드를 호출한다.
        
        chap07Inheritance.print(); //super 명령어를 사용해서 상속받은 부모클래스의 메소드를 호출
    }
}
 
cs


-final-

final이 지정되면 초기값 설정 후, 더 이상 값을 변경할 수 없다.

또한 final 클래스는 부모 클래스가 될수 없어 자식 클래스를 만들 수 없다. 메소드도 마찬가지 이다.


-final 클래스호출시 오류-


-final 메소드 호출-



728x90
반응형
:

19.04.08 어노테이션,Getter / Setter 메소드

Back-End/Java 2019. 4. 8. 17:39
728x90
반응형

- 어노테이션이란? -


컴파일 과정과 실행과정에서 코드를 어떻게 컴파일하고 처리할 것인지를 알려주는 정보


@Override
선언한 메서드가 오버라이드 되었다는 것을 나타냅니다.
만약 상위(부모) 클래스(또는 인터페이스)에서 해당 메서드를 찾을 수 없다면 컴파일 에러를 발생 시킵니다.


@Deprecated
해당 메서드가 더 이상 사용되지 않음을 표시합니다.
만약 사용할 경우 컴파일 경고를 발생 시킵니다.


@SuppressWarnings
선언한 곳의 컴파일 경고를 무시하도록 합니다.


@SafeVarargs
Java7 부터 지원하며, 제너릭 같은 가변인자의 매개변수를 사용할 때의 경고를 무시합니다.


@FunctionalInterface
Java8 부터 지원하며, 함수형 인터페이스를 지정하는 어노테이션입니다.
만약 메서드가 존재하지 않거나, 1개 이상의 메서드(default 메서드 제외)가 존재할 경우 컴파일 오류를 발생 시킵니다.


-출처-

https://elfinlas.github.io/2017/12/14/java-annotation/



-Getter 메소드-
필드값을 가공한 후 외부로 전달하는 메소드



-Setter 메소드-
매개값을 검증해서 유효한 값만 데이터로 저장하는 메소드



-예제 및 출력값-


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package chap06_Getter_Setter;
 
public class GetterSetter {
    private int speed; // 필드선언
    private boolean stop;  //필드선언
    
    public int getSpeed() 
    {
        return speed; //speed를 리턴
    }
    
    public void setSpeed(int speed)  //speed를 매개변수로 받음 
    {
        if(speed < 0//speed가 0보다 작을 시(음수가 나올시에)에는 0를 리턴하고 아닐시에는 그 속도를 그대로 쓴다.
        {
            this.speed = 0;
            return;
        }
        else 
        {
            this.speed = speed;
        }
    }
    
    public boolean isStop() //boolean은 논리타입 (참,거짓 판별)
    {
        return stop; //stop를 리턴
    }
    
    public void setStop(boolean stop) 
    {
        this.stop = stop;  
        this.speed = 0;   
    }
}
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package chap06_Getter_Setter;
 
public class GetterSetterCar {
 
    public static void main(String[] args) {
        GetterSetter myCar = new GetterSetter();
        
        //잘못된 속도 변경
        myCar.setSpeed(-50);
        
        System.out.println("현재 속도: "+myCar.getSpeed());
        
        
        //올바른 속도 변경
        myCar.setSpeed(60);
        
        //멈춤
        if(!myCar.isStop()) 
        {
            myCar.setStop(true);
        }
        System.out.println("현재 속도: "+myCar.getSpeed());
    }
}
 
cs


728x90
반응형
:

19.04.06 Class(필드, 생성자 오버로딩)

Back-End/Java 2019. 4. 6. 18:42
728x90
반응형

-Field-

필드는 객체의 고유데이터, 상태 정보를 저장하는 곳.

필드는 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재한다.

 

-예제 및 출력결과-

 

1
2
3
4
5
6
7
8
9
10
11
package chap4_field;
 
public class Car {
    // 필드 생성 (멤버변수)
    String company = "현대자동차";
    String model = "그랜저";
    String color = "검정";
    int maxSpeed = 350;
    int speed;
    
}
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package chap4_field;
 
public class CarExample {
 
    public static void main(String[] args) {
        
        Car myCar = new Car(); //new 키워드를 사용해서 car객체를 만들고 변수 mycar가 참조하게 한다
        
        //필드값 읽기
        System.out.println("제작회사: "+myCar.company);
        System.out.println("모델명: "+myCar.model);
        System.out.println("색깔: "+myCar.color);
        System.out.println("최고속도: "+myCar.maxSpeed);
        System.out.println("현재속도: "+myCar.speed);
        
        //필드값 변경
        myCar.speed = 60;
        System.out.println("수정된 속도: "+myCar.speed);
    }
}
 
cs

 

 

-출처-

https://programmers.co.kr/learn/courses/5/lessons/140

 

 

 

-생성자-

생성자의 역할은 객체 생성 시 초기화를 담당.

클래스 이름으로 되어 있고 리턴 타입이 없다.

 

 

-생성자 오버로딩-

매개 변수를 달리하는 생성자를 여러개 선언하는 것.

 

-예제 및 출력결과-

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package chap4_field;
 
public class CarOverloading {
    //필드선언
    String company = "현대자동차";
    String model;
    String color;
    int maxSpeed;
 
    //기본 생성자
    CarOverloading()
    {
        
    }
    
    CarOverloading(String model)
    {
        this.model = model; //this를 써서 필드이름과 변수를 구분해 준다. 
    }
    
    CarOverloading(String model, String color)
    {
        this.model = model;
        this.color = color;
    }
 
    CarOverloading(String model, String color, int maxSpeed)
    {
        this.model = model;
        this.color = color;
        this.maxSpeed = maxSpeed;
    }
}
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package chap4_field;
 
public class CarExampleOverloading {
 
    public static void main(String[] args) {
        CarOverloading car1 = new CarOverloading(); //company 필드에 현대자동차라는 값이 있기 때문에 그 값을 참조해서 출력한다.
        System.out.println("car1.company: " +car1.company);
        System.out.println();
        
        CarOverloading car2 = new CarOverloading("자가용");
        System.out.println("car2.company: " +car2.company);
        System.out.println("car2.model: " +car2.model);
        System.out.println();
        
        CarOverloading car3 = new CarOverloading("자가용","빨강");
        System.out.println("car3.company: " +car3.company);
        System.out.println("car3.model: " +car3.model);
        System.out.println("car3.color: " +car3.color);
        System.out.println();
        
        CarOverloading car4 = new CarOverloading("택시","검정",200);
        System.out.println("car4.company: " +car4.company);
        System.out.println("car4.model: " +car4.model);
        System.out.println("car4.color: " +car4.color);
        System.out.println("car4.maxSpeed: " +car4.maxSpeed);
    }
}
 
 
cs

 

 

-출처-

https://programmers.co.kr/learn/courses/5/lessons/171

728x90
반응형

'Back-End > Java' 카테고리의 다른 글

19.04.09 상속, final  (0) 2019.04.09
19.04.08 어노테이션,Getter / Setter 메소드  (0) 2019.04.08
19.04.05 다차원 배열, 향상된 for문  (0) 2019.04.05
19.04.04 random, Scanner  (0) 2019.04.04
19.04.03 예외처리, Integer, eqals()  (0) 2019.04.03
:

찾아봐야 될것들( IoC 컨테이너,POJO)

개인 공부 2019. 4. 5. 17:45
728x90
반응형


728x90
반응형

'개인 공부' 카테고리의 다른 글

백엔드, 프론트엔드 로드맵  (0) 2019.05.14
웹 프로그래머 포트폴리오 작성 팁  (0) 2019.05.13
공부해야될것들  (0) 2019.05.13
홈페이지 디자인 다운받을만한 곳  (0) 2019.05.07
리눅스 공부  (0) 2019.05.02
:

19.04.05 다차원 배열, 향상된 for문

Back-End/Java 2019. 4. 5. 17:39
728x90
반응형

- 다차원 배열 -


다차원 배열은 1차원 배열과 달리 수학의 행렬을 생각하고, 배열의 요소로 또다른 배열을 갖는 것을 의미한다.

예를들면 int[2][3]; 배열이 있으면 길이가 2인 배열 안에 길이가 3인 배열이 2개 있는것이다.



-출처-

https://blog.naver.com/myroom9/221172213230




-향상된 for문-


향상된 반복문은 for(타입 변수명 : 배열 또는 컬렉션)

{

반복할문장;

}

으로 사용한다.


이때 변수의 타입은 배열의 타입과 같아야 한다.

향상된 반복문은 배열에 저장된 값을 순서대로 읽어서 변수에 저장하고

배열에 저장된 값을 모두 저장하면 반복문에서 나가진다.

배열에 저장된 요소를 읽어내는 용도로 사용하면 된다.


-예제 및 출력-


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package chap05.array;
 
public class array 
{
public static void main(String[] args) 
    {
        int[] scores = { 9571849387 };
        int sum = 0;
        for (int score : scores) //scores 배열의 원소
        {
            sum = sum + score;
        }
        System.out.println("점수 총합 = "+sum);
        double avg = (double) sum /scores.length;
        System.out.println("점수 평균 = " +avg);
    }
}
 
cs



-출처-

https://blog.naver.com/sjw7324/221482728452



728x90
반응형
:

19.04.04 random, Scanner

Back-End/Java 2019. 4. 4. 17:13
728x90
반응형

-random-


(int)(Math.random()*'숫자')+'시작할숫자' = 랜덤으로 숫자 뽑을때 사용
main() 메서드 안에 'Random'을 타이핑하고 'Ctrl'+ 'Space'를 동시에 누르면 창이뜨고,맨위의 'Random - java.util'을 선택합니다.


ex)int num = (int)(Math.random()*6)+1;
(1에서 6까지의 랜덤한 숫자값이 num에 저장됨)


- 예제 및 출력된 값 -

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package chap04.chp4;
 
import java.util.Scanner;
 
public class DoWhileExample 
{
    public static void main(String[] args) 
    {    
        while(true)   //1부터 6까지 랜덤하게 숫자를 출력하고 6이 출력되면 멈추는 반복문
        {
            int num = (int)(Math.random()*6)+1;
            System.out.println(num);
            if(num == 6
            {
                break;
            }
        }
        System.out.println("프로그램 종료");
    }
}
 
cs


-출처-

https://blog.naver.com/battle1316/221427655924

https://blog.naver.com/kimhecan/221497351909



- Scanner -


Scanner scanner = new Scanner(System.in);

//Scanner에 드래그 하고 컨트롤, 쉬프트, O동시에 눌러서 import java.util.Scanner; 추가
  
String inputString=scanner.nextLine();
//엔터키를 누르기 전까지 사용자가 입력한 값을 입력을수 있다(c언어의 scanf같이 키보드에서 입력받을때 사용)



- 예제 및 출력된 값 -


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package chap04.chp4;
 
import java.util.Scanner;
public class formun 
{
    public static void main(String[] args) 
    {    
        while(true)
        {
            System.out.println("____________________________");
            System.out.println("1.예금 | 2.출금 | 3.잔고 | 4.종료");
            System.out.println("____________________________");
            
            Scanner scanner = new Scanner(System.in);
            String inputString = scanner.nextLine();
            
            System.out.println("선택> "+inputString);
            break;
        }
    }
cs




-출처-

https://manniz.tistory.com/54









728x90
반응형
: