Programming 10

[스크랩]디자인 패턴에 대하여

한때 소프트웨어 개발에서 모든 논의의 핵심은 디자인 패턴(Design Pattern)이었다. 개발자들은 밤을 세워가며 객체(Object), 응집도(Cohesion), 결합도(Coupling)에 대해 진지한 토론을 벌이기도 했다. 패턴이라고 하는 것은 일정한 형태나 양식 또는 유형을 의미한다. 소프트웨어를 설계할 때 패턴을 모르는 개발자는 자질(?)이 있는지 의심하는 정도의 분위기였다. 객체지향(Object-oriented)을 공부해야 하는 사람은 반드시 넘어야 할 산(山)이 디자인 패턴이었다. 그러나 어느 순간부터 개발현장에서 디자인 패턴을 논의하는 모습을 보기 어렵다. 디자인 패턴이 무엇인지 모르고 프로그래밍하는 개발자도 있다. 왜, 이런 현상이 발생하고 있을까? 국가에는 헌법이 있고, 기독교에는 성서..

[PHP]sanitize_key() 함수

sanitize_key() 함수는 아래와 같이 정의되어있다. function sanitize_key( $key ) { $raw_key = $key; $key = strtolower( $key ); $key = preg_replace( '/[^a-z0-9_\-]/', '', $key ); /** * Filters a sanitized key string. * * @since 3.0.0 * * @param string $key Sanitized key. * @param string $raw_key The key prior to sanitization. */ return apply_filters( 'sanitize_key', $key, $raw_key ); } 모든 문자를 소문자로 변경하고, 정규표현식을따라서..

[PHP]::(double colon, Paamayim Nekudotayim)과 ->(arrow)의 차이

::는 정적 context에 사용된다. 어떠한 메소드나 프로퍼티가 static으로 선언될때 사용되는데 아래 예제를 참고하자 class Math { public static function sin($angle) { return ...; } } $result = Math::sin(123); -> 는 반대로 동적 context에서 사용된다. 아래 예제를 참고하자. class Hello { public function say() { echo 'hello!'; } } $h = new Hello(); $h->say(); 나는 참고로 ->는 ~안에 있는 이라고 해석 하는데, A->B라면 A안에 있는 B라고 생각을 하면 조금더 쉽게 이해할 수 있는 것 같다. 배운지 얼마 되자 않은 지식이라 잘못된 부분이 있을 수있습니..

[PHP]객체 상속(extends)에 대하여

클래스를 만들면 서브클래스를 파생할수 있는데, 서브클래스를 사용하면 코드 재작성을 어느정도 막아준다. 이럴때 extends를 사용하여 상속을 한다. extends를 사용하면, 서브클래스에서 부모클래스의 속성을 사용할 수 있다. $instance = new CHILD; // CHILD 객체 생성 // name 속성에 SeungSAMI 대입 $instance->name = "SeungSAMI"; // password 속성에1234567890 대입 $instance->password = "1234567890"; // CHILD 객체의 display 함수 실행 $instance->display(); // Name : SeungSAMI Pass : 1234567890 출력 class A{ // A 객체 publi..

[PHP]정적(static)에 대하여

instance간에 서로 데이터를 공유해야 할 경우 이러한 데이터를 static 멤버라고 한다. static멤버에는 변수와 메소드가 존재 하는데 class::변수명 으로 접근을 한다 ::는 스코프 해결 연산자이다. 이 ::는 static과 같은 클래스의 재정의된 프로퍼티나 메소드에 접근할수 있도록 해주는 토큰이다. 정적 메소드의 호출은 마찬가지로 class::메소드명() 으로 접근한다. 정적메소드란 객체로부터가 아닌 클래스로부터 호출되는 메소드를 의미한다. 이 정적 메소드는 어떤 객체 속성에도 접근성을 갖지 않는다. class A { static function print_hello() { echo "Hello World!"; } } A::print_hello(); // A클래스의 static형 prin..

