본문 바로가기

Java

JSCODE 5회차

이번 회차는 상속, 오버라이딩, 메서드 분리에 대해서 공부했다.

 

상속

 현실 세계에서 부모가 자식에서 재산을 물려주는 것과 비슷하다. 부모 클래스를 상속 받은 자식 클래스는 부모의 속성이나 행위를 그대로 물려받을 수 있다.

 

오버라이딩

 상위 클래스가 가진 메서드를 하위 클래스에서 재정의 하는 것 

 오버로딩은 같은 이름을 가진 메서드를 파라미터의 유형, 개수를 다르게 해서 여러 개 정의하는 것이다.

 

 

연습 문제

공학용 계산기 만들기 1

요구 사항:  Calculator 클래스를 만들어라. 

 

코드

package jscode5;

public class Calculator {

    public int add(int value1, int value2) {
        return value1 + value2;
    }

    public int minus(int value1, int value2) {
        return value1 - value2;
    }

    public int multiply(int value1, int value2) {
        return value1 * value2;
    }

    public int divide(int value1, int value2) {
        return value1 / value2;
    }
}

실행

public class Main {

    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        System.out.println("3+4는 " + calculator.add(3, 4) + "입니다.");
        System.out.println("6-2는 " + calculator.minus(6, 2) + "입니다.");
        System.out.println("2*9는 " + calculator.multiply(2, 9) + "입니다.");
        System.out.println("9/3은 " + calculator.divide(9, 3) + "입니다.");
    }
}

결과

 

공학용 계산기 만들기 2

요구사항: Calculaotr 클래스를 상속 받아 제곱을 해주는 기능이 추가된 ScientificCalculator 클래스 생성

 

코드

package jscode5;

public class ScientificCalculator extends Calculator {
    public int square(int value) {
        return value * value;
    }
}

- Calculator 클래스를 상속받기 때문에 덧셈, 뺄셈, 곱셈, 나눗셈의 기능은 그대로 물려받기 때문에 제곱 기능만 추가해주면 된다.

 

Cat 클래스 만들기 1

 

코드 

package jscode5;

public class Cat {
    public void soundGenerally() {
        System.out.println("야옹");
    }

    public void soundCutely() {
        System.out.println("냥냥");
    }

    public void soundAngry() {
        System.out.println("크르릉");
    }
}

실행

import jscode5.*;

public class Main {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.soundGenerally();
        cat.soundCutely();
        cat.soundAngry();
    }
}

결과

Cat 클래스 만들기 2

요구사항: 크르릉 대신 크르르르릉으로 화난 소리를 해는 AngryCat 클래스를 Cat 클래스를 상속받아 생성

package jscode5;

public class AngryCat extends Cat{
    @Override
    public void soundAngry() {
        System.out.println("크르르르르르냐아아아앙");
    }
}

 - 마찬가지로 화난 소리 외에 고양이가 내는 소리는 동일하기 때문에 Cat을 상속받고 soundAngry() 메서드만 오버라이딩

 

실행

import jscode5.*;

public class Main {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.soundGenerally();
        cat.soundCutely();
        cat.soundAngry();

        AngryCat angryCat = new AngryCat();
        angryCat.soundGenerally();
        angryCat.soundCutely();
        angryCat.soundAngry();
    }
}

결과

 

5회차 미션

 

2회차 미션과 동일

https://dev-yongsu.tistory.com/3

 

JSCODE 2회차

