2023.07.31 - java 문법 종합반(3주차) (4)

mjjin·2023년 7월 31일
0

Java 문법 종합반

목록 보기
7/8

클래스(class)

<추상클래스 (AbstractClass)>

public abstract class 추상클래스명 { 필드, 생성자, 메서드 }
  • 아직 완성되지 않은 클래스
  • 객체를 만들 수 없다.
  • 자식 클래스는 객체를 생성 할 수 있다.
  • 상속 후 구체적으로 정의해야 사용 가능하다.
  • 여러개의 자식 클래스들에서 공통적인 필드나 메서드를 추출해서 만들 수 있다.

- 추상 메서드

[ public | protected ] abstract 리턴타입 메서드이름(매개변수, ...);
  • 추상클래스 or 인터페이스에서 사용 가능한, 껍데기만 있는 메서드
  • 일반적인 메서드와 다르게 블록 {}이 없다.

<인터페이스(Interface)>

// 선언
interface 인터페이스명 { 메서드 }

// 다른 클래스에서 사용
class 클래스명 implements 인터페이스명 {필드, 생성자, 메서드}
  • 클래스들의 코드를 재사용할 수 있다.
  • 코드의 일관성을 유지할 수 있다.
  • 새로운 클래스를 쉽게 추가할 수 있다.
  • 코드를 더 쉽게 이해할 수 있다.

<다형성(Polymorphism)>

하나의 참조 변수로 다양한 객체를 참조할 수 있는 특징으로,
다형성의 장점은 다음과 같다.

  • 하나의 참조 변수로 다양한 객체를 참조할 수 있다.
  • 코드의 재사용성 및 유지보수성을 향상시킬 수 있다.

다형성 예시코드

class Animal {
  public void makeSound() {
    System.out.println("동물이 소리를 냅니다.");
  }
}

class Dog extends Animal {
  @Override
  public void makeSound() {
    System.out.println("멍멍!");
  }
}

class Cat extends Animal {
  @Override
  public void makeSound() {
    System.out.println("야옹!");
  }
}

public class Main {
  public static void main(String[] args) {
    Animal animal = new Dog();
    animal.makeSound(); // 멍멍!

    animal = new Cat();
    animal.makeSound(); // 야옹!
  }

3주차 숙제

< 계산기 만들기 >

< 문제 내용 >

  1. 더하기, 빼기, 나누기, 곱하기 연산을 수행할 수 있는 Calculator 클래스를 만든다.
  2. 연산을 수행하는 반환타입이 double인 calculate 메서드를 정의한다.
  3. int 타입의 firstNumber, secondNumber의 매개변수를 통해 피연산자 값을 받는다.
  4. 추상클래스인 AbstractOperation를 통해 추상화한다.
  5. 추상클래스의 자식 클래스로는 AddOperation(더하기), SubstractOperation(빼기), MultiplyOperation(곱하기), DivideOperation(나누기) 클래스들로 이루어져있다.

< 문제 풀이 >

// Calculator

public class Calculator {

    private AbstractOperation abstractOperation;


    public Calculator(AbstractOperation abstractOperation) {
        this.abstractOperation = abstractOperation;
    }

    public void setAbstractOperation(AbstractOperation abstractOperation) {
        this.abstractOperation = abstractOperation;
    }


    public double calculate(int firstNumber, int secondNumber) {
        double answer;
        answer = abstractOperation.calculate(firstNumber, secondNumber);
        return answer;
    }

// AbstractOperation

public abstract class AbstractOperation {
    public abstract double calculate (int firstNumber, int secondNumber);
}
// AddOperation
public class AddOperation extends AbstractOperation{
    @Override
    public double calculate(int firstNumber, int secondNumber) {
        return firstNumber + secondNumber;
    }
}

// SubstractOperation
public class SubstractOperation extends AbstractOperation{
    @Override
    public double calculate(int firstNumber, int secondNumber) {
        return firstNumber - secondNumber;
    }
}

// DivideOperation
public class DivideOperation extends AbstractOperation {
    @Override
    public double calculate(int firstNumber, int secondNumber) {
        return firstNumber / secondNumber;
    }
}

// MultiplyOperation
public class MultiplyOperation extends AbstractOperation{
    @Override
    public double calculate(int firstNumber, int secondNumber) {
        return firstNumber * secondNumber;
    }
}
// Main
public class Main {
    public static void main(String[] args) {
        // 더하기 연산자로 생성
        Calculator calculator = new Calculator(new AddOperation());
        System.out.println(calculator.calculate(3, 5)); // 출력 : 8.0

        // 곱하기로 연산자 변경
        calculator.setAbstractOperation(new MultiplyOperation());
        System.out.println(calculator.calculate(3, 8)); // 출력 : 24.0
    }
}

3주차 후기


3주차 강의에 java에서 중요한 내용들이 수도 없이 쏟아져 나왔는데
솔직히 한 번 듣고 이해 하기에 너무 어려웠다.
그래서 조금 느리더라도 확실하게 알고 넘어가려고 강의도 반복해서 듣고,
그래도 이해가 되지 않으면 인터넷 검색이나 다른 강의 영상도 찾아보면서
3주차를 어느정도 마무리 할 수 있었다.
남은 4주차, 5주차도 열심히 배워서 
java를 사용한 개인 미니 프로젝트를 하나 만들어보고 싶다.

2개의 댓글

comment-user-thumbnail
2023년 8월 1일

잘 봤습니다. 좋은 글 감사합니다.

1개의 답글