[패스트캠퍼스]KDT 핀테크 서비스 백엔드/review

OOP 실습 review - 2022. 10. 12. 21:15 작성글

작은달팽이 2022. 12. 19. 17:18
더보기

실습 1

  • 아래의 클래스를 클래스 간의 관계를 고려하여 모두 설계하시오. 상속관계고려 설계
    • Member 클래스 - 웹페이지 정보만 아는 사람, 구매하게되면 user가됨
      • 필드
        • 회원 일련번호 serialNo
        • 회원 아이디 memberID
        • 회원 비밀번호 memberPassword
        • 회원 핸드폰번호 memberPhoneNumber
        • 회원 이메일 memberEmail
        • 회원 생년월일 memberBirthDate
      • 메소드
        • 생성자, getter(), setter(), hashCode(), equals(), toString()
    • User 클래스 - 제품구매자
      • 필드
        • 회원 정보 member
        • 사용 중인 전자 제품 electronicDevice
        • 사용 중인 요금제 paymentPolicy
      • 메소드
        • 생성자, getter(), setter(), hashCode(), equals(), toString()
    • Electronic 클래스
      • 필드
        • 제품 일련번호 productNo
        • 전자기기 모델명 modelName
        • 제조 회사명 companyName
          • Sumsung, LG, Apple → Enum형으로 정의
        • 생산일자 dateOfMade
        • 본인인증 방법 authMethod
          • 지문인증, 패턴인증, 핀 인증, 얼굴인증 → Enum형으로 정의
          • 하나의 전자 기기에는 다수의 인증 방법이 있을 수도 있음
      • 메소드
        • 생성자, getter(), setter(), hashCode(), equals(), toString()
    • MobileElectronic 클래스
      • 필드
        • 통신 방법 communicationMethod
          • 5G, 4G, 3G → Enum형으로 정의
        • 무게 weight
      • 메소드
        • 생성자, getter(), setter(), hashCode(), equals(), toString()
    • NoneMobileElectronic 클래스
      • 필드
        • 설치 주소 address
      • 메소드
        • 생성자, getter(), setter(), hashCode(), equals(), toString()
    • SmartPhone 클래스
      • 필드
        • 카메라 개수 numOfCameras
        • 센서 개수 numOfSensors
      • 메소드
        • 생성자, getter(), setter(), hashCode(), equals(), toString()
    • Tablet 클래스
      • 필드
        • 펜슬 유무 hasPencil
      • 메소드
        • 생성자, getter(), setter(), hashCode(), equals(), toString()
    • SmartTV 클래스 -nonmobile
      • 필드
        • 인치 inch
      • 메소드
        • 생성자, getter(), setter(), hashCode(), equals(), toString()

실습 2

  • Electronic를 최대 10개 저장하고 있는 객체 배열 Electronic[]이 있다.
  • Electronics[] 을 가지고 있는 Electronics를 만들자.
  • 전자제품 일련번호 productNo가 주어졌을 때 해당 일련번호에 해당하는 전자제품을 반환하는 함수를 작성하시오.
  • Electronic findByProductNo(String ProductNo)

실습 3

  • Electronics 에서 저장된 Electronics[] 들을 companyName으로 분류하는 함수를 작성하시오.
  • companyName은Sumsung, LG, Apple만 Enum형으로 들어올 수 있다고 가정
  • Electronics groupByCompanyName()
public class Electronics{
		Electronic[] electronics = new Electronic[10];
}
-------------------
product1 Electronic
product2 Electronic
product3 Electronic
-------------------
product4 Electronic
product5 Electronic
product6 Electronic
-------------------
.......

실습 4

  • 실습 3번 코드에 다음과 같은 시나리오를 통해 필요한 메서드를 추가하시오.
  • Kalen 고객의 요청에 따라 핸드폰 번호를 바꾸려고 한다.
  • Kalen 고객의 핸드폰 바꾸기 규칙은 다음과 같다. 먼저 나온 규칙이 우선순위가 높다.
    1. 현재 사용 중인 핸드폰 번호에서 연속된 2개 숫자만 다름 if문
    2. 현재 사용 중인 핸드폰 번호 중 중간 4개 숫자가 동일함 if문
    3. 현재 사용 중인 핸드폰 번호 중 마지막 4개 숫자가 동일함 if문
    4. 현재 사용 중인 핸드폰 번호에서 3개 숫자만 다름 (연속될 필요 없음) if문
    위의 조건을 하나라도 만족하는 핸드폰 번호가 없으면 기존의 핸드폰 번호를 그대로 사용하고자 한다.
  • 핸드폰 번호 후보 입력값은 위의 조건에 의해 결과가 무조건 하나로 나온다고 가정
  • 사용가능한 핸드폰 번호 후보가 인자로 들어갔을 때 Kalen 고객이 최종적으로 사용하게 될 핸드폰 번호는 무엇인지 반환하는 함수String getNewPhoneNumber(String[] candidates)를 작성하시오.

