티스토리 뷰

Java/Java Study 기록 일지

JSON 백엔드 자바 5회차

응애~ 개발자 2023. 2. 17. 01:24
728x90
반응형

연습문제

공학용 계산기 만들기

덧셈, 뺄셈, 나눗셈, 곱셈이 있는 일반 계산기(Calculator)가 너무 잘 팔린다. 자신감을 얻은 Jason이 덧셈, 뺄셈, 나눗셈, 곱셈 뿐만 아니라 제곱(x^2)을 계산해주는 기능을 가진 공학용 계산기(ScientificCalculator)도 추가로 만들어서 팔려고 한다.

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) + "입니다.");
  }
}

위 코드를 실행하면 아래와 같이 출력돼야 한다.

3+4는 7입니다. 
6-2는 4입니다.
2*9는 18입니다.
9/3은 3.0입니다.

계산기(Calculator) 클래스를 만들어라. (Main의 파일에 클래스를 작성하지 말고, 별도의 파일을 만들어라.)

필요한 문법

  • 클래스
  • 상속

문제 풀이

 구현 해야 할것은 아래 부분이다.

  1. Calculator 클래스 만들기
  2. ScientificCalculator 클래스 만들기
  3. ScientificCalculator  Calcuator 상속 하기

일단 Calculator 부터 만들어야 한다.

Calculator .java

public class Calculator {
	
	public int add(int x, int y) {
		return x + y;
	}
	
	public int minus(int x, int y) {
		return x - y;
	}
	
	public int multiply(int x, int y) {
		return x * y;
	}
	
	public float divide(int x, int y) {
		return x / y;
	}

}

 그 다음에는 ScientificCalculator 구현하면된다.

ScientificCalculator.java

public class ScientificCalculator extends Calculator {

  public int square(int x) {
    return x * x;
  }
}

  여기서 중요한것은 상속이라는 개념이다. 상속은 부모객체로 부터 물려받는 것이다. 쉽게 설명하면 부모클래스를 상속받으면 부모 클래스의  필드나 메소드를 사용할수 있다. 사용하는 방법은 자식 클래스 extends 부모 클래스 선언하면된다.

상속의 사용하는 이유는 여러 클래스에 여러 메소드 사용할수가 있다 하지만 여러 클래스에서 공통 되는 기능이 많으면 하나의 클래스에서  공통된 기능을 넣고 상속받으면 사용하면 코드 관리 편하기 쉽다. 그러면 유지보수가 하기가 편하다.

 

고양이 인형 만들기

 Jason이 만든 고양이 인형이 히트를 쳤다. 고양이 인형을 한 종류 더 만들어서 팔려고 한다. 이번에는 기존 고양히 인형에서 화난 소리를 조금 더 리얼하게 바꿔서 인형을 만들기로 했다. “크르릉”에서 “크르르르르르냐아아아앙”으로 바꿔서 만들어보자.

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();
  }
}
야옹
냥냥
크르릉
야옹
냥냥
크르르르르르냐아아아앙

필요한 문법

  • 클래스
  • 상속
  • 오버라이드

문제 풀이

 이번에는 오버라이드만 할줄 알면 되기 때문에 오버라이드만 간락하게 설명하겠다. 오버라이드는 상속받은 부모클래스에서 메소드를 재정의 한것이다. 즉 부모클래스 메소드를 자기자신만의 기능으로 변경할수있다. 오버라이드를 사용한 이유는 부모의 클래스 기능에서 조금 더 추가하거나 메소드 명 짓기에도 용이하다고 보면된다. 그리고 부모 클래스 메소드를 부를때는 super라는 것만 알면 된다. 구현 하는 방법은 위에 문제랑 같기 때문에 따로 설명 안하겠다.

Cat.java

public class Cat {

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

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

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

AngryCat.java

public class AngryCat extends Cat {

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

}

JSCODE 학교의 시험 채점기

2회차 미션 때 수행했던 문제이다. 그런데 조금 더 요구사항이 더 붙었다. 다시 구현해보자.

아래와 같이 작동하도록 코드를 작성해라. (아래의 3가지 Case에 대해 전부 잘 작동해야 한다.)

