Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- write
- Python
- JavaScript
- bitcoin
- tcp
- Golang
- channel
- 책
- c++
- 영화
- http
- 리뷰
- go언어
- range
- windows
- package
- install
- mutex
- FOR
- C
- window
- File
- Linux
- Sync
- json
- GO 언어
- API
- go
- Callback
- Close
Archives
- Today
- Total
Code Habit
[Go언어] 리스코프 치환 원칙 본문
해당 원칙은 상위 타입의 객체를 하위 타입의 객체로 치환해도 동작에 문제가 없어야 한다는 것을 정의한다. 자식 클래스 언제나 자신의 부모클래스를 교체할 수 있어야 하고 한 객체를 다른 객체가 파생하더라도 그 기본 로직은 변경 되어서는 안된다.
리스포크 치환 원칙은 부모 객체와 이를 상속한 자식 객체가 있을 때 부모 객체를 호출하는 동작에서 자식 객체가 부모 객체를 완전히 대체할 수 있다는 원칙이다.
type T interface {
SomeThing()
}
type S struct {
}
func (s *S) SomeThing() {
fmt.Println("type S의 Something")
}
type U struct {
}
func (u *U) SomeThing() {
fmt.Println("type U의 Something")
}
func q(t T) {
t.SomeThing()
}
func main() {
var y = &S{}
var u = &U{}
q(y)
q(u)
}
인터페이스 T 정의하고 이 인터페이스를 구현한 struct 타입 S, U객체를 부모 인터페이스인 T 타입으로 인수로 받아 사용한다. 이때 함수 q()는 S 객체 인스턴스인 y와 U 객체 인스턴스인 u 모두에 대해서 잘 동작해야 한다는 얘기이다..
이전에 소개했던 덕타이핑과 유사점이 있다..
사실 이는 Go 언어보단 클래스나 다른 상속을 지원하는 언어에서 더 중요하게 다뤄진다. 필자가 C++개발할때도 공통되는 특성을 지닌 부모 interface를 정의하고 아래 자식 class에서 이를 상속받아 정의하여 dynamic_casting을 통해 편리하게 치환하며 사용했던 경험이 있다.