추상화라는 개념이
공통적으로 가지고있는 어떠한 특성을 하위 클래스들에게 뿌려줌으로써 상속을 한다는건 알겠음
근데 이건 일반 클래스로도 충분히 가능한데 추상 클래스를 쓰는 이유가 뭐임?
내가 봤을땐 그냥
일반 클래스로 추상화를 구현하면
하위 클래스에서 재정의가 강제가 아니니까 이러한 불문율을 꽉 잡고 의도를 분명히하기위해서 추상화 클래스를 쓰는 거같은데
그 이상 그 이하도 아닌거 같은데 맞음?
[🐣질문] 코딩 뉴비인데 질문좀
익명(210.104)
2025-05-07 14:30:00
추천 0
댓글 23
다른 게시글
-
게임 개발하면서 AI가 살짝 아쉬운점.example
[8][💬] 푸하하(priest9888) | 25.05.07추천 0 -
언리얼 엔진 CommonUI는 쓰라고 만든건지 모르겠다
[28][💬] 푸하하(priest9888) | 25.05.07추천 0 -
아 진짜 개빡친다
[💬] 익명(58.141) | 25.05.07추천 0 -
Anomaly Report 게임의 대한 가벼운 통계 및 피드백?
[15][💬] Indie(220.120) | 25.05.07추천 4 -
여기 보니까 다들 열심히 하는구만
[3][💬] Indie(211.218) | 25.05.07추천 1 -
nai 4.5 로 떠들썩하네
[6][💬] 익명(14.34) | 25.05.07추천 0 -
Ai를 쓸 때 쓰더라도
[4][💬] Micharie(regret1760) | 25.05.07추천 0 -
외국 게임 트레일러 외주 맡겨볼가 싶은데 원래이러냐?
[19][💬] Indie(220.120) | 25.05.07추천 0 -
25년도에 나온 그램이면 유니티도 잘 돌아감?
[10][💬] Indie(223.38) | 25.05.07추천 0 -
요즘 AI 그림 관련하여 드는 생각은
[11][💬] dryrain(dryrain1025) | 25.05.07추천 0
해당 댓글은 삭제되었습니다.
그럼 본문 그대로 그런 불문율로 인한걸 배제시키고 객체간의 인터렉션의 안정성을 보장하기 위해 쓰는거임? 뉴비라 잘 모름 ㅇㅅㅇ
게임으로 예시를 들면, 네가 '탈것'을 구현한다고 치자. 탈것을 일반 클래스로 각각 만들어버리면 if(ridingCar){} else if (ridingBike) ... 이런식으로 해야하는데, 잘 정의된 인터페이스 IRidable을 이용하여 car과 bike를 구현하면 IRidable riding = new Car(); riding = new Bike(); 이런식으로 모듈처럼 갈아 끼울 수 있음
ㅇ? 좀 다른 예시같은디?
인터페이스도 상속 개념 사용함...
IRidable에서 필드를 좀 사용하고 싶다 -> 추상 클래스 사용 원본 클래스 자체도 사용하고 싶다 -> 일반 클래스 사용
ㄴㄴ 인터페이스로 타입의 일관성을 유지하는건 알겠는데 내 말은 단순히 공통된 기능 정의는 일반 클래스로도 할 수있는데 추상 클래스라는게 있어서 저걸 쓰는 이유가 궁금하단거였음
아 그건 그냥 강제하는거임 기본 클래스는 사용하지 말라는 의미로 추상 클래스를 쓴다고 생각하면 됨.
이게 예전에는 인터페이스에 구현이 불가능했어서 그런것도 있고...
그럼 본문대로 기본 클래스는 사용하면 구현이 강제가 아니니까 개발자가 코드 작성하는 도중에 하나 뺴먹어서 좆버그 발생할수있어서 추상 클래스를 쓰면 저런걸 유지하면서 구현을 강제함으로써 오류를 미연에 방지하기 위해서 쓰는거냐? 는게 내 요지였고
ㅇㅇ 사실상 abstract 키워드를 위해 쓴다고 생각해도 됨
추상 클래스란게 따로 있는 이유는 본문에서 짐작한대로 추상 클래스로는 인스턴스를 만들수 없고 반드시 특정 메서드를 구현한 자식 클래스를 만들어야만 인스턴스화 할 수 있다는 점을 언어 차원에서 명확하게 하기 위해가 맞음.
내가 이해한 질문 내용은 부모 일반 함수가 상속 받은 자식들이 구현도 바꿀필요없이 상속받은 그자체로 사용이 가능하도록 되있다면 그 함수를 가상 함수로 만들지 말고 그대로 일반 함수로 써도되냐? 라고 물어보는건데 답은 일단 맞음. 예를 들어보면 개와 고양이가 있는데 공통점은 동물인것이고 다른점이 있다면 울음소리 겠지 그럼 개 , 고양이의 부모 클래스인 Animal 추상 클래스를 만들고 해당 클래스에서 기본적인 동물의 기본 구현을 하고 자식 클래스인 Dog, Cat 클래스는 상속을 받아 오버라이딩 해야하는 함수만 뚝딱뚝딱 하고 만드는 거임.
추상 클래스는 순수 가상 함수가 있는 객체를 뜻하는건 알지? 그럼 가상 함수가 아니라 순수 가상 함수를 만드는이유는 ? 만약 라이브러리나 뭐든 가져와서 객체를 만들었는데 우리가 내부를 볼수없는 인터페이스 클래스를 상속 받았을 때 꼭 오버라이딩 해줘야하는 함수를 순수 가상 함수가 아닌 그냥 가상 함수로 만들어버리면 의도하지 않는 동작이 되버리는겨 개, 고양이는 울음 소리가 있는데 동물 자체의 울음소리가 뭐냐고 물어보면 없잖슴. 그러므로 울음소리를 출력하는 함수는 가상 함수가 아닌 순수 가상 함수로 선언해서 무조건 오버라이딩 하도록 구조를 만드는거임. 즉, 추상 클래스는 무조건 오버라이딩으로 구현을 하도록 강제하도록 하는거임. 그리고 만약 오버라이딩을 안하고 부모 클래스를 호출해도 상관없거나 어떤 객체는
오버라이딩해서 구조를 다르게 하고싶으면 가상 함수를 쓰는 것이고
그리고 님이 말한 상속 받은 자식 클래스들이 오버라이딩 할 필요없이 부모의 함수을 호출해서 사용한다면 일반 함수 써도됨~
부모만으로는 쓰이지 않을 때 쓰는듯? 저는 오히려 인터페이스 사용처가 애매함.. 추상클래스는 이곳저곳 사용했는데
인터페이스는 다중 상속이 가능하다는 압도적 장점이 하나 있긴 함...
나같은 경우에는 스킬을 입력대기, 실행등의 일관성을 위해 상태머신에 편입시려고, 스킬을 인터페이스도 구현하고 상태 인터페이스도 구현하는식으로 씀...
흠 아직 늅뉴비라 상속 2개이상 넘어가는게 없는
추상화 잘하면 종속성이 줄어들어서 나중에 구현 추가할때 기존코드 수정안하고 추가만해서 해결할수있음 - dc App
추상화나 그런 거 짤때는 니가 집에서 혼자 3개월짜리 인디겜 만드는 환경을 생각하면 안됨. 추상화를 하는 이유는 통신 때문. 가령 시카고에 사는 프로그래머가 클래스 설계를 했는데 그거 갔다 쓰는 프로그래머는 마이애미에 있고 서로 통화도 안될 때 추상화는 개 삽질을 조금이나마 줄여줌. 추상화로 만든 구조가 강요되기 때문에 의도를 벗어나지 않게 강요할 수 있다. 개인을 예로 든다면 자신이 클래스 설계할 때는 상관 없는데 그 클래스를 4년 뒤 상속해서 사용한다면? 4년전 너랑 통신이 안되기 때문에 개삽질할 우려가 있음.