AD

전수진 공부 프로젝트 트게더를 만들어보자 - 클래스(상속),예외처리

모데충
2022-08-08 18:09:55 149 3 1

안녕하세요. 오랜만에 글을 씁니다. 이제 이 글을 끝으로 자바는 마감을 하게 됩니다. 트게더를 제작하는데 있어서 꼭 필요한 부분만을 작성했기 때문에 기타의 다른 부분들은 추후에 기회가 된다면 다뤄보도록 하겠습니다.


먼저 상속입니다. 상속은 말 그대로 물려받는 것입니다. 우리가 통념적으로 생각하는 상속과 크게 다를바 없습니다. 상속을 하게 되면 부모의 모든 것을 물려받듯이 자바에서 말하는 상속도 같습니다. 그러면 상속은 어떻게 하는지부터 방법을 알아야겠죠? 예전에 만들어뒀던 Calculator클래스를 상속받아 보도록 하겠습니다. 방법은 아래의 사진과 같습니다.

2111d2cbcdafe129fc8fed36be8dd80a.png

클래스 선언부 옆에 extends [상속받을 클래스명]로 쓰시면 됩니다. 이때 상속받을 클래스를 '부모 클래스'라고 하며 상속받은 클래스를 '자식 클래스'라고 합니다.  그러면 상속을 받으면 할 수 있는것이 뭐냐? 바로 부모 클래스를 활용할 수 있습니다.

e32cbb3b601f1ea4a12272249bc4deb3.png

단 여기서 접근제어자에 따라서 활용할 수 있는 범위가 달라지는데 지지난 글을 확인해 보신 분들은 아시겠지만 private 접근 제어자를 가진 요소들은 상속을 받아도 활용할 수가 없습니다. 예시로 자식클래스에서 private 접근제어자를 가진 Calc와 public 접근제어자를 가진 print를 사용해보겠습니다.


지난 숙제 시간에 Getter와 Setter메소드를 자동으로 만들어주는 기능을 소개해드린 적이 있습니다. 상속받은 메소드들도 자동으로 만들어주는 기능이 있습니다. 

방법 : 해당 클래스 내에서 Alt + Insert 입력 -> Override Methods 클릭 or Ctrl + O 단축키 입력

6d6356ea9fe661a3ce4cd1e6cb445682.png이렇게 창을 열게 되면은 print라는 메소드는 목록에 표시되지만 Calc메소드는 표시가 안되는 것을 볼 수가 있습니다. 이것은 접근제어자가 private이기 때문에 자식 클래스에서는 사용이 불가능한 것입니다. 


알고 넘어가면 좋은 특이한 사항이 하나가 더 있는데 우리는 Calculator클래스를 상속 받았는데 아래에 보니까 Object라는 클래스가 하나가 더 있는 것이 보여집니다. Object클래스가 상속되어 있는 이유는 Object는 모든 클래스에 최상위 부모 클래스입니다. 한마디로 조상님이라고 이해하시면 됩니다. 그래서 어떤 클래스를 만들든 기본적으로 Object 클래스가 상속되어져 있게 됩니다.


자 이제 그러면 상속받은 메소드로 뭘 할수 있는지 알아봐야겠죠?  바로 메소드 재정의(Overriding)다. 쉽게 말하면 부모 클래스에서 만든 메소드를 내 입맛에 맞도록 꾸밀 수 있는 것이다. 

쉽게 이해할 수 있도록 예시를 들어보겠습니다. A의 부모님은 건물주였는데 A의 부모님이 돌아가시면서 A에게 가지고 있던 건물을 상속해 주셨습니다. 그 건물은 총 3층인데 1~3층 모두를 지인에게 싼값에 임대료를 받으면서 임차해주었습니다. 그런데 이것을 상속받은 A가 임차인들에게 주변에 시세만큼 임대료를 올려 받겠다며 통보를 하였습니다. 싫다면 나가라고 하였습니다. 


여기서 이 예시를 보면은 A가 상속 받은 건물에 권리를 행사하는 것은 A의 당연한 권리이자 자유입니다. 이와 마찬가지로 메소드 재정의도 상속을 받았으면 상속을 받은 자식 클래스가 자신의 입맛에 맞도록 수정할 수 있도록 한 것입니다. 그러면 예시 코드를 통해서 재정의를 해보도록 하겠습니다. 

eb1e4020e8acf6e7872996861ed8c7c6.png