[PHP]include와 require의 차이

두 함수 모두 구문이 여러파일로 나누어진 코드를 불러오는 기능을 가지고 있다. 두 함수는 아무 에러 없이 실행을 마친다면 차이점이 존재하지 않지만, 에러가 발생하는 경우에는 처리하는 방법이 각각 다르다. 간단하게 두 함수를 구분하여 보자 require() 에러 상황시에 Fatal error를 발생시키고, 코드의 실행을 중지시킨다. 그러므로 예외상황 발생시 코드를 중단해야 하는 경우에서 사용되고, 특히 DB나 필수 로직을 점검해야하는 코드를 포함하고 있는 경우에 사용하자. include() 에러 상황시에 경고를 발생시키고, 나머지 코드의 실행을 진행한다. 그러므로 단순하게 화면 출력을 위한 공통적인 파일을 포함할때 사용해서 코드가 진행하는데 막힘이 없게 할때 사용하자. 추가로, 뒤에 once가 붙는 구문의..

[PHP]추상(abstract)에대하여

추상(abstract) 추상 메소드 : 추상 메소드란 메소드의 시그니처만이 정의된 비어있는 메소드를 의미 메소드의 시그니처만 정의 되어 있고 이 메소드의 구체적인 구현은 하위 클래스에서 오버라이딩 해야 한다는 의미다. 이렇게 내용이 비어있는 메소드를 추상 메소드라고 부른다. 추상 메소드를 하나라도 포함하고 있는 클래스는 추상 클래스가 되고, 자연스럽게 클래스의 이름 앞에 abstract가 붙는다. abstract class A{ public abstract function b(); } 위의 예제는 추상클래스의 선언과 추상메소드의 선언이다. public abstract function c(){echo "Hello wordl!"} 위의 예제의 경우 추상메소드가 시그니처만이 정의 된 것이 아닌 본체가 정의 되..

JVM와 JRE 그리고 JDK이란 무엇인가?

JVM와 JRE 그리고 JDK이란 무엇인가? JAVA를 막 배우기 시작한 사람이라면 많이 들어본 단어이다. 나도 JAVA를 시작한지 얼마 안된사람으로써 궁금증이 생겨 한번 정리를 해 보았다. JVM(Java Virtual Machine)자바 프로그램은 완전한 기계어가 아닌, 중간 단계의 바이트 코드이기 때문에 운영체제에서 바로실행이 불가하다. 그러므로 이것을 해석하고 실행할 수 있는 가상의 운영체제가 필요한데 이것이 JVM이다.또한 JVM은 운영체제에 종속적이기 때문에 운영체제에 맞는 JVM이 설치되어야한다. 바이트 코드 파일은 *.class 파일로, 소스파일(*.java)을 컴파일러로 컴파일하면 바이트코드 파일이 생성된다. JRE(Java Runtime Environment)프로그램 실행에 필요한 JV..

Programming/JAVA 2019.01.12

이클립스 단축키 모음

이클립스 자주 쓰는 단축키 —– 실행 —–Ctrl + F11 : 이전에 실행했던 클래스 실행 —– 소스 네비게이션 —–Ctrl + 마우스커서(혹은 F3) : 클래스나 메소드 혹은 멤버 상세 검색Alt + Left, Alt + Right : 이후, 이전Ctrl + O : 소스의 메소드 리스트 확인F4 : 클래스명을 선택하고 F4를 누르면 해당 클래스의 상속 계층 확인Alt + ) : 이전(다음) 작업 화면 —– 문자열 검색 —–Ctrl + K : 찾을 문자열을 블럭으로 지정하고 검색Ctrl + Shift + K : 밑에서 문자열 검색Ctrl + J : 입력하면서 검색Ctrl + Shift + J : 입력하면서 밑에서 검색Ctrl + F : 기본 검색 —– 소스 편집 —–Ctrl + Space : 입력 중에..

Programming/JAVA 2019.01.12