전체 글
-
리스코프 치환 법칙(LSP)카테고리 없음 2019. 12. 13. 15:46
리스코프 치환 법칙(Liskov Substitusion Principle, LSP) 자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행동들은 대신 수행할 수 있어야 한다. 이를 위해 부모클래스와 자식 클래스 사이의 행위가 일관되어야 한다. 예를 들어 포유류를 부모클래스와 원숭이를 자식클래스로 비유하여 설명할 수 있다. LSP를 만족하면 포유류라는 단어를 원숭이라는 단어로 대체가 가능할 것이다. 포유류는 알을 낳지 않고, 새끼를 낳아서 번식한다. 포유류는 젖을 먹여서 새끼를 키우고 폐를 통해 호흡한다. 포유류는 체온이 일정한 정온동물이며, 털이나 두꺼운 피부로 덮여 있다. 원숭이는 알을 낳지 않고, 새끼를 낳아서 번식한다. 원숭이는 젖을 먹여서 새끼를 키우고 폐를 통해 호흡한다. 원숭이는 체온이 일정한..
-
개방폐쇄 원칙(OCP)카테고리 없음 2019. 12. 12. 14:55
개방폐쇄 원칙(Open-Closed Principle, OCP) 새로운 기능이 추가되어도 기존 코드를 변경 되지 않는다. 변해야 하는 것(구입할 물건)은 쉽게 변할 수 있게 하고, 변하지 않아야 할 것(물건을 구입하는 행동)은 변하는 것에 영향을 받지 않게 해야 한다. 어떤 물건을 구입하던지, 물건을 구입한다는 사실은 변하지 않음. 적용방법, 구입하는 행동을 추상화 하고, 구입하려는 물건에 따라 별도의 구현부를 작성. 새로운 물건을 구입하는 일이 발생항 때, 별도의 구현부를 새로 작성하면, 기존 소스 코드의 변화를 최소화 할 수 있음.
-
단일책임 원칙(SRP)카테고리 없음 2019. 12. 12. 14:00
단일책임 원칙(Single Responsibility Principle, SRP) 하나 모듈은 하나의 책임을 지며, 그 내용은 완전히 캡슐화해야한다. 예를 들어 보고서를 편집하고 출력하는 모듈이 있다고 생각해 보자. 이 모듈을 바라보면, 크게 수정변경이 필요한 경우는 두가지의 경우이다. 보고서 편집기능에 변경이 필요한 경우, 그리고 보고서 출력기능에 변경이 필요한 경우이다. 단일 책임원칙에 의하면, 이 두가지 문제는 실제로 분리된 내용이며, 따라서 분리된 클래스나 모듈로 나뉘어져야 한다. 하지만, 해당 모듈이 두개로 나뉘지 않고 하나의 모듈 안에 있을 경우, 어떤 상황이 발생할수 있을 까? 예를 들어 누군가 편집기능 일부를 변경해야라도, 혹시나 발생할 출력기능의 이상여부까지 확인해야 하는 상황이 발생한다.
-
String, StringBuffer, StringBuilder 차이카테고리 없음 2019. 12. 3. 15:19
1. String은 immutable(변경불가)하다. String은 new 연산을 통해 생성되면 그 인스턴스의 메모리 공간은 변하지 않는다. String 문자열 변경이 필요하면, 새로운 메모리 공간을 할당하고, 그 공간으로 자료를 복사. thread-safe. 단점 기존 사용되던 공간은 가비지 콜렉터에 의해 제거될 때 까지 남아 있음. 문자열 연산 과정에서 오버헤드가 발생하므로 성능이 떨어짐. 다만, 단순하게 읽어가는 조회연산에서는 StringBuffer, StringBuilder 보다 빠르게 읽을 수 있다. 2. StringBuffer와 StringBuilder 클래스는 mutable(변경가능)하다. 문자열에 변화가 발생하면, 문자열 크기를 비교하여 필요한 경우만, 새로운 메모리 공간을 할당(가변 배열..