20번 라인 : 앞에 @표시가 붙은 것들을 어노테이션(Annotation)이라고 하는데 쉽게 설명하자면 아래의 메소드 혹은 클래스등에 관한 정의를 표시한 것입니다. 지금은 Override라고 되어 있으니 부모클래스로부터 상속받아 재정의한다는 의미입니다.


22번라인 : super.getAdd_result()의 의미는 부모클래스에 정의되어 있는 getAdd_result()로 값을 반환한다는 뜻입니다.

607c6ab9d7fa00e1090560b72aece77d.png

부모클래스에는 그냥 추가적인 동작이 없이 값을 반환하는 것을 볼 수가 있습니다. 


자 그러면은 어떻게 재정의를 할 것이냐면 Add_result 메소드는 원래 a와 b를 더한 값을 반환하는 메소드인데 저는 계산 결과를 무시하고 그냥 무조건 100이 나오도록 고쳐보겠습니다. 아래와 같이 하시면 됩니다.

f1dd39df2997290a7688c6527086f910.png

그럼 이제 상속받은 newCalc를 써서 계산기를 실행해보겠습니다.

98484747e5ebbd1b24a6c26fde2ea48a.png

결과는 아래와 같습니다.

aa23712e1f7a639bd28dea0bacd10bdf.png

덧셈의 결과를 강제로 100으로 고정시켰더니 복제 계산기의 덧셈부가 틀어져 버린것을 확인할 수가 있습니다.

상속은 이정도까지만 이해하시면 될듯 합니다.


그럼 마지막으로 예외처리에 대해서 알아보고 글을 마치도록 하겠습니다. 예외처리란 내가 작성한 코드가 뜻밖에 상황(코딩오류,외부오류)에 대처할 수 있도록 하는 기능입니다. 예외처리가 필요한 이유는 간단합니다. 프로그램이 멈추지 않도록 하기 위함입니다.


여러분들은 까마귀 자판기라는 것을 들어보신적 있으신가요? 까마귀 자판기란 까마귀가 자판기에 길가에 있는 쓰레기를 넣으면

먹이를 뱉는 자판기를 말합니다. 처음에는 자판기를 제작한 제작자의 의도대로 까마귀들이 쓰레기를 줏어왔으니 시간이 지나면서 까마귀들이 자판기의 원리를 파악하여 쓰레기가 아닌 돌을 집어넣어서 먹이를 가져가서 제작자의 의도를 벗어난 일이 발생했습니다. 만약 쓰레기가 아닌 다른 것들이 들어왔을때 먹이를 주지 않는 조건이 있었다면 까마귀들은 제작자의 의도대로 계속해서 쓰레기를 가져왔을 것입니다.


이처럼 프로그램의 기획을 벗어난 일이 발생했을때 오류가 발생하여 프로그램이 셧다운 되는 것을 방지하는 것이 바로 예외처리입니다.  간단한 예제로 확인해 보도록 하겠습니다. 


2fa4e038127ed40709bbb278947764c3.png

미리 선언된 배열보다 더 큰 주소값에 데이터를 넣어봤습니다. 결과는 아래와 같습니다.


92bdf3395e6a1ffc7792c532a47e6fbe.png

ArrayIndexOutOfBoundsException 이라는 에러가 발생하면서 아래에 있는 println문이 실행되지 않고 종료되어 버렸습니다.

예외처리를 이용하여 해당 에러가 발생해도 아래의 출력문이 실행되도록 해보겠습니다.

55aa2737d5a7aba607190b4703c51568.png

여기서 try는 에러가 발생될 범위를 감시한다는 뜻입니다. 그리고 ArrayIndexOutOfBoundsException에러가 발생하게 되면은

30라인에 있는 ArrayIndexOutOfBoundsException에서 해당 에러에 대한 대응을 하게 됩니다. 다시 코드를 실행시켜보면 결과는 아래와 같습니다.


c9e01c2bedebd4bc4dc26b047b9163f5.png

에러가 발생했지만 해당에러를 담당하는 catch부에서 예외처리를 하여 다음 코드로 넘어가도록 했습니다.

또한 catch문을 여러개 작성이 가능합니다.

c1d6eb633de5fabe8f70203da11a0a17.png

이런식으로 상황에 맞는 에러가 발생하면 그에 따른 대응을 해줄 수도 있습니다.


이번 글은 여기서 마치도록 하겠습니다. 아쉽지만 이번글에는 치킨이 없습니다. ㅠㅠ 오늘 작성한 코드입니다.


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
37
38
39
40
41
42
43
44
45
46
package com.java_lanuage;
 
