Spring/Spring&Hibernate 강의

스프링 입문을 위한 자바 객체 지향의 원리와 이해 chapter4-자바가 확장한 객체 지향

빙하둘리 2022. 9. 5. 01:23
728x90

스프링 입문을 위한 자바 객체 지향의 원리와 이해 chapter4-자바가 확장한 객체 지향

 

객체 지향에서 다형성)오버라이딩(overriding)과 오버로딩(overloading)

오버라이딩:같은 메서드 이름, 같은 인자 목록으로 상위 클래스의 메서드를 재정의

오버로딩;같은 메서드 이름, 다른 인자 목록으로 다수의 메서드를 중복 정의

 

abstract 키워드-추상 메서드와 추상 클래스

상위 클래스가 동물이고 동물 클래스를 상속 받는 하위 클래스가 쥐, 고양이, 병아리 일 때

package abstractMethod01;

public class 고양이 extends 동물 {
	void 울어보세요() {
    	System.out.println("나는 고양이! 야옹! 야옹!");
    }
}

위처럼 하위 클래스(쥐, 고양이, 병아리)에서의 울음소리 설정-울어보세요() 함수 설정을 할 수 있지만

상위 클래스(동물 클래스)에서 울어보세요() 함수는 소리 내는 울음소리로 정의하는게 맞지 않다.

 

그런데 다음과 같이 동물 타입의 참조 변수를 통해 하위 클래스의 인스턴스가 가진 울어보세요() 메서드를 호출하고 있으니 상위 클래스인 동물의 메서드는 반드시 존재해야 한다.(상위 클래스 type의 참조변수는 하위 클래스의 메서드를 호출하지 못한다.) 

public abstractMethod01;

public class Driver {
	public static void main(String[] args) {
    	동물[] 동물들 = new 동물[5];
        
        동물들[0] = new 쥐();
        동물들[1] = new 고양이();
        동물들[2] = new 강아지();
        동물들[3] = new 송아지();
        동물들[4] = new 병아리();
        
        for (int i=0; i<동물들.length; i++)
        	동물들[i].울어보세요();
}

이런 경우 추상 메서드를 사용하게 된다. 메서드 선언은 있어도 몸체는 없는 형태로 선언하는 것이 추상 메소드다.

패키지를 바꿔서 구현한 동물 추상 클래스의 울어보세요() 추상 메서드는 다음과 같다.

package abstractMethod02;

public abstract class 동물 {
	abstract void 울어보세요();
}

 

 

추상 메소드(abstract method)

추상 메소드(abstract method)란 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미합니다.

자바에서 추상 메소드를 선언하여 사용하는 목적은 추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함입니다.

 

예를 들면 모듈처럼 중복되는 부분이나 공통적인 부분은 미리 다 만들어진 것을 사용하고, 이를 받아 사용하는 쪽에서는 자신에게 필요한 부분만을 재정의하여 사용함으로써 생산성이 향상되고 배포 등이 쉬워지기 때문입니다.

 

이러한 추상 메소드는 선언부만이 존재하며, 구현부는 작성되어 있지 않습니다.

바로 이 작성되어 있지 않은 구현부를 자식 클래스에서 오버라이딩하여 사용하는 것입니다.

추상 클래스(abstract class)

자바에서는 하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스(abstract class)라고 합니다.

이러한 추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가지는 메소드의 집합을 정의할 수 있도록 해줍니다.

즉, 반드시 사용되어야 하는 메소드를 추상 클래스에 추상 메소드로 선언해 놓으면, 이 클래스를 상속받는 모든 클래스에서는 이 추상 메소드를 반드시 재정의해야 합니다.

 

자바에서 추상 클래스는 다음과 같은 문법으로 선언합니다.

문법

abstract class 클래스이름 {

    ...

    abstract 반환타입 메소드이름();

    ...

}

 

생성자

클래스의 인스턴스, 즉 객체를 만들 때마다 다음과 같이 new 키워드를 사용한다.

공룡 둘리 = new 공룡();

 

이전에 사용했던 열고 닫는 소괄호는 메서드를 의미하는 것이었다. 클래스명();에서의 소괄호 또한 메서드의 의미를 가지고 있다. 반환값이 없고 클래스명과 같은 이름을 가진 메서드를 객체를 생성하는 메서드라고 해서 객체 생성자 메서드라 한다. 줄여서 생성자라고 많이 부른다.

 

개발자가 아무런 생성자를 만들지 않으면 자바는 인자가 없는 기본 생성자를 자동으로 만들어준다.

그런데 인자가 있는 생성자를 하나라도 만들면 자바는 기본 생성자를 만들어 주지 않는다.

 

 

이상 내용 추가 필요

 

 

출처)스프링 입문을 위한 자바 객체지향의 원리와 이해

 

 

추가 참고 자료)멤버 메서드란? (출처는 링크)

https://as-i-am-programing.tistory.com/7

 

자바(java) 클래스 구성, 멤버 필드, 멤버 메서드, 멤버 변수, 메인메서드, 명령행 매개변수 알아보

안녕하세요 오늘 진행할 포스팅은 클래스의 전체적인 구성을 알아보고 멤버필드, 멤버메서드, 멤버변수, 메인메서드 그리고 명령행 매개변수에 대해 알아보겠습니다. 또 그밖에 static의 의미도

as-i-am-programing.tistory.com

멤버 메서드란 특정한 일을 수행하는 행위이다. 멤버필드들의 값을 가지고 작업을 수행할 수도 있으며 메서드도 static 메서드(클래스 메서드)와 instance 메서드라는 두가지 종류가 있다. static 메서드는 메서드를 가지는 객체를 생성하지 않아도 사용 가능하다. instance 메서드는 객체를 생성해야만 사용 가능하다. (처리기능, 순간적)

 

추상 클래스, 추상 메서드에 관해서)http://www.tcpschool.com/java/java_polymorphism_abstract

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

728x90