실습 5

  • 수업시간에 사용하는 패키지 me.day09.abstracts.method 이용하여 아래의 문제를 구현하시오.
  • Main 클래스의 calculateArea()를 추상 클래스 개념을 이용해서 객체지향적인 코드로 수정하시오.
// 객체지향적이지 않은 코드 🤔
public static double calculateArea(Shape shape) {
    final double PI = 3.14;
    if (shape instanceof Circle) {
        return ((Circle) shape).getRadius() * ((Circle) shape).getRadius() * PI;
    } else if (shape instanceof Rectangle) {
        return ((Rectangle) shape).getWidth() * ((Rectangle) shape).getHeight();
    } else if (shape instanceof Triangle) {
        return ((Triangle) shape).getBase() * ((Triangle) shape).getHeight() * 0.5;
    } else {
        return 0.0;
    }
}
  • Trapezoid 클래스도 calculateArea()를 계산할 수 있어야 합니다.
    • 두 점 사이의 거리 
  • 사다리꼴 넓이 공식

위의 공식을 이용하여 다음과 같은 함수를 만들어보시오.

  • Line findMaxLineByY() - 사다리꼴 넓이 공식에서 사다리꼴을 이루는 선분 중 a 구하는 함수
  • Line findMinLineByY() - 사다리꼴 넓이 공식에서 사다리꼴을 이루는 선분 중 b 구하는 함수
  • int getHeight(Line x, Line y) - 사다리꼴 넓이 공식에서 사다리꼴을 이루는 선분 중 h 구하는 함수

실습 6

  • 아래 문제의 참 / 거짓을 판별하시오. 디폴트 생성자는 모든 클래스와 인터페이스에 존재한다고 가정
  • 클래스 파일말고 일반 텍스트 파일에 저장 practice06 > New > File
    1. 하나의 인스턴스 InterfaceA가 있다고 가정하자.
    2. InterfaceA ia = new InterfaceA() (O, X)
    3. 하나의 추상 클래스 AbstractClass가 있다고 가정하자.
    4. AbstractClass a = new AbstractClass() (O, X)
    5. 부모클래스 A를 상속하고 있는 자식 클래스 B가 있다고 가정하자. (B is A)
    6. A a = new B() (O, X)
    7. 인터페이스 InterfaceA를 구현하고 있는 구현 클래스 ImplementClassB가 있다고 가정하자.
    8. InterfaceA ia = new ImplementClassB() (O, X)
    9. 클래스 B의 필드로 클래스 A를 포함하고 있다고 가정하자. (B has a A)
    10. A a = new B() (O, X)

실습 7

  • 실습 5번의 코드에 다음과 같이 추가하고자 한다.
  • GeometricController - 도형 이동함수 관련 인터페이스
    • translate(int dx, int dy) - 원점을 dx, dy만큼 이동 윗변의길이가 2배
    • scale(int offset) - 원점을 중심으로 offset배 만큼 도형을 확대 / 축소시킬 수도 있음
  • GeometricController의 함수를 호출할 수 있는 클래스에 implement하고 필요한 메소드를 재정의하는 코드를 작성하시오.
  • get 메서드(getter) : 단순히 멤버변수의 값을 반환 'get멤버변수이름'
  • set 메서드(setter) : 매개변수에 지정된 값을 검사하여 조건에 맞는 값일 때만 멤버변수의 값을 변경 'set멤버변수이름'
  • protected class :  상속을 통해 확장될 것이 예상되는 경우, 멤버에 접근 제한을 주되 자손클래스에서 접근가능
  • private class : 자손클래스에서 접근 불가
  • enum : 열거형, 여러 상수 선언시 사용, 자동으로 0부터 시작하는 정수값 할당  enum 열거형이름 {상수형1, 상수형2, ... }