생활
객체지향설계는 얼마나 중요하나가요?
실무에서 알마나 활용되고 있는지 궁급합니다
또 도메인 주도 설계도 얼마나 개발에 활용되는지도 궁금하네요
객체지향설계 능력을 행상하려면 어떤 학습 활동들을 해야할까요?
........
4개의 답변이 있어요!
안녕하세요!
객체지향은 얼마나 중요한가?
- 유지보수, 코드 관리 등 무척 중요하다.
실무에서 얼마나 활용되는가?
- 중요하지만, 생각보다 잘 활용되지 않는 경우가 많다. (체계적인 개발 업무가 잡힌 대기업 등 제외)
도메인 주도 설계가 개발에 얼마나 활용되는가?
- 사실상 거의 사용되지 않는다.(체계적인 개발 업무가 잡힌 대기업, 이론에 입각한 개발자 마인드를 가진 대표가 운영하는 회사 제외)
객체지향 설계 능력을 향상하려면?
- 무료 강의를 포함한 '객체지향설계' 강의 수강 및 활용(유튜브, 블로그 포함)
- ★ 직접 간단한 설계를 구현(도형 예제 등)
- ★ 객체지향 설계가 적용된 코드의 분석
사실 '객체지향 설계 능력', '객체지향 위주'라는 단어가 들어간 강의나 학습이 아니라면, 객체지향 언어(C++, JAVA 등)라고 할지라도, 객체지향설계 능력에 전혀 아무런 도움이 안 됩니다. (Class 공부할 때 지나가면, 해당하는 분야 설명을 위해 객체지향 설계된 예제로 설명하지 않기 때문)
> 객체지향설계는 얼마나 중요하나 가요?
> 실무에서 얼마나 활용되고 있는지 궁금합니다
객체지향설계는 장기 프로젝트에서 유지보수 시에 굉장히 중요합니다. 솔직히, 언뜻 실무 개발에는 절차지향 식 구현이 쉽고 빠릅니다.
main 함수로 시작해서 차례대로, 중간에 함수를 넣고 반복문과 Thread loop을 통한 반복이 일반적이지요.
그러나 규모가 커지면, 그런 코드는 본인밖에 모르고, 코드를 쓴 자신도 나중에 잊어먹게 됩니다.
(경력 프로그래머라면 반드시 경험하는 기이한 현상이죠, 이거 내가 왜 이렇게 짰지?)
그래서 강조되었던 게 '객체지향설계' 입니다. 공통된 기능을 상속받아 관리하면, 공통된 기능을 수정할 때 한 번만 수정하면 되고, 기능 별로 묶어 수정이 필요할 때 또는 문제가 생겼을 때 '이 부분을 보면 되겠다.'가 바로 될 수 있기 때문이지요.
그래서 결론,
실무에서 중요합니다.
실무에서 사용하면 회사 차원에서는 엄청난 유지보수 비용을 절감할 수 있지만(설계 때문에 직원 한 명이 일당백 가능),
그런데, 이게 눈에 잘 보이지 않거든요. 그래서 회사 대표들이나 간부가 실수를 많이 합니다.
'이거 무조건 빠르게, 눈에 보이게, 되게'해 주세요.
그래서, 실무에서 생각보다 객체지향설계로 구현하는 경우가 많지가 않습니다.
객체지향 설계를 하라고 요구하지도 않고요.
대부분 객체지향 설계가 된다면 그건, '개발자'가 '내가 잘 설계해서 써야지 내가 나중에 수정하기 편하지!' 마인드로 오히려 많이 합니다.
적성이 확실하지 않은 대부분의 일반 개발자 직원은 회사의 요구대로 '눈에 보이게, 빠르게, 되게' 하는 것을 선택합니다...
(물론 객체지향설계의 중요성을 아는 사장님이 있는 회사 및 대기업 일부는 이러한 설계 방법을 규칙으로 만들고 잘 지키는 것으로 알고 있습니다)
또 도메인 주도 설계도 얼마나 개발에 활용되는지도 궁금하네요
- 실무에서 생각보다 사용되지 않습니다. 이론과 실무는 다르니까요. 아마도 스타트업이나 항상 좋은 걸 먼저 해보려는 대기업에서 '시도'를 하는 정도라고 알고 계시면 될 것 같습니다.
(많은 IT 중소기업 대표에게 '도메인 주도 설계'를 하십니까? 물어보면, '그게 뭔가요?'라는 답변이 돌아올 겁니다)
객체지향설계 능력을 행상하려면 어떤 학습 활동들을 해야 할까요?
> 객체지향 설계를 전문으로 하는 강의들이 있습니다. 그러한 강의(무료, 유튜브 등)를 들어보시는 것도 도움이 될 것 같습니다.
(C++, JAVA 등 객체지향 언어 자체를 배우는 거로 객체지향 설계를 공부해서는 안 됩니다)
가장 좋은 건 직접 실무로 경험을 해부 것인데,
이미 객체지향 설계된 코드를 분석해보는 것이 가장 도움은 많이 된다고 볼 수 있습니다.
(실무에 적용된 객체지향 코드는 여러 가지 예외나 효율성 등, 급할 때는 객체지향을 무시한 급한 코드 사용 등을 모두 경험해보실 수 있어요.)
객체지향 언어의 경우 설계시 많이 활용이 된다고 보면 좋을 것 같습니다.
기본적으로 자바로된 프로젝트를 수행한다면 객체지향을 모르면 협업하기가 힘들지 않을까 합니다.
객체지향 없이도 개발이 가능하기는 하겠지만 그렇게되면 나중에 유지보수가 굉장히 힘들어질 가능성이 높습니다.
잘만들어진 코드를 많이 보는 것이 좋을 것 같습니다.
생활코딩 (opentutorials.org) 여기에 가셔서 기본과 개념을 복습하세요.
그리고나서 GitHub: Where the world builds software · GitHub 여기에 가셔서
구현하고 싶은 기능에 관련된 소스나 아니면 참고하실만한 소스를 구하셔서
그걸로 연습하세요.전혀 아무런 참고할 소스조차 없다면 아무소스나 가져와서
분석하시면서 알고리즘을 학습하세요.
객체지향의 핵심은
재사용과 확장입니다.
코드의 의존성을 줄이고 결합도를 낮추는것이 핵심적인 내용이고 이렇기 때문에 캡슐화를 잘 활용해야 합니다.
캡슐화 한 메서드를 호출하는 방식이 필요한 것이죠
사실 실무에서는 활용될 수 밖에 없습니다.
예를들어서 삼성전자 공장에 시스템을 구축해 놨는데 수정이 필요하다고 가정해봅시다.
한시간에 수십억씩 없어지는 상황에서, 객체지향 적으로 구성되어 있지 않다면, 원하는 메소드와 클래스만 빠르게 변환하지 않고 서로간의 영향도를 분석하여 엄청난 손실이 발생하지 않겠습니까?....
코드는 완벽하게 기능이 동작해야하고, 변경하기도 쉬워야 하며 이런 점에서 객체지향이 유리한 부분이 있습니다.