public class Extends{
 
 
 
    //2.상속받은 newCalc클래스를 사용해보자!
    public static void main(String[] args) {
        
        newCalc copy_calc = new newCalc();
        Calculator real_calc = new Calculator();
        real_calc.setting(1,3);
        copy_calc.setting(1,3);
        System.out.println("========================================");
        System.out.println("원래 계산기의 결과 값은?");
        real_calc.print();
        System.out.println("========================================");
        System.out.println("복제 계산기의 결과 값은?");
        copy_calc.print();
 
         
 
        //3.예외처리(Exception)를 사용해보자!
        int[] temp = new int[10];//길이가 10인 정수형 배열 선언
        try{
        temp[11] = 12;
        System.out.println(temp[11]);
        }catch (ArrayIndexOutOfBoundsException e){
            e.printStackTrace();
            System.out.println("지정된 배열주소를 초과하는 데이터가 들어왔습니다.");
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println("다음 코드를 실행합니다.");
 
    }
 
}
//1.메소드를 재정의(Overriding)해보자!
class newCalc extends Calculator{
    @Override
    public int getAdd_result() {
        return 100;
    }
}
 
cs


드디어 자바의 순서가 마무리 되었습니다. 지금까지 봐주신 분들과 치킨을 뜯어가신 분들께 깊은 감사의 말씀을 드립니다.

모르는 부분이 있다면 가감없이 물어봐주시면 최선을 다해서 설명드리도록 하겠습니다. 그래서 나중에는 좋은 유종의 미를 거둬서 여러분들의 식견을 넓히는데 조금이나마 도움이 되시기를 바랍니다.


다음 시간부터는 이제 실질적으로 데이터를 관리하는 공간인 데이터베이스 즉 'DB'에 대해서 공부해보도록 하겠습니다. 

이전과 지금도 모든분들께 감사드리며 글을 마치는 순간까지 항상 감사드립니다.

후원댓글 1
댓글 1개  
이전 댓글 더 보기
이 글에 댓글을 달 권한이 없습니다. 로그인해 보세요.
▲윗글 오방없인가? 고기먹는판다
▼아랫글 오뱅있? 푸른작약
잡담신고팬아트건의함게임추천이벤트순클립전수진 공부 프로젝트음식을 올려보아요마지막 클립 불태우기
2
잡담
내일 방?송
고기먹는판다
08-11
4
08-10
3
음식을 올려보아요
치파게티 [3]
베롱베롱호리
08-10
4
08-10
3
잡담
앗 순튜브 [6]
푸른작약
08-10
6
잡담
ㄱㅇㅇ ㄱㅇㅇ [6]
푸른작약
08-10
3
08-10
2
순클립
220809 오늘의 클립 [3]
소눈확
08-10
4
잡담
코로나였네요 [3]
5강무기
08-10
14
팬아트
하츠네 당무 [3]
현생맨
08-10
3
잡담
내일 방?송
고기먹는판다
08-10
1
잡담
우두루 봄은 왔다...
고기먹는판다
08-10
12
08-09
6
잡담
다들 몸조심 하세요 [4]
5강무기
08-09
16
잡담
오늘 뱅 11시... [12]
Broadcaster 순당무
08-09
1
잡담
응애… [2]
고기먹는판다
08-09
5
잡담
오늘은 화요일... [4]
순무당_김울프
08-09
7
잡담
다들 살아계시죠? [4]
푸른작약
08-09
6
잡담
방장 집에는 잘 드갔지? [1]
잉굴다이
08-09
6
잡담
오뱅 없지 그치? [4]
푸른작약
08-08
9
잡담
와 내일 수강신청 [7]
미노일세
08-08
4
전수진 공부 프로젝트
[뇌피셜] 현재 롤이 안돼는 이유 [2]
모데충
08-08
7
잡담
수도권은 물폭탄이라는데 [5]
프런티어_
08-08
6
잡담
롤 서버 터진듯? [2]
프런티어_
08-08
2
잡담
방장도 이 밈을 알까?
지갑속복권
08-08
2
잡담
오방없인가? [3]
고기먹는판다
08-08
»
전수진 공부 프로젝트
트게더를 만들어보자 - 클래스(상속),예외처리 [1]
모데충
08-08
3
잡담
오뱅있? [6]
푸른작약
08-08
10
잡담
오늘자 순스타 [9]
푸른작약
08-08
4
잡담
오늘의 순스타 [3]
고기먹는판다
08-07
인기글 글 쓰기