[StarUML] 클래스 다이어그램에서 인터페이스 모양 원래대로 바꾸는 방법
preferece -> UML -> Class -> Stereotype Display를 Label로 바꾼다. label로 바 꾸면 이렇게 변한다
preferece -> UML -> Class -> Stereotype Display를 Label로 바꾼다. label로 바 꾸면 이렇게 변한다
abstract로 설정하고 싶은method를 선택 -> 우측 하단 Properties -> isAbstarct 체크
Open Closed Principle 개방-폐쇄 원칙 정의 : SW entities(클래스, 모듈, 함수등)의 확장에는 열려있고 코드 수정에는 닫혀있어야 하는 원칙 조금 더 직관적으로 말하면 기존의 코드 수정없이 새로운 클래스등을 프로그램에 추가하는 것을 의미한다. 개방-폐쇄 원칙을 지키지 않은 경우에는 클래스가 추가 될 때마다 기존 코드의 수정이 발생하게 되는 문제가 있다. 클래스가 한두개 추가된다면 문제가 없겠지만 수십개가 추가되는 경우라면 OCP 원칙을 기억하면 좋겠다. 개방-폐쇄 원칙을 위반한 예 예를들어 HRManager에서 모든 Employee의 Salary를 계산해야 한다고 가정하자. 아래와 같이 디자인한 경우 각자의 Employee(Developer, Staff, Marketer)의 sa..
OOP에서 SOLID와 같은 원칙은 왜 필요할까? 원칙이 필요한 이유는 바록 나쁜 디자인을 예방하거나 고치기 위함이다. 그러면 나쁜 디자인이란 어떤것일까? 여러가지가 있겠지만 우선 아래와 같은 항목들로 정리해볼 수 있다. 유연하게 변화하지 못하는 경직성(Rigidity), 코드를 수정할 때 다른 코드까지 영향을 주는 취약성(Fragility), 모듈간 커플링이 높아 재사용이 어려운 부동성(Immobility), 나쁜 코드가 쉽게 추가될 수 있는 점착성(Viscosity), 불필요한 복잡성(Needless Complexity), 불필요한 반복(Needless Repetition), 불투명성등이 있겠다. 따라서 위와 같은 문제를 예방하거나 고치기 위해서는 개발 원칙을 준수하며 설계를 하는게 바람직하다. 그 ..
객체지향 패러다임 패러다임이란 한 시대의 사람들의 견해나 사고를 근본적으로 규정하고 있는 인식의 체계. 또는, 사물에 대한 이론적인 틀이나 체계. 을 의미한다. 그러면 객체지향 패러다임은 객체지향적인 사고의 틀을 의미하는데 프로그래밍에서 객체지향은 프로그램의 각 기능과 데이터를 객체로 바라보는 사고를 의미한다. 객체의 기본이 되는 단위는 Class인데 Class는 아래와 같이 정의 된다. Class = ADT(Abstract Data Type) + Inheritance + Polymorphism ADT(Abstract Data Type) ADT 즉, 추상 자료형을 한마디로 정의하면 관련된 데이터와 오퍼레이션을 모은 것이다. 이렇게 했을 때 장점은 1. 관리, 수정 용이 2. 캡슐화로 해당 ADT를 사용하..
git add * 는 .gitignore파일에 있는 파일들도 stage로 올리는 것 git add .는 .gitignore파일에 있는 파일명들은 제외하고 stage에 올리는 것 따라서 .gitignore를 사용한다면 git add .를 사용하면 된다!
장고의 작동 구조 1. 클라이언트가 웹브라우저에서 url을 이용해 장고 서버에 접속 ex) xxx.com/ 2. 서버에 접속하면 urls.py는 url요청에 따라 view를 분배 ex) GET xxx.com/myname , POST xxx.com/myposting ... 3. view에서는 클라이언트의 요청을 처리함 4. 데이터 형태를 모델로 표현하고 Create, Read, Update, Delete 인터페이스를 제공 5. 모델에서 요청한 내용을 실제 데이터베이스 내부에서 처리 6. 사용자 요청에 맞게 html을 만들어 사용자의 웹브라우저로 전달 MTV패턴 장고로 만들어진 웹사이트는 모델(model)로 데이터를 추상화하고 뷰(view)로 어떻게 처리를 할지 정하고, 템플릿(template)으로 웹 페이..
프로그램을 하나 만들 때 모든 기능을 직접 개발하는 경우는 거의 없다. 라이브러리를 활용하거나 외부 패키지를 불러와 사용하는 경우가 대부분이다. 이러한 상황에서 우리쪽에서 개발하는 코드와 외부의 코드의 경계가 생기기 마련이고 경계를 확실히 하지 않으면 수정할 때 손이 많이 가게 된다. 그래서 애초에 경계를 명확히 나누면서 개발하면 수정을 최소화하면서 유연하게 변화에 대처할 수 있다. 이번 챕터에서는 경계를 만들어야 하는 상황과 해결책을 제시한다. 외부 코드 사용하기 패키지, 프레임워크 제공자는 최대한 많은 사용자들이 범용적으로 사용할 수 있도록 인터페이스를 설계한다. 반면 인터페이스를 사용하는 입장에서는 본인이 필요로 하는 요구사항에 집중하기를 바란다. java에서 제공하는 java.util.Map을 예..
오류 코드보다 예외를 사용하라 오류 코드를 사용했을 때의 문제점 아래의 코드처럼 오류처리가 많아져 코드가 복잡해진다. 또한 휴먼에러 발생가능성이 농후해진다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 public class DeviceController { ... public void sendShutDown() { DeviceHandle handle = getHandle(DEV1); // 디바이스 상태를 점검한댜. if (handle != DeviceHandle.INVALID) { // 레코드 필드에 디바이스 상태를 저장한다. retrieveDeviceRecord(handle); // 디바이스가 일시정지 상태가 아니라면 종료한다. if (reco..
자료 추상화 OOP에서 특수한 경우가 아니면 class안의 인스턴스변수를 private으로 정의하는 한다. 왜냐하면 남들(사용하는 쪽)이 변수에 의존하지 않게 만들기 위해서이다. 참고 + (d-yong.tistory.com/21) [C++] 클래스를 캡슐화(Encapsulation) 하는 이유(왜 멤버변수는 대부분 private인가?) 객체지향 언어에서 클래스를 만들때 항상 나오는 말은 캡슐화(Encapsulation)다. 즉, 멤버변수는 private 접근 한정자로 외부의 직접적인 접근을 제한하고 클래스를 사용하는 외부에 인터페이스를 제 d-yong.tistory.com 위의 내용에 한발더 나아가 클린코드에서는 추상화 인터페이스를 제공해 API를 사용하는 쪽에서 내부 구현을 모른채 기능을 사용할 수 있..