해결된 질문
작성
·
423
·
수정됨
2
영호님 강의 잘 들었습니다.
객체지향적인 설계에 대한 근원이되는 내용에 관심이 많아
영호님의 서적과 강좌를 자주 보게 되네요
본론
시중에 나와 있는 서적과 강좌가 정말 잘 되어 있는 만큼
사람들이 많이 사용하는 스프링 프레임워크에 적용한 예제도 가끔 있으면 어떨까 합니다.
생각보다 이 부분이 제 주변인들의 가려운 부분이었어요
예를 들면
스프링을 사용하는 가정하에 비즈니스 계층에 적용해야하는데,
다형성이 필요한 서비스의 경우 "인터페이스 - 구현체" 로 구축시
구현체들을 Spring Bean으로 사용할 경우, 컴파일 시 구체적인 구현체가 아니라 에러가 나는데
이럴때는 구현체를 매핑해주는 팩토리를 생성해서 사용해야된다
와 같은 다소 객체지향과는 동떨어지지만 소소한 설명이 언급되어도 좋을 것 같습니다.
아마 강좌나 서적을 보는 많은 사람들이 비슷한 생각일 것 같습니다.
"이 부분을 만약에 업무에 적용시킨다면 어떻게 해야 할까나?" 대부분 이런 생각이지 않을까 해서 드린 말씀입니다.
항상 고품질의 강좌와 서적을 위해 애써주시는 영호님께 다시 한 번 감사드립니다.
답변 3
6
ycseol님 안녕하세요.
먼저 강의에 대한 의견 주셔서 감사합니다. :)
개인적으로도 언젠가는 스프링이나 JPA 관련된 강의를 하는게 좋지 않을까라는 생각을 하고 있는데 일단 객체지향 - 설계 원칙편 강의를 만드는 동안에는 순수하게 객체지향 자체에 집중하는 쪽을 선택했어요.
이유를 간단히 말씀드리겠습니다.
“시중에 나와 있는 서적과 강좌가 정말 잘 되어 있는 만큼 사람들이 많이 사용하는 스프링 프레임워크에 적용한 예제도 가끔 있으면 어떨까 합니다”라고 말씀해 주셨는데 오브젝트 - 설계 원칙편은 의도적으로 스프링이나 JPA와 같은 특정 기술과 관련된 내용을 배제하고 객체지향적인 코드를 작성할 때 필요한 원칙과 사고방식에 집중할 수 있도록 구성했습니다.
몇 가지 예제를 제외하면 가급적 Java 표준에 포함된 라이브러리를 사용한 이유도 그 때문이구요.
이 부분은 개인적으로 고민을 많이 한 부분인데요 스프링이나 JPA처럼 많이 사용되는 기술을 기준으로 강의를 구성하는 편이 강의 판매 측면에서는 더 좋은건 당연한 이야기이기 때문입니다.
하지만 이 경우에는 객체지향 설계를 할 때 어떻게 사고하면 좋은지에 초점을 맞추는게 아니라 예제로 사용된 스프링이나 JPA에 대한 프레임워크를 설명하는데 더 큰 노력이 들어갈 수 밖에 없습니다.
이 강의는 객체지향 초급자들을 대상으로 설계된만큼 스프링이나 JPA를 기준으로 강의를 구성하면 결국은 예제에서 다루는 스프링이나 JPA를 경험하지 않은 분들은 강의를 따라오실 수 없고 맥락을 전혀 이해하실 수 없으실 거구요.
강의에 사용한 라이브러리들은 모르시더라도 강의의 흐름을 쫓아오시는데 큰 무리가 없거나 예제를 구성하는 핵심이 아닌 것으로 선정한 이유이기도 합니다.
그리고 "이 부분을 만약에 업무에 적용시킨다면 어떻게 해야 할까나?”라는 생각을 할거라고 말씀하셨는데, 강의에 있는 원칙들은 실제로 업무에서 코드를 적용할 때 사용할 수 있는 내용들입니다.
스프링이나 JPA처럼 특정한 프레임워크를 사용하지 않는건 업무에서 사용하는 예제가 아니라고 생각하시거나 객체지향적인 설계를 실제 업무에 적용하지 않을 경우에 발생할 수 있는 시각적인 차이라고 생각합니다.
스프링 관점에서 특정한 기술에 기반한 설계 방식이 더 궁금하시다면 오히려 이쪽 주제로 더 좋은 강의들이 많이 나와있기 때문에 제 강의보다는 해당 기술을 다룬 강의를 들으시는 것을 추천드립니다.
마침 토비님 강의가 새로 나왔으니 이 강의를 한번 보시면 어떨까 싶고(https://inf.run/cKwn3) 저보다 더 잘 아시겠지만 영한님 강의가 이런 측면에서는 정말 탁월합니다.
제 강의를 보신 상태에서 두 분의 강의를 보시면 필요한 부분을 충족시킬 수 있으리라 생각합니다. 🙂
설계 원칙편을 스프링과 JPA에 응용한 강의를 만들어 보는 것도 현재 고려하고 있기는 합니다만 바로 진행할지 추가 강의를 만든 후에 진행할지 조금 고민하고 있어요.
다만 현재 강의는 설계 원칙 자체를 깊이있게 다루는 것을 목표로 한다는 점을 강조하고 싶습니다.
(이게 수강생이 적은 이유일 수도 있겠지만... ㅠㅠ)
애정어린 조언 감사드립니다.
ycseol님, 피드백 정말 감사합니다. 🙂
부족한 점이 많은 강의임에도 도움이 되셨다면 정말 다행이에요. ^^
저 역시도 이번 기회에 너무 제 관점에서 강의를 구성한건 아닌가 하는 고민을 할 수 있는 계기가 되었습니다.
말씀 주신 대로, 실무 관점에서 바로 적용 가능한 내용이나 스프링을 기반으로 설계 원칙을 풀어내는 방식을 별도의 강의로 구성할 수 있을지 검토해보겠습니다.
소중한 의견 정말 감사드려요!
2
ycseol님께 드렸던 답변 이후에도 이 주제가 계속 머릿속을 맴돌아 며칠 뒤 따로 생각을 정리해서 링크드인에 올렸습니다.
혹시 관심 있으실까 싶어 여기에도 함께 공유드립니다.
질문을 통해 강의 방향에 대해 다시 고민해보는 계기가 되었습니다.
좋은 인사이트를 주신 점 다시 한번 감사드립니다.
인프런의 오브젝트 - 설계 원칙편을 수강하신 분이 감사하게도 Q&A에 정성스러운 후기를 남겨주셨습니다. 수강생분의 의견을 한 줄로 요약하면 자바 진영의 표준으로 사용되는 스프링을 기반으로 설계 원칙을 적용한 예제도 있었으면 좋지 않겠냐로 요약할 수 있습니다.
이 후기를 읽고나서 한 동안 머릿속으로 많은 생각이 흘러 지나갔습니다. 그리고 여러 번 답변을 수정하는 동안 제가 가지고 있던 생각에 대해서도 다시 한번 돌아보는 계기가 되기도 했습니다.
사실 이 부분은 첫 번째 강의인 오브젝트 - 기초편을 만들기 시작할 때부터 많이 고민했던 주제이기도 합니다. 그리고 그 때의 고민이 이번 후기를 통해 강의의 정체성과 방향성에 대한 새로운 고민으로 이어지게 되었구요. 아무래도 국내의 개발자 대부분이 스프링을 주요 프레임워크로 사용하고 있고 많은 인기 강의들이 스프링(그리고 JPA) 중심으로 구성되어 있다보니 강의를 만드는 입장에서는 스프링 기반의 강의를 만드는게 ROI 관점에서 훨씬 더 효율적으로 다가올 수 밖에 없습니다.
그럼에도 스프링을 포함한 특정 프레임워크나 기술을 최대한 배제하고 강의를 만든 이유는 오롯이 객체지향적인 사고방식과 설계에 집중하는 강의로 시작해서 스프링이나 JPA를 사용한 강의로 나아가는 로드맵을 계획하고 있기 때문입니다. 스프링 안에 객체지향 설계를 가둬두기 보다는 제가 성장했던 경험을 기반으로 객체지향에 대한 이해도를 높여서 자연스럽게 스프링을 포함한 다양한 코드를 이해할 수 있도록 만드는게 좋지 않을까라는 생각도 있었구요.
하지만 전체는 아니더라도 일부 예제라도 스프링을 기반으로 설명해주면 좋지 않겠냐는 의견은 제 입장에서 깊이 고민해봐야하는 주제라고 생각합니다. 다음 강의는 원래의 계획대로 기본 개념을 쌓는 쪽으로 갈 지, 아니면 기존 강의에 라이브 코딩을 보강하거나 실무 관점에서 지금까지 설명했던 개념들을 적용하는 중간 단계의 실무 강의를 만드는게 좋을 지 좀 더 고민해 봐야겠어요.
저자가 전달하고 싶은 내용을 담게 되는 책과 다르게 빠르게 피드백을 주고 받으면서 경로를 수정할 수 있는게 온라인 강의의 매력이라는 생각이 드네요. 후기를 남겨주신 분처럼 강의에 대한 다양한 의견을 주시면 기존 강의를 개선하거나 이후의 방향을 조정하는데 큰 도움이 될 것 같습니다. 🙂
0
안녕하세요, 인프런 AI 인턴입니다. ycseol님!
영호님의 강의를 통해 객체지향 설계에 대한 많은 통찰을 얻고 계시다니 기쁩니다. 후기를 통해 현업에서의 적용에 대한 고민을 공유해주셔서 감사합니다. 실제 개발 환경에서 객체지향 설계를 효과적으로 적용하는 것에 대한 고민은 많은 개발자들이 공감하는 부분입니다.
Spring 프레임워크와 같은 실제 기술 스택에 객체지향 원칙을 어떻게 적용할 수 있을지에 대한 이해는 매우 중요합니다. 특히 인터페이스와 구현체의 관계에서, 컴파일 시점의 의존성 문제를 어떻게 처리할지에 대한 부분은 실제로 많은 개발자들이 마주하는 도전 과제가 됩니다. 이러한 상황에서:
팩토리 패턴을 사용하여 구현체들을 생성하고 의존성을 주입하는 것은 객체지향 설계의 좋은 예시입니다. 스프링에서는 이런 팩토리 역할을 직접 구현하거나, 스프링의 DI(Dependency Injection) 기능을 활용하여 Bean 설정을 통해 이를 해결할 수 있습니다.
스프링에서의 다형성 활용 및 구체적인 구현체 매핑 문제는 다양한 방법론이 있으며, 각 방법론에 대한 장단점을 이해하고 상황에 맞게 유연하게 적용하는 것이 중요합니다.
이와 관련하여 제가 찾은 몇 가지 관련 질문 및 답변 URL을 추천드립니다:
- \“DAO 관련 질문드립니다\” : 스프링 프레임워크의 DAO 패턴을 이해하고 효과적으로 적용하는 방법에 대해 설명하는 포스트입니다.
- \“실제로 객체지향으로 설계를 많이 하는지 궁금합니다.\” : 객체지향 설계 원칙을 실제 현업에 어떻게 적용할 수 있는지에 대한 논의가 이루어진 포스트입니다.
이 답변이 ycseol님의 이해를 도울 수 있기를 바라며, 앞으로의 개발 여정에도 많은 도움이 되기를 바랍니다. 새로운 질문이 생기면 언제든지 추가적으로 질문 부탁드립니다. 곧 지식공유자님께서도 답변을 주실 것입니다. 감사합니다!
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
영호님 안녕하세요
답변해주신 글 보고 어떤 취지였는지 확 알것 같습니다. 가능한 순수하게 외부 의존성 없이 객체지향 설계에 대한 강의였고, 그 만큼 다양한 곳에서 비즈니스 설계를 할때 큰 도움이 될 것 같아 많은 사람들이 매력을 느끼는거라 생각이 됩니다.
모니터와 키보드 앞에서 자칫 외로운 시간을 보낼 수 있는 개발자들에게 영호님과 같은 좋은 분이 함께해서 정말 영광이라 생각합니다. 제 주변에게 더더욱 전파를 해야겠어요^^
감사합니다.