자바의 객체지향프로그래밍은 어떠한의미를 담고 있을까요?
안녕하세요 자바의 객체지향의 관련한 프로그래밍 관련 질문사항입니다.
자바의 객체는 캡슐화와 다형성, 추상화,상속성으로 배우며 알고있습니다.
하지만 코딩으로 작업할땐 의미가 퇴색 되는 경우가 많습니다.
그렇다면 답변자님들은 자바를 코딩할때 어떤점을 유의하면서 코딩을 하며. 객체에 4가지를 어떠한 방향으로 생각 하면서 작성하는지 알고 싶습니다.
이상입니다. 답변부탁드립니다
사실 걷는 과정도 매우 복잡합니다.
하지만 대부분 걸을 때 그런 과정을 생각하지 않습니다. 몸에 익었으니까요. 그냥 걷는 게 익숙합니다.캡슐화, 다형성, 추상화, 상속 같은 것도 비슷하게...
객체지향 프로그래밍이 익숙하다면 그런 걸 의식적으로 떠올리지 않아도 그냥 작성할 수 있습니다.객체지향은 객체들간의 상호작용으로 프로그램을 짜며 각각의 객체들이 고수준으로 잘 추상화 되어있을 경우 가독성과 재사용성을 높일 수 있다는 점에서 모든 것들이 시작됩니다.
객체지향적으로 프로그램을 잘 짜기 위해선 객체를 이해해야 하며 아키텍처와 코드의 재사용성에 대해 깊은 고민을 해야합니다.
하지만 말씀하신 캡슐화, 다형성, 추상화, 상속성 4가지 특성들은 객체지향적으로 프로그래밍이 잘 되었을 경우 얻어지는 객체지향 특성의 일부분입니다. 이에 초점을 두기보단 객체지향 근본과 목적에 대해 고민을 하셔야합니다.
이러한 부분들은 여러 객체지향, Java 원서 책에 잘 설명이 되어 있고 예제 코드 또한 많이 있습니다. Bigjava, Headfirst 시리즈의 OOP, Java, Design Pattern, 객체지향의 사실과 오해 라는 책들을 참고하면 좋을듯 합니다.
따라서 '자바를 코딩할때 어떤점을 유의하면서 코딩을 하며. 객체에 4가지를 어떠한 방향으로 생각 하면서 작성하는지'에 대한 질문에 답보단 '코딩으로 작업할땐 의미가 퇴색 되는 경우가 많다'에 대한 부분에 집중하셔야 할듯합니다.
의미가 퇴색되는 상황이라면 다음의 것들을 확인하셔야 합니다.
----------------------------------------------------------------------
1. 설계를 우선하고 계신가요?
모든 프로그래밍의 시작은 설계입니다. 어느정도 숙달이 된다면 자잘한 모듈정도는 머리속으로 생각하고 바로 코딩을 할 수 있겠지만 기본적으로 flow chart, class diagram, sequence diagram 정도는 작성 후에 코딩을 하는것이 맞습니다. 그렇지 않다면 본래의 의도와 다른 코딩이 될 가능성이 높아집니다.
따라서 처음엔 아주 간단한 것들도 설계 후 코딩을 하는 습관을 들이는 것이 좋습니다.
2. 객체지향을 어느정도 이해하고 있는가요?
객체지향 프로그래밍의 근본은 객체에 대해서 이해하고 상황에 맞는 추상화를 했으며 각각의 객체들이 잘 상호작용 하도록 하는것입니다. 이를 위해서 객체지향을 다루는 책에선 SOLID, 추상화 기법, 객체의 상호작용 등 객체지향을 위한 여러 방법들을 제시합니다.
객체에 대한 이해와 객체지향에 대한 이해가 부족하다면 당연히 객체지향적이지 않은 프로그램을 만들게 됩니다. 따라서 객체지향, 디자인 패턴들과 관련된 여러 책들을 학습하셔야 합니다. 그리고 해당 책들에 예제로 나오는 객체 설계를 잘 보시고 설계 방법에 대한 이해를 높여야 합니다. 그 후 직접 설계를 하면서 객체지향의 근본을 잘 지키고 있는가를 끊임없이 고민하는것이 좋습니다.
3. 소프트웨어에대해 잘 이해하고 있나요?
소프트웨어는 언제나 변합니다. 만들고자하는 소프트웨어에 대한 이해가 적거나 요구사항의 변동이 있을 예정이라면 초기 설계는 변하기 마련입니다. 따라서 재사용성이 보장되지 않는 상황에서 과도한 객체지향 설계는 비용낭비로 이어지므로 지속적인 리팩토링을 통해 점차 객체지향적으로 고도화를 하여 소프트웨어 품질을 개선하는 방향으로 가야합니다.
4. 객체지향이 적절한 상황인가요?
객체지향 방법론 이외에도 많은 프로그래밍 방법론이 있습니다. 만들고자하는 소프트웨어가 객체지향에 적절한지에 대한 고민이 필요합니다.
안녕하세요.
자바 코딩 관련하여 답변드립니다.
위의 답변처럼 경험만큼 중요한게 없다는 부분은 맞다고 생각됩니다.
하지만 조금더 깊이있게 말씀드리고자 답변합니다.
자바의 4가지 특성을 모두 고려하여 코딩한다는점은 매우 바람직하나 현업에서는 꽤 어려움이있습니다.
위의 제시해주신 4가지 특성을 기준으로 다형성과 추상화의 개념에 대해서는 사실상 데이터베이스쪽에 가깝습니다. 데이터베이스쪽의 데이터 구성에 따라 코딩도 많이 변화합니다. 하여 두 특성은 데이터에 직접적인 특성이며 아키텍처와 DB설계에따라 다라집니다.
하지만 나머지 두개인 캡슐화와 상속성에 관해서는 함수적인 성격에 더 다깝다고 생각하며, 얼마나 간결하고 모듈화시키며 유지보수시에 발생할 수 있는 2차 피해를 줄일 수 있는 방법에 대해 고민하면서 코딩해야하므로 더 중요한 특성이라 생각됩니다.
하여 지금 준비기간동안 코딩쪽으로 준비하신다면 캡슐화하여 클래스나 패키지 형태의 코딩스타일을 추구하시면 현업에서 유용할것이며, 추상화나 다향성의 경우는 데이터 관리 혹은 구성을 어떻게 해야할지 위주로 고민하신다면 더 도움이 되리라 생각됩니다.
공감합니다. 확실히 지식도 중요하지만
실전에서 몸에 익숙한게 ~
실전에서 하다보면 코딩은 다 되게 되어있습니다 다만 코드가 깔끔하냐
가독성이 있냐 짜임새가 있냐 차이가 있을뿐 더 심화되면 퍼퍼먼스는 잘나오냐도 중요하구요^^
코딩하다보면 다 자연스레 알게 되는 것들이구요~