근데 이건 일반 클래스에서도 가능한데 왜 굳이 추상 클래스를 쓰는거임? 얘를 쓰는건 일반 클래스에선 메서드 재정의가 강제는 아닌데 추상 클래스에선 강제니까 일반 클래스에서 생길수있는 불문율을 추상 클래스가 잡아주는 느낌? 그리고 의도를 명확히하는 그런 느낌 그 이상 이하도 아닌거같은데 맞음?
댓글 20
문제 상황과 해결로 예시를 보자
(0, 0)에 황인, 백인, 흑인이 100명씩 서있고 (100, 100) 으로 이사람들을 옮기고 싶다.
다만 황인은 지그제그 형태로 움직이며 백인은 2보 전진, 1보 후퇴, 흑인은 체스판의 호스처럼 움직인다고 칠때
이사람들을 움직이는 코드를 작성하시오 라는 문제 상황이 나왓고 이걸 코드로 구현을 하고 싶을때 일반클래스로만 짠다고 치면
황인 클래스, 흑인 클래스, 백인 클래스를 만든이후 이를 관리를 위한 리스트도 3개를 만들겠지
그 리스트를 이용해 움직임을 이동시키는 함수를 사용하는 반복문도 3개를 작성해야해
익명(122.32)2025-05-07 14:22
답글
그건 추상 클래스를 써도 서브 클래스에서 구현해야하는건 마찬가지일텐데
익명(211.184)2025-05-07 14:26
하지만 여기서 사람들을 움직이는 관점에서 본다면
움직이는 로직이 뭐든 알바는 아니고 우리가 할 것은 움직이는 함수를 호출해서 그냥 (100, 100)으로 이동시키면 되는거지
따라서 리스트를 3개를 구현할필요도 반복문을 3개를 작성할필요도없이
IMove라는 인터페이스를 구현한다음 1개의 리스트에 IMOVE의 인터페이스를 갖고있는 객체를 넣고 반복문만 1번만 돌리면 되는거지
익명(122.32)2025-05-07 14:27
답글
에?
익명(211.184)2025-05-07 14:28
예시가 좀 극단적일수도 있는데 c#의 using과 IDisposable의 관계도 대표적인 예라고 생각함
익명(122.32)2025-05-07 14:29
답글
설명은 고마운데 너가 말한건 인터페이스로 타입에 일관화에 대한걸 말한거고
내가 묻고싶은건 추상 클래스를 쓰는 의도가 저게 맞냐? 아니면 의도가 뭔지 궁금해서 그럼
익명(211.184)2025-05-07 14:32
답글
아 추상 클래스를 왜쓰냐고?
하다보면 그냥 일반클래스를 부모삼기도 인터페이스를 심기도 애매할때도 있음
그때 쓰면됨
익명(122.32)2025-05-07 14:34
답글
익명(211.184)2025-05-07 14:35
답글
인터페이스가 필요한데 거기서 또 공통된 로직 구현이 필요한거임
일반클래스는 죄다 오버라이드 시켜야 하는데
일반클래스에 그냥 쓸데없는 값 리턴 시키고 오버라이드 하세요 이지랄 시키기는 좀 그렇잖아?
익명(122.32)2025-05-07 14:40
답글
거기에 그냥 대충 만들고 졸라게 상속시키면
배보다 배꼽이 더큰 상황이 나옴
익명(122.32)2025-05-07 14:41
답글
아 그러니까 인터페이스 자체는 구현부를 가질수없고 행위의 명세만 가지고 있는데
추상 클래스는 공통된 행위 구현하여 줄수있는거고 걍 그런거 때문에 쓰는거구마잉?
익명(211.184)2025-05-07 14:42
답글
ㅇㅇ 딱 정확함
익명(122.32)2025-05-07 14:47
테스트하기 좋은 코드이기 때문
익명(113.59)2025-05-07 14:42
답글
아 추상 클래스군 ㄲㅈ
익명(113.59)2025-05-07 14:43
답글
그럼 본문의 내용은 틀린거임?
익명(211.184)2025-05-07 14:43
답글
그냥 템플릿같은 클래스가 필요해서 쓰는거임
익명(113.59)2025-05-07 14:45
너 말이 맞음
1. 추상 클래스에서 직접 객체 생성 불가
2. 추상 메서드를 선언하기 위해
문제 상황과 해결로 예시를 보자 (0, 0)에 황인, 백인, 흑인이 100명씩 서있고 (100, 100) 으로 이사람들을 옮기고 싶다. 다만 황인은 지그제그 형태로 움직이며 백인은 2보 전진, 1보 후퇴, 흑인은 체스판의 호스처럼 움직인다고 칠때 이사람들을 움직이는 코드를 작성하시오 라는 문제 상황이 나왓고 이걸 코드로 구현을 하고 싶을때 일반클래스로만 짠다고 치면 황인 클래스, 흑인 클래스, 백인 클래스를 만든이후 이를 관리를 위한 리스트도 3개를 만들겠지 그 리스트를 이용해 움직임을 이동시키는 함수를 사용하는 반복문도 3개를 작성해야해
그건 추상 클래스를 써도 서브 클래스에서 구현해야하는건 마찬가지일텐데
하지만 여기서 사람들을 움직이는 관점에서 본다면 움직이는 로직이 뭐든 알바는 아니고 우리가 할 것은 움직이는 함수를 호출해서 그냥 (100, 100)으로 이동시키면 되는거지 따라서 리스트를 3개를 구현할필요도 반복문을 3개를 작성할필요도없이 IMove라는 인터페이스를 구현한다음 1개의 리스트에 IMOVE의 인터페이스를 갖고있는 객체를 넣고 반복문만 1번만 돌리면 되는거지
에?
예시가 좀 극단적일수도 있는데 c#의 using과 IDisposable의 관계도 대표적인 예라고 생각함
설명은 고마운데 너가 말한건 인터페이스로 타입에 일관화에 대한걸 말한거고 내가 묻고싶은건 추상 클래스를 쓰는 의도가 저게 맞냐? 아니면 의도가 뭔지 궁금해서 그럼
아 추상 클래스를 왜쓰냐고? 하다보면 그냥 일반클래스를 부모삼기도 인터페이스를 심기도 애매할때도 있음 그때 쓰면됨
인터페이스가 필요한데 거기서 또 공통된 로직 구현이 필요한거임 일반클래스는 죄다 오버라이드 시켜야 하는데 일반클래스에 그냥 쓸데없는 값 리턴 시키고 오버라이드 하세요 이지랄 시키기는 좀 그렇잖아?
거기에 그냥 대충 만들고 졸라게 상속시키면 배보다 배꼽이 더큰 상황이 나옴
아 그러니까 인터페이스 자체는 구현부를 가질수없고 행위의 명세만 가지고 있는데 추상 클래스는 공통된 행위 구현하여 줄수있는거고 걍 그런거 때문에 쓰는거구마잉?
ㅇㅇ 딱 정확함
테스트하기 좋은 코드이기 때문
아 추상 클래스군 ㄲㅈ
그럼 본문의 내용은 틀린거임?
그냥 템플릿같은 클래스가 필요해서 쓰는거임
너 말이 맞음 1. 추상 클래스에서 직접 객체 생성 불가 2. 추상 메서드를 선언하기 위해
오오 감사감사
급 식 쩝 쩝 충
초간단하게 추상화는 재사용임