네...
하루에 두 강의를 동시에 쓸려고 하니
힘이 솟네요(?)
오늘 강의는
"상속 " + "추상" + " 인터페이스 "
이렇게 세개를 배울겁니다.
와 짝짝짝
서론은 이쯤하고 본론으로 들어가겠습니다.
1. 상속(extends)
상속은 어려운 개념이라고 많은 분들이 생각하시는데
예시를 들어보면 정말 쉬운 개념입니다.
상속은 뭘까요?
자바에서의 상속 말고 현실에서의 상속 말이에요.
상속은 부모가 자식한테 재산을 물려주는 행위를 말합니다.
흔히 상속자라고 하는것의 의미가 "부모로부터 재산 받은 사람" 이라고 생각할 수 있죠
자바에선 상속된 클래스를 부모클래스 상속받은 클래스를 자식 클래스라고 합니다
부모 클래스가 자식클래스한테 물려줌 즉
돈을 물려주면 자식클래스는 그걸 쓸수 있고
기술을 물려주면 자식클래스는 그걸 쓸 수 있겠죠
이처럼 상속은
다른 클래스의 요소들을 가져와 쓰는걸 말합니다.
Q: 근데 자바책에서 다중상속은 안된다고 했는데 왜죠?
A : 설명해 드릴게요. 이를 이해하려면 새 비유가 필요합니다.
상속은 상속한 사람의 계급 바로 아래를 받는 거라고 생각해봅시다.
1, 2, 3, 4 계급이 있다고 생각하면
파썬 씨는 1계급이고
코린 씨는 파썬을 상속합니다.
그럼
파썬 : 1
코린 :2
파폭 씨는 3계급입니다.
만약 코린이 파폭을 동시에 상속하면
파썬 : 1
코린 : 2 0r 4
파폭: 3
이 되겠죠
2와 4 계급이라니
상속관계가 매끄럽지 못하게 되네요.
그래서 다중상속을 자바에선 허용하지 않습니다.
위의 현상을 "diamond problem" 이라고 합니다.
2. 추상 (abstract)
추상은 되게 간단합니다.
후에 나올 인터페이스를 이해하는데 도움이 될 수 도 있겠네요.
abstract 키워드는 일반적으로 세곳에 들어갈 수 있습니다
변수 선언 , 함수 선언, 클래스 선언
만약 클래스 선언부에 들어간다면
추상 클래스를 상속받은 클래스들은
원래 클래스의 필드와 메소드(클래스 안의 변수와 함수)를 구현해야 합니다.
Q : 구현이 뭔가요?
A: 구현은 이름만 만들어진 함수와 변수에 값을 집어넣는 일입니다.
드디어 예제코드가 필요하겠네요.
animal 클래스 - abstract, public
public abstract class animal { public String name; public void cry(){ } }
cat 클래스 - extends animal, public
public class cat extends animal{ @Override public void cry() { name = "cat"; System.out.println("meow"); } }
자 위에선 cry 라고 써있기만 했던 메소드의
실행을 이제 적어놀 수 있습니다.
이처럼 추상은 상속하되 다르게 값을 바꿔서 쓸 수 있게 하는 것입니다.
상속과 비슷하죠?
상속과 다른점은 부모 자식 관계가 아닌, 동물 안에 있는 생명체들을 표현한다.
정도로 생각할 수 있겠네요
직속이 아닌 한 범위의 있는 클래스의 기본적인 틀을 만든다고 생각하면 편하겠네요.
2. 인터페이스 (interface)
인터페이스도 어렵진 않습니다.
상속은 부모자식 관계가 되어 모든걸 물려받지만.
인터페이스는 기능의 틀만 이어받습니다.
받은 클래스는 기능을 구현하여 사용할 수 있죠.
기능의 틀 추가 => 기능이 추가됨
이라고 생각할 수 있기 때문에
상속에선 부모자식 관계가 얽혀서 다중 상속이 안되지만
인터페이스에선 다릅니다.
기능을 받는거니 얽혀도 상관 없죠.
즉 인터페이스는 다중으로 사용 가능합니다.
Q : 그래서 대체 이 세개가 어디에 쓰이나요?
A : 아직은 쓸 기회가 많이 없고, 다 배우지도 않은 개념이니 일단 이정도만 아셔도 됩니다.
자 그럼 이번 강의는 여기서 끝내겠습니다.
감사합니다
다음엔 다형성이라는... 이해 힘들수도 있는 개념을 다룰 예정입니다.
강의에 의문점이나, 비판거리가 있으시면 언제나 댓글로 질문하셔도 됩니다.
세리시아
2020.09.09인스턴스...같은 기본개념들 중에서도 공부하다보면 헷갈리는 게 꽤 있는데, 혹시 그런 용어들도 개념정리해주실 수 있나요?
logdev
2020.09.11어떤 용어 말인가요?
logdev
2020.09.11원하시면 다음 강좌는 용어 정리도 같이 하겠습니다