kmmom591
@kmmom5916278
受講生
454
受講レビュー
38
講義評価
4.7
안녕하세요.
저는 방위산업체에서 SW 개발자로 근무하며 방산 연구원으로 일하고 있는 개발자입니다.
대학에서는 컴퓨터공학을 전공했고,
방위산업체에 입사해 실제 방산 SW 개발 프로젝트에 참여해 왔습니다.
현재는 무기체계 및 방산 시스템과 연계된 소프트웨어를 개발하며,
C++, Java 기반의 시스템 개발을 수행하고 있습니다.
講義
受講レビュー
投稿
Q&A
다형성 개념 문의
좋은 질문 감사합니다!다형성을 오버로딩/오버라이딩으로만 설명하는 것은 사실 다형성의 일부만 다루는 것입니다. Cardelli & Wegner(1985)의 분류에 따르면 오버로딩은 임시적 다형성(ad-hoc polymorphism) 의 한 종류이고, 객체지향 설계에서 핵심으로 다루는 것은 서브타입 다형성(inclusion polymorphism) 입니다."부모 타입으로 다룬다 = 구현이 아닌 추상에 의존한다"는 GoF의 "Program to an interface, not an implementation" 원칙과 동일한 맥락으로, 코드가 구체적인 클래스가 아니라 인터페이스/추상 타입에만 의존하면 새로운 구현체를 추가해도 기존 코드를 수정할 필요가 없습니다. 이것이 OCP가 다형성/추상화와 연결되는 이유입니다. 1. 다형성(Polymorphism)의 정의 — 오버로딩/오버라이딩을 넘어서Luca Cardelli & Peter Wegner (1985), "On Understanding Types, Data Abstraction, and Polymorphism" (ACM Computing Surveys, Vol. 17, No. 4)이 논문은 다형성을 다음 네 가지로 분류한 가장 권위 있는 원전입니다:Parametric polymorphism (제네릭)Inclusion polymorphism (서브타입 다형성 — 상속/인터페이스)Overloading (임시 다형성)Coercion (강제 변환)오버로딩은 다형성의 한 종류일 뿐이며, 객체지향에서 핵심으로 다루는 다형성은 Inclusion polymorphism(서브타입 다형성) 입니다. 2. "부모 타입으로 다룬다" = "구현이 아닌 추상에 의존" — 이게 무슨 뜻인가?Barbara Liskov (1987), "Data Abstraction and Hierarchy" (SIGPLAN Notices)리스코프 치환 원칙(LSP)의 원전으로, 핵심 개념은 이것입니다:"If S is a subtype of T, then objects of type T may be replaced with objects of type S without altering any of the desirable properties of that program."즉, 코드가 구체적인 자식 클래스(구현)를 몰라도 부모 타입(추상)만 알면 동작해야 한다는 것이고, 이것이 "구현이 아닌 추상에 의존"의 의미. 3. OCP와 다형성/추상화의 관계Robert C. Martin (1996), "The Open-Closed Principle" (C++ Report)"A module should be open for extension but closed for modification."Martin은 이 원칙을 달성하는 핵심 수단으로 추상화(abstraction) + 다형성(polymorphism) 을 명시합니다. 새로운 구현체를 추가할 때 기존 코드를 수정하지 않아도 되는 이유가 바로 부모 타입(인터페이스/추상클래스)에 의존하기 때문입니다.GoF (Gang of Four), "Design Patterns" (1994) — Erich Gamma 외"Program to an interface, not an implementation."위 문장이 "추상에 의존"의 유명한 표현. 4. DIP(의존성 역전 원칙)와의 연결Robert C. Martin, "Agile Software Development" (2002)"High-level modules should not depend on low-level modules. Both should depend on abstractions.""구현이 아닌 추상에 의존"과 정확히 같은 맥락. 참고 자료:Cardelli & Wegner (1985) — "On Understanding Types, Data Abstraction, and Polymorphism"Barbara Liskov (1987) — "Data Abstraction and Hierarchy"Robert C. Martin (1996) — "The Open-Closed Principle"GoF (1994) — "Design Patterns: Elements of Reusable Object-Oriented Software"
- 1
- 3
- 43
Q&A
안녕하세요. 수업 자료 링크 제공은 어디인가요?
https://gitlab.com/kmmom591-group/uml-basics상기 URL으로 접속하시면, 수업 진행에 사용한 자료 및 실습 자료 확인 가능하십니다.감사합니다 :)
- 0
- 1
- 46
Q&A
진로가 큰 고민입니다...
안녕하세요 :) 자바·백엔드 포트폴리오, 방산에서 불리할까?결론부터 말하면 마이너스는 아닙니다.다만 직무에 따라 핏이 다를 뿐이에요.방산 기업 안에도 크게 보면임베디드/제어 SW (C/C++)시스템·플랫폼 SW시험·시뮬레이터·도구 개발내부 서버·데이터 처리이렇게 나뉩니다.자바 백엔드 경험은 후자의 영역에서 충분히 의미가 있고,“SW를 구조적으로 설계하고, 문제를 끝까지 해결해본 경험”은 어떤 직무에서도 공통으로 봅니다. 그럼 C/C++을 꼭 새로 파야 할까?지금까지 한 백엔드를 버릴 필요는 전혀 없습니다.대신 “주력은 자바 백엔드,방산을 고려해 C/C++과 Linux를 이해하는 수준까지는 가져가자.”추천은C/C++로 작은 프로젝트 1~2개리눅스 환경에서 빌드·실행 경험네트워크, 메모리, 프로세스 개념 이해이 정도만 있어도 면접에서는“주 언어는 자바지만, 방산 환경을 고려해 C/C++ 기반 시스템도 학습했습니다.”라고 충분히 설득력 있게 설명할 수 있습니다. 3학년 지금 시점에서의 방향 제안지금 하던 자바 백엔드 프로젝트는 계속 완성도, 구조, 설명력을 높이세요동시에C/C++ + Linux는 깊이보다 ‘경험’ 위주방산 SW가 돌아가는 환경을 이해하는 데 초점4학년 때 방산 / 대기업 / 금융권 동시에 지원 가능한 포트폴리오 완성 물론 제가 제시한 방향이나 조언이 100프로 맞다는 보장은 없지만, 미약하게나마 도움이 되시길 바라겠습니다.감사합니다.
- 0
- 1
- 89






