교육 (Today I Learned)/SeSAC

SeSAC 9일차 / 자바 기초(클래스, 상속)

Bay Im 2023. 7. 28. 00:34
SeSAC 9일차(2023-07-27)
자바 기초(클래스, 상속)


 

클래스 정의

 

- 메소드(method)

클래스 내부에 정의되는 멤버 함수

inputoutput을 가질 수 있는 일시적 기능 정의 (인자- parameter, 반환- return)

접근 지정자와 반환(return) 타입을 지정 (static 추가 지정 가능)

 

기본 형태)

접근지정자 반환타입 메소드이름(인자1, 인자2) {

           기능코드

           return 반환값;

}

 

ex)

// 메서드에서 필드값 할당

public void setInfo(String name) {

           this.name = name;

}

 

// 메서드를 통해 필드값 반환

public String getName() {

           return this.name;

}

 

 

 

- 메소드 정의

인자는 ,(콤마)로 구분을 통해 여러 개 설정 가능

메소드로 전달된 인자는 메소드 내에서 로컬변수로 사용 (로컬변수는 다른 메소드에서 사용불가)

 

return 될 값의 타입을 메소드 이름 앞에 지정 (get 메소드)

return이 없는 메소드 경우 void를 지정 (set 메소드)

 

 

 

 

- 오버로딩 메소드

이름이 같은 메소드이지만, 인자의 설정이 다른 메소드

설정된 인자에 따라 어떤 메소드가 사용될지 결정

리턴 타입이 달라도 상관 없음

 

 

 

- 생성자

클래스가 인스턴스로 생성되는 과정에서 초기화해주는 것

new 클래스이름 방식으로 인스턴스화할 때 생성자를 활용하여 초기화 가능

리턴 타입이 없는 메소드로 생성자 정의

 

오버로딩 형식으로 여러 생성자 정의 가능

생성자를 정의 안하면 아무 작업이 없는 기본생성자로 인스턴스 생성

 

ex)

public class Member {

           public int id;

           private String name;

 

           // 생성자 1

           public Member(int id) {

                      this.id = id;

           }

 

           // 생성자 2

           public Member(int id, String name) {

                      this.id = id;

                      this.name = name;

           }

}

 

 

 

- 인스턴스 생성과 활용

클래스가 정의되면 new 호출로 인스턴스 생성 가능

ex) new 클래스이름(생성자 인자);

 

생성된 인스턴스의 데이터타입은 클래스 이름

 

클래스 정의에서 구성한 멤버는 static을 제외하고 인스턴스에서 사용 가능

ex) 인스턴스.메소드, 인스턴스.필드

 

클래스 하나를 통해 여러 개의 인스턴스 생성 가능

인스턴스를 접근 하는 위치는 외부 클래스이므로 private은 접근 불가

 

 

 

 

 

클래스 상속

 

- 클래스 상속

부모(수퍼) 클래스에 정의된 함수, 변수 등을 사용하기 위해 자식(서브) 클래스가 상속 받음

 

ex)

class Dog extends Animal {

           Code

}

 

 

 

- 자바의 상속

자바에서 생성한 모든 클래스는 Object 클래스를 상속 받는다.

클래스는 하나의 클래스만 상속 가능

인터페이스는 여러 개 상속 가능

 

 

 

- extends

클래스 간의 상속시 자식(서브) 클래스 정의시 클래스 이름옆에 extends 사용

상속하여 super를 통해 수퍼클래스의 맴버 사용

 

기본 형태)

접근지정자 class 서브클래스 extends 수퍼클래스

           Code

}

 

 

 

- 생성자

기본적으로 서브클래스 생성시 수퍼클래스의 기본 생성자를 실행

super를 통해 수퍼클래스의 오버로딩 생성자 호출

 

 

 

-맴버 사용

서브클래스는 수퍼클래스의 필드와 메소드를 사용할 수 있음

(같은 패키지일 때 default 이상, 다른 패키지일 때 protected 이상)

 

 

 

 

 

상속 활용

 

- 업캐스팅

서브클래스의 인스턴스를 수퍼클래스 타입으로 변환 가능

서브클래스에는 수퍼클래스의 내용이 완전히 포함되어 있기 때문이다.

대신 서브클래스에만 있는 맴버는 접근 불가

 

ex)

// 업캐스팅

수퍼클래스 클래스이름 = new 서브클래스(인수);

 

 

 

- 다운캐스팅

수퍼클래스의 인스턴스를 서브클래스 타입으로 변환 불가능

수퍼클래스에는 서브클래스의 모든 내용을 포함하지 않음

강제 형변환 가능

 

ex)

// 강제형변환 다운캐스팅

서브클래스 클래스이름 = (서브클래스) new 서브클래스(인수);

 

 

 

- 오버라이딩

 

- 메소드 오버라이딩(Method Overriding)

수퍼 클래스에 선언된 메소드를 각 서브 클래스들이 자신만의 내용으로 새로 구현하는 기능

 

슈퍼 클래스의 메소드를 서브 클래스에서 재정의

슈퍼 클래스 메소드의 이름, 매개변수 타입 및 개수, 리턴 타입 등 모든 것 동일하게 작성

 

동적바인딩으로 수퍼클래스에서 실행하여도 오버라이드된 서브클래스 메소드가 실행

수퍼클래스: 특정 상황에서 메소드의 실행 정의

서브클래스: 메소드가 실행됐을 때 기능 정의

 

상속을 통해 하나의 인터페이스에 서로 다른 내용 구현이라는 다형성 실현

static 메소드는 오버라이딩 불가능

 

 

 

 

 

오늘의 실습 코드: https://github.com/yubin-im/SeSAC/tree/70824d99509fce2e956827f73f694834377df7a1/20230727