초록꼬마의 devlog
article thumbnail

2021.10.27(수)

🌿 개념

  • 기존의 클래스(부모 클래스)를 재사용하여 새로운 클래스(자식 클래스)를 작성하는 것
  • 기존 클래스를 확장/특화하는 것 → 자식 클래스 extends 부모 클래스
  • 코드의 중복을 줄이고 프로그램의 확장성 향상
  • "자식 is-a 부모" 관계
  • 클래스의 상속은 단일 상속만 가능 <-> 인터페이스 상속/구현은 다중 상속 가능

🌿 오버라이딩

  • 부모 클래스로부터 상속받은 메서드의 몸체를 자식 클래스에서 재정의하는 것(o) 그대로 사용(x)
  • 부모-자식 클래스에서 같은 이름의 메서드가 다른 기능을 수행하게 됨
  • 접근 제어자의 가시성/접근 범위는 같거나 커져야 함

Overloading vs Overriding

  • (메서드)Overloading = 한 클래스 내에서 같은 이름의 메서드를 여러 개 정의하는 것
  • Overriding = 상속받은 메서드의 내용을 변경하는 것

 

* 눈에 보이지 않지만/명시되지 않았지만 숨겨져 있는 것 = JVM이 하고 있던 일 = Java 소스코드 컴파일 시 명시적으로 코딩하지 않을 경우 컴파일러에 의해 자동으로 생성되는 코드
- 기본생성자(default constructor)
- super() 생성자
- 반환형 void(반환형이 없는) 메소드 body 부분 마지막의 return;
- Object클래스 상속
- 자동형변환/자동 upcasting
- .toString() 주소값 출력
- String 참조자료형 사용 시 String 객체 생성
- this
- import.java.lang.*; 등

 

📗 소감

  • 여러 상속의 여러 예시(Vehicle, Person, Point 등)를 반복해서 보며 개념을 이해할 수 있었다
  • Java의 객체 지향 개념들을 반복해서 보며 완벽히 이해해두자!

📗 homework: 객체배열

package com.kh.practice.student.controller; // 기능은 여기서 할 것임

import com.kh.practice.student.model.vo.Student;

public class StudentController {

    // [필드부]
    private Student[] sArr = new Student[5]; // Student형 클래스가 어디 있는지 경로 써줘야 함 = import

    public static final int CUT_LINE = 60; // 초기값 60으로 초기화

    // [생성자부]
    public StudentController() { // 기본생성자; 5개의 객체 배열(이 클래스의 필드부에 만들어둠)을 샘플 데이터 값으로 초기화
        sArr[0] = new Student("김길동", "Java", 100); // new 키워드로 객체에 올리고, 매개변수 3개 있는 Student 생성자 사용해서 값 초기화
        sArr[1] = new Student("박길동", "DataBase", 50);
        sArr[2] = new Student("이길동", "화면", 85);
        sArr[3] = new Student("정길동", "Server", 60);
        sArr[4] = new Student("홍길동", "Java", 20);
    }

    // [메소드부]
    public Student[] printStudent() { // 객체 배열에 있는 데이터를 반환하는 메소드; 반환형 = Student[] 배열; 지문 상 반환해야 할 '데이터'가 뭔지 헷갈렸음
        return sArr; // 여기에 있는 Student[] 배열은 sArr
    }

    public int sumScore() { // 객체 배열의 점수를 합한 값을 반환하는 메소드
        int sum = 0; // 나는 변수명 sumScore로 지었었는데 메소드 이름과 겹치는 게 좋은 것 같지 않아서, 강사님 sum으로 변경

        for(int i = 0; i < sArr.length; i++) {
            sum += sArr[i].getScore();
        }

        return sum;
    }

    public double[] avgScore() { // double 배열을 만들어 sumScore의 반환값을 0번째 index에, 합의 평균을 1번째 index에 저장 -> 배열 반환하는 메소드
//        StudentController sc = new StudentController(); // 나는 처음에 뭔가 막혀서 이렇게 StudentController 객체 만들고 했는데, 필요 없는 듯

        double[] avg = new double[2]; // 나는 배열명 avgScore로 지었었는데 메소드 이름과 겹치는 게 좋은 것 같지 않아서, 강사님 avg으로 변경

        avg[0] = sumScore();
        avg[1] = sumScore() / sArr.length;

        return avg;
    }

}