연습 문제 2회차 연습 문제는 Practice 클래스 안에 메서드로 선언하여 해결했다. 내 이름 출력하기 public void inputName() { System.out.println("이름을 입력하세요."); Scanner scanner = new Scanner(System.in); String na

dev-yongsu.tistory.com

요구사항

- ArrayList를 사용하지 마라.

- 삼항 연산자를 쓰지 마라.

- 하나의 메서드 내부 로직의 길이는 10줄 이하

- 구글 컨벤션 적용

-  ExamProgram의 execute() 메서드의 길이도 8줄 이하

 

코드

package jscode5;

import java.util.Scanner;

public class ExamProgram {
    private final Scanner scanner = new Scanner(System.in);
    private int groupNum, htmlScore, cssScore, javascriptScore;
    public void execute() {
        input();
        int min = findMin();
        int max = findMax();
        double avg = calculateAvg();
        boolean isPass = checkPass(avg);
        printResult(isPass, max, min, avg);
    }

    private void input() {
        groupNum = inputData("몇 기인지 입력해주세요.");
        htmlScore = inputData("HTML 과목 점수를 입력해주세요.");
        cssScore = inputData("CSS 과목 점수를 입력해주세요.");
        javascriptScore = inputData("Javascript 과목 점수를 입력해주세요.");
    }
    private int inputData(String inputText) {
        System.out.println(inputText);
        return scanner.nextInt();
    }

    private int findMin() {
        int min = Math.min(htmlScore, cssScore);
        return Math.min(min, javascriptScore);
    }

    private int findMax() {
        int max = Math.max(htmlScore, cssScore);
        return Math.max(max, javascriptScore);
    }

    private double calculateAvg() {
        return (double) (htmlScore + cssScore + javascriptScore) / 3;
    }

    private boolean checkPass(double avg) {
        if (checkTwoMorePerfect(htmlScore, cssScore, javascriptScore)) {
            return true;
        }
        else {
            if (groupNum == 3) return avg >= 70;
            else return avg >= 60;
        }
    }

    private boolean checkTwoMorePerfect(int htmlScore, int cssScore, int javaScriptScore) {
        int count = 0;
        if (htmlScore == 100) count++;
        if (cssScore == 100) count++;
        if (javaScriptScore == 100) count++;
        return count >= 2;
    }

    private void printResult(boolean isPass, int max, int min, double avg) {
        if (isPass) System.out.println("합격입니다.");
        else System.out.println("불합격입니다.");
        System.out.println("전체 과목 중 최고점은 " + max + "점입니다.");
        System.out.println("전체 과목 중 최저점은 " + min + "점입니다.");
        System.out.println("전체 과목의 평균은 " + avg + "점입니다.");
    }
}

1. 각 점수와 기수를 입력하라는 텍스트를 파라미터로 받는 inputData() 메서드에서 입력을 수행하고, 이를 input() 메서드에서 한번에 수행한다.

2. 입력한 점수를 이용하여 최댓값, 최솟값을 반환하는 findMax(), findMin() 메서드를 정의

3. 평균을 계산하는 calculateAvg() 메서드 정의

4. 위에서 입력한 값과 계산된 평균을 이용하여 합불 여부를 반환하는 checkPass() 메서드 정의

5. 100점인 과목이 2개 이상인지 판단하는 checkTwoMorePerfect() 메서드는 checkPass()에서 사용한다.

6. 마지막으로 결과를 출력하는 printResult() 정의

7. 위에서 정의한 메서드들을 execute()에서 순차적으로 실행

 

실행

import jscode5.*;

public class Main {
    public static void main(String[] args) {
        ExamProgram examProgram = new ExamProgram();
        examProgram.execute();
    }
}

결과

github: https://github.com/ParkYongSu/JSCODE

 

GitHub - ParkYongSu/JSCODE: jscode java study

jscode java study. Contribute to ParkYongSu/JSCODE development by creating an account on GitHub.

github.com

 상속의 개념은 대략적으로 알고 있었지만, 실무에서 개발을 할 때 잘 사용하지는 않았다. 사용법이 익숙하지 않고 귀찮아서 그랬던 것 같다.

이번 회차에서 상속에 관련된 예제들을 사용해 보았다. 간단한 예시였지만 실무에서 사용하면 개발 완성도와 효율성이 증가할 수 밖에 없겠다라는 생각을 하게 되었다.

'Java' 카테고리의 다른 글

JSCODE 7회차  (1) 2023.02.24
JSCODE 6회차  (1) 2023.02.20
JSCODE 4회차  (2) 2023.02.13
JSCODE 3회차  (1) 2023.02.09
JSCODE 2회차  (1) 2023.02.06