-
8일차 - JAVA 상속프로그래밍 언어/JAVA 2021. 4. 11. 20:29
오늘은 상속에 대해 배웠다. 상속에 대한 개념과 구현은 어떻게 하는지는 이해했지만 이것을 잘 사용하는 방법을 익히고 실제로 사용해야할 수 있는 날이 오면 좋겠다.
<핵심 정리>
1. 상속이란?
상속은 아마 프로그래밍 배우기 전에도 한번쯤은 들어봤을 단어이다. 부모가 자식에게 재산을 넘겨줄 때도 상속이라는 단어를 쓴다.
즉, 프로그래밍에서는 부모 클래스에서의 변수나 메소드를 자식 클래스에게 똑같은 기능을 구현을 할 수 있도록 변수나 메소드를 넘겨주는 것이다.
그러면 코드에서는 어떻게 구현하면 될까?
// 부모 클래스 class Cal{ public int sum(int v1, int v2){ return v1 + v2; } } // 자식 클래스 class Cal2 extends Cal{}
위와 같이 2 정수를 더하는 기능을 하는 sum메소드를 가진 Cal이라는 부모 클래스가 있다.
그리고 똑같은 sum메소드를 Cal2 클래스에도 담고 싶다면 sum메소드를 만드는 것이 아닌 Cal클래스에서 상속을 받으면 된다.
그러면 이러한 상속기능은 왜 필요할까?
1. 코드의 중복성을 막아준다.
똑같은 기능을 구현하는 메소드를 굳이 2개의 클래스에 작성하여 중복성을 일으키고 코드가 길어지는 것보다는
상속을 활용해 중복성을 방지할 수 있다.
2. 유지보수가 쉽다.
sum메소드가 2개의 class에 작성되었다면 버그를 잡기위해서는 둘 다 고쳐야한다.
하지만, 상속을 사용하면 1개의 class에서 고치기만하면 버그를 잡을 수 있으므로 유지보수가 편하다.
2. Override(재정의)
class 클래스명 extends 부모클래스명 {}을 통해 단순히 부모클래스를 상속만 받는 거라면 자식클래스가 굳이 있을 필요는 없다. 그래서 자식클래스에 부모클래스에 없는 메소드나 변수를 새로 작성할 수 있다.
또한, 부모클래스에서 상속받은 메소드를 수정하고 싶다면 어떻게 하면 될까?
이러한 경우 사용하는 것이 Override이다.
// 부모 클래스 class Cal{ public int sum(int v1, int v2){ return v1 + v2; } } // 자식 클래스 class Cal2 extends Cal{ public int sum(int v1, int v2){ System.out.println("override!") return v1 + v2 } }
이렇게 코드를 구현하게 된다면 자식클래스인 Cal2에서 sum메소드를 호출하면 부모 클래스(Cal)의 sum메소드가 호출되는 것이 아니라 수정된 Cal2의 sum메소드가 호출된다.
이것이 Override이다.
3. Overloading
overriding과 overloading 뭔가 비슷해 보이지만 다른 개념이다.
overloading은 특정 이름을 지닌 메소드가 이미 존재하더라고 기능만 다르면 그 특정 이름과 같은 메소드를 정의 할 수 있는 것을 말한다.
class Cal2 extends Cal{ public int sum(int v1, int v2){ System.out.println("override!") return v1 + v2 } //overloading public int sum(int v1, int v2, int v3){ System.out.println("override!") return v1 + v2 +v3 } }
위와 같이 sum이라는 메소드 이름은 같지만 기능이 다르므로 공존할 수 있다는 것이 overloading 기능이다.
-----------------------------------------------------------------------------------------
<8일차 후기>
앞으로 2일동안 강의를 듣게 되면 java 기초 문법 수강이 끝나게 된다. 어제의 class 강좌에 이어 객체지향프로그래밍을 ㅏ면 class와 더불어 쓰이게 될 상속이라는 개념을 배우게 되어서 좋았다.
앞으로 프로젝트를 구현할 때 까먹지 말고 쓸 수 있는 날들이 왔으면 좋겠다.
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
10일차 - JAVA 예외(Feat. 완강!!, 앞으로의 계획은?) (0) 2021.04.13 9일차 - JAVA 인터페이스 (0) 2021.04.12 7일차 - JAVA 객체지향 프로그래밍(클래스, 인스턴스) (0) 2021.04.09 6일차- JAVA 메스드 (0) 2021.04.08 5일차-JAVA 제어문 (Boolean, 조건문, 반복문) (0) 2021.04.07