  • ArrayList를 사용하지 마라.
  • 삼항 연산자를 쓰지 마라.
  • JSCODE 1~3기가 시험을 봤다. 1, 2기는 평균 점수가 60점 이상이어야 합격이다. 3기는 평균 점수가 70점 이상이어야 합격이다. 다만, 100점 과목이 2개 이상일 경우 평균 점수와 상관없이 합격이다.
    • 합격일 경우 합격입니다.라는 문구를 출력해야 한다.
    • 불합격일 경우 불합격입니다.라는 문구를 출력해야 한다.
  • 아래의 코드를 실행시켰을 때 정상 작동되게 만들어라.
package ch5.practice.jscodeexam;

public class Main {

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

문제 풀이

 이번 문제는 main안에 아니라 ExamProgram 클래스에서 각 메소드로 분할 해서 할 예정이다. 각 구현할 메소드는 아래와 같다.

  • 입력
  • 평균
  • 합격여부
  • 최고점
  • 최저점
  • 출력

 

각 구현한것은 아래 코드를 보면 된다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class ExamProgram {

  static int HTML, CSS, Javascript, number;
  static int[] gradles;
  StringBuilder sb = new StringBuilder();

  public void execute() throws NumberFormatException, IOException {

    input();// 입력
    gradles = new int[] {HTML, CSS, Javascript};
    isAcceptance();
    print();

  }

  /*
   * 입력
   */
  public void input() throws NumberFormatException, IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("몇 기인지 입력해주세요.");
    number = Integer.parseInt(br.readLine());
    System.out.println("HTML 과목 점수를 입력해주세요.");
    HTML = Integer.parseInt(br.readLine());;
    System.out.println("CSS 과목 점수를 입력해주세요.");
    CSS = Integer.parseInt(br.readLine());
    System.out.println("Javascript 과목 점수를 입력해주세요. ");
    Javascript = Integer.parseInt(br.readLine());
  }

  // 평균
  public double avg() {
    return Arrays.stream(gradles).average().getAsDouble();
  }

  // 최대 값
  public int maxValue() {
    return Arrays.stream(gradles).max().getAsInt();
  }

  // 최소 값
  public int minValue() {
    return Arrays.stream(gradles).min().getAsInt();
  }

  // 합격 여부
  public void isAcceptance() {
    // 합격 불합격 기준
    double avg = avg();
    if ((number > 2 && avg >= 70) || (number <= 2 && avg >= 60)
        || (Arrays.stream(gradles).filter(jumsu -> jumsu == 100).count() >= 2)) {
      sb.append("합격입니다.\n");
    } else {
      sb.append("불합격입니다.\n");
    }
  }

  // 출력
  public void print() {
    sb.append("전체 과목 중 최고점은 ").append(maxValue()).append("점입니다.\n");
    sb.append("전체 과목 중 최저점은 ").append(minValue()).append("점입니다.\n");
    sb.append("전체 과목 중 평균은 ").append(avg()).append("점입니다.\n");

    System.out.println(sb);
  }


}

 

학습할 내용

 깃은 아래 사이트에서 확인 해보면된다.

https://jih3508.tistory.com/157

 

[Git] 깃 기본 세팅하기

Git이란? 요즘 git이라는 단어를 많이 들어 봤을것이다. git은 많은 회사에서도 쓰이기 때문에 개발자한다면 Git은 필수적으로 알아야 한다고 생각한다. Git을 알기위해서는 형상관리라는 개념부터

jih3508.tistory.com

마무리

  이번과제는 자바의 클래스의 상속, 오버라이드 개념을 배웠는데 개발자라면 상속이나 오버라이드많이 쓰일것이다. 그 이유는 공통으로 개발하거나 아니면 외부 라이브러리나 프레임워크에서 상속받아서 처리하거나 아니면 오버라이드로 함수를 재정의 또는 기능을 추가해서 개발을 많이한다. 그리고 제일 중요한것은 유지보수 하기가 용의 하다는 점이다. 유지보수를 하기 위해서는 코드가 관리하거나 다른사람이 보기가 쉬워야 한다. 그러기 위해서는 상속이나 다형성에 대한 개념에 대하서 공부를 많이 해두어야 한다.

이번 미션 작업 한것은 밑에 깃허브에 확인해보면 된다.

https://github.com/jih3508/Java_Study

 

GitHub - jih3508/Java_Study

Contribute to jih3508/Java_Study development by creating an account on GitHub.

github.com

 

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
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
글 보관함