일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- semanage
- c3 축 가리기
- 백준
- c3 초
- regex_search
- CentOS7
- gcc regex
- grafana dashboard
- python popen
- 1697
- subporcess path
- c3 축 없애기
- c3 step graph
- telegraf
- centos pyhon 설치
- 정규식 컴파일
- python os
- c++ 정규식
- snmp
- python subprocess
- snmp test
- 정규식 문자열 출력
- g++ 업데이트
- influxdb 설치
- InfluxDB
- selinux port 등록
- 정규식 활용
- linux시간으로 변경
- c3 second
- gcc 업데이트
- Today
- Total
목록Java(폐지) (52)
리셋 되지 말자
"클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 된다." - 로버트 C. 마틴 인터페이스 분리 원칙은 큰 덩어리의 인터페이스들을 구체적이고 작은 단위들로 분리시킴으로써 클라이언트들이 꼭 필요한 메서드들만 이용할 수 있게 한다. - 위키백과 예시(책의 예시가 이해가 안가서 다른 사이트를 많이 찾아보고 혼자 생각해냄) Action 인터페이스 package isp01; public interface Action { public abstract void buy(); public abstract void sell(); }위와같은 인터페이스가 존재할 때, 구매자와 판매자를 구현한다고 가정한다. Guest(구매자) package isp01; public class Guest implements A..
LSP-개방 폐쇄 원칙 "서브 타입은 언제나 자신의 기반 타입(base type)으로 교체할 수 있어야 한다." - 로버트 C. 마틴 객체 지향에서의 상속은 계층도가 아닌 분류도가 돼야 한다. 따라서 객체 지향의 상속은 아래의 조건을 만족해야 한다. 하위 클래스 is a kind of 상위 클래스 : 하위 분류는 상위 분류의 한 종류이다. 구현 클래스 is able to 인터페이스 : 구현 분류는 인터페이스할 수 있어야 한다. 계층도 형태의 클래스 아버지를 상위 클래스(base type)으로 하는 딸 이라는 하위 클래스(sub type)가 있다고 가정한다. 전형적인 계층도 형태이며, 객체 지향의 상속을 잘못 적용한 예다. 아버지 춘향이 = new 딸(); 춘향이가 아버지의 역할도 해야한다. -> 이상하다..
OCP-개방 폐쇄 원칙 "소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 한다." - 로버트 C. 마틴 역시 잘 모르겠다. 이를 의역하면 아래와 같다. "자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다." 모르겠다. 코드적으로 해석해보자면 "기존의 코드를 수정하지 않고, 추가적인 기능을 추가할 수 있어야 한다." 예시1 - JDBC JDBC를 사용하는 사용자는 데이터베이스가 MySQL에서 Oracle로 바뀌더라도 Connection(연결)을 설정하는 부분 외에는 따로 수정할 필요가 없다. Connection 설정 부분을 별도의 설정 파일로 분리해두면 클라이언트 코드는 단 한줄도 변경할 필요가 없다. JDBC뿐만 아니라 i..
SRP-단일 책임 원칙 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다" - 로버트 C. 마틴 잘 모르겠다. 예시를 들어보자.아래와 같이 남자라고 하는 클래스와 남자 클래스에 의존하는 다양한 클래스가 있다고 한다. 남자가 역할이 너무 많다. 만약 남자가 여자친구와 헤어졌다고 하면, 기념일 챙기기, 키스하기는 더이상 필요가 없게 된다. 이러한 경우에 역할(책임)을 분리하라는 것이 '단일 책임 원칙' 이다. 위의 예에서는 클래스에 단일 책임 원칙을 적용했지만 단일 책임 원칙은 속성, 메서드, 패키지, 모듈, 컴포넌트, 프레임워크 등에도 적용될 수 있는 개념이다. 예제1 - 속성이 단일 책임 원칙을 지키지 못하는 경우 객체 지향 세계에서 남자는 군대에 가고, 여자는 절대 군대에 가지 ..
SOLID 객체지향의 4대 특성 캡슐화 상속 추상화 다형성 SOLID SRP(Single Responsibility Principle):단일 책임 원칙 OCP(Open Closed Principle):개방 폐쇄 원칙 LSP(Liskov Substitution Principle):리스코프 치환 원칙 ISP(Interface Segregation Principle):인터페이스 분리 원칙 DIP(Dependency Inversion Principle):의존 역전 원칙 위의 5가지 원칙은 응집도는 높이고 결합도는 낮추라는 고전 원칙을 객체 지향의 관점에서 재정립한 것이라고 할 수 있다. http://toby.epril.com/?p=727 참고 결합도: 모듈(클래스) 간의 상호 의존 정도로서 결합도가 낮으면 모듈..
소스 코드 분명 펭귄 클래스를 인스턴스화 하여 객체참조변수인 뽀로로로 test() 메서드를 실행했는데 디버그의 스택 정보를 보면 실행이 '펭귄.test()'로 되어있는것을 확인할 수 있다. JVM의 정적화 만약 펭귄 배열 100칸을 만든다고 하면 힙 메모리 영역에 똑같은 test()메서드를 100개 만드는 것은 메모리 낭비라고 할 수 있다. 그래서 JVM은 지능적으로 객체 멤버 메서드 test()를 스태틱 영역에 단 하나만 보유한다. 그리고 눈에 보이지 않지만 test() 메서드를 호출할 때 객체 자신을 나타내는 this 객체 참조 변수를 넘긴다. 즉, 위의 코드는 JVM에 의하여 아래의 코드로 변경된다고 생각하면 된다. package stack01; class 펭귄 { static void test(펭..
super 키워드 this는 객체 멤버 메서드 내부에서 객체 자신을 지칭하는 키워드이다. super는 바로 위 상위 클래스의 인스턴스를 지칭하는 키워드이다. 예제 package super01; class 동물{ void method() { System.out.println("동물"); } } class 조류 extends 동물 { void method() { super.method(); System.out.println("조류"); } } class 펭귄 extends 조류 { void method() { super.method(); System.out.println("펭귄"); } } public class Driver { public static void main(String[] args) { 펭귄 ..
this 키워드 this는 객체가 자기 자신을 지칭할 때 쓰는 키워드다. 예제 코드 package this01; class 펭귄 { int var = 10; void test() { int var = 20; System.out.println(var); System.out.println(this.var); } } public class Driver { public static void main(String[] args) { 펭귄 뽀로로 = new 펭귄(); 뽀로로.test(); } } 결과 20 10 var 변수는 main() 스택 프레임의 지역 변수(20)가 존재하고, 뽀로로 객체 멤버 변수(10)도 존재한다. 이 때, var을 출력하게되면 우선순위가 지역변수인 var에 있어서 20이 출력된다. 이때 지..