인터페이스 상수인터페이스 상수 ?인터페이스 상수는 Anti-PatternReferences인터페이스 상수 ?인터페이스 내에 선언된 변수는 무조건 public static final 로 선언 된다. class A { public static final int MON = 1; public static final int TUE = 2; public static final int WED = 3; }클래스 내의 상수 interface A { int MON = 1, TUE = 2, WED = 3; }인터페이스 내의 상수[ 출처 ] : https://codedragon.tistory.com/2526따라서 위의 두 코드는 완전히 동일한 의미이다.인페이스 상수는 Anti-Pattern처음 인터페이스 상수에 대해 검색을 ..
JNI (Java Native Interface)JNI ?Why JNI ?장/단점ReferencesJNI ?자바코드가 자바 VM 에서 동작할 때, 네이티브 언어로 작성된 코드를 자바에서 사용하거나, 네이티브 언어에서 자바의 클래스와 메소드를 사용할 수 있게 해주는 프로그래밍 인터페이스이다.네이티브원시 코드라는 의미로 C/C++ 또는 어셈블리어 이다.쉽게 말해 Java 와 다른 언어를 연동하는 솔루션이다.Java Side 는 SDK 로 개발할 어플리케이션 계층이며, C Side 는 NDK 를 이용하여 컴파일 할 라이브러리 계층이라고 보면된다.OpenCV 나 OpenGL 등의 라이브러리 등을 사용할 때 주로 사용된다.OpenCVComputer Vision Library, 영상처리 라이브러리이다. 컴퓨터가 알..
선언형 / 명령형 프로그래밍선언형 프로그래밍명령형 프로그래밍선언형? 명령형?선언형 프로그래밍선언형 프로그래밍은 아래 두 가지 뜻으로 통용되고 있다고 한다.프로그램이 어떤 방법으로 해야 하는지를 나타내기보다 무엇과 같은지를 설명하는 경우에 '선언형' 이라고 한다. 웹 페이지는 선언형인데, 웹 페이지의 제목, 글꼴, 본문, 그림과 같이 '무엇' 이 나타나야 하는지를 묘사하는 것이지 '어떤 방법으로' 컴퓨터 화면에 페이지를 나타내야 하는지를 묘사하는 것이 아니다.프로그램이 함수형 프로그래밍 언어, 논리형 프로그래밍 언어, 혹은 제한형 프로그래밍 언어로 쓰인 경우에 '선언형' 이라고 한다.이 정의에서는 명령형 언어와 대비되는 프로그래밍 언어들을 선언형으로 통칭하는 것이다.선언형 프로그래밍 언어 : Lisp, H..
App is not indexable by Google Search 위 처럼 단순히 AndroidManifest.xml 의 intent-filter 에 ACTION_VIEW 만 추가해주면 해당 경고가 사라지지만,경고의 내용이 궁금하여 구글링 해보았다.이 경고는 앱에 딥 링크를 구성하기 위한 것이며, 사용자가 모바일 검색에서 웹/앱과 일치하는 특정 키워드를 검색하는 경우 앱 내에서 특정 Activity/View 를 열 수 있는 intent 와 직접 연결할 수 있다고 한다.딥 링크'특정 페이지에 도달할 수 있는 링크' 를 뜻한다.예로 웹 URL(http://blog.airbridge.io/deeplinkga-mweojyo/) 처럼, 모바일 어플리케이션에도 특정 페이지에 들어갈 수 있는 링크가 있다.모바일로 ..
개방-폐쇄 원칙 (Open-Closed Principle, OCP)개방-폐쇄 원칙 ?개방-폐쇄 원칙 예제References 개방-폐쇄 원칙 ?소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다.위키백과에 간단명료하게 정리되어있어 인용을 하자면,확장에 대해 열려 있다.이것은 모듈의 동작을 확장할 수 있다는 것을 의미한다. 애플리케이션의 요구 사항이 변경될 때, 이 변경에 맞게 새로운 동작을 추가해 모듈을 확장할 수 있다.수정에 대해 닫혀 있다.모듈의 소스 코드나 바이너리 코드를 수정하지 않아도 모듈의 기능을 확장하거나 변경할 수 있다.개인적으로 확장과 수정을 따로 생각하지 않는 것이 이해가 잘 되었다.확장성을 고려하여 설계함으로써 수정사항이 발생..
단일 책임 원칙 (Single Responsibility Principle, SRP)단일 책임 원칙 ?References 단일 책임 원칙 ?클래스를 변경하는 이유는 단 한 가지여야 한다.위키 백과에 따르면 단일 책임 원칙이란,모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다. 예를 들어 보고서를 편집하고 출력하는 모듈이 있다고 가정한다. 이 모듈은 보고서의 내용, 형식의 변경을 이유로 모듈이 변경될 두 가지의 사유를 가질 수 있다. 허나 단일 책임 원칙에 의하면, 두 측면이 실제론 분리된 두 책임 때문이기에 분리된 클래스나 모듈로 나누어야 하고 다른 시기에 다른 이유로 변경되어야 하는 두 가지를 묶는 것은 나쁜 설계일 수 있다고 한다.쉽게 말하면, 하나의 클래스는 ..
객체 지향 설계 (SOLID)객체 지향 설계 ?References 객체 지향 설계200년대 초반, 로버트 C. 마틴이 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을로버트 C. 마틴 '클린 코드', '클린 코더' 의 저자로 여기서 설명한 SOLID 원칙을 명명했다고 한다.이 원칙들은 '클린 코드' 를 기반으로 설명하고 있으니, 원한다면 책을 통해 깊이 공부하는 것이 좋을 것 같다.마이클 페더스가 각 원칙의 앞 머리를 따서 묶은 후 소개한 것이다.SOLID 원칙들은 자기 자신 클래스 안에 응집도는 내부적으로 높이고, 타 클래스들간 결합도를 낮추는 High Cohesion - Loose Coupling(높은 응집도 - 느슨한 결합도) 원칙을 객체 지향의 관점에서 도입한 것이다.좋은 소프트웨어는..
리스코프 치환 원칙(Liskov substitution principle, LSP)Effective Java 를 보다가 접했는데, 검색해보니 객체지향 5대 원칙(SOLID) 중 하나라고 한다.이것도 나중에 정리하기 위해 참고 링크를 걸어두어야 겠다.모든 개발자가 알아야만 하는 SOLID 원칙리스코프 치환 원칙 ?리스코프 치환 원칙 예제References리스코프 치환 원칙 ?상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.리스코프 치환 원칙은 기능의 명세(계약)에 대한 내용이다.기능 실행의 계약과 관련해서 흔히 발생하는 위반 사례는 다음과 같다.명시된 명세에서 벗어난 값을 리턴한다.명시된 명세에서 벗어난 예외를 발생시킨다.명시된 명세에서 벗어난 기능..
팩토리 메소드 패턴 (Factory Method Pattern)팩토리 메소드 패턴 ?예제References팩토리 메소드 패턴 ?객체를 만들어내는 부분을 서브 클래스에 위임하는 패턴팩토리 패턴에서 핵심은 클래스의 인스턴스를 만드는 것을 서브클래스에서 결정하도록 하여객체 생성을 캡슐화하고 구상 클래스에 대한 의존성을 줄이는 것에 있다.이러한 디자인 원칙이, 구상 클래스에 대한 의존성이 줄어드는 것, 의존성 뒤집기 원칙(Dependency Inversion Principle)*이다.의존성 뒤집기 원칙(Dependency Inversion Principle)고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 되고, 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다는 원칙이다.[참고] : 의존 역전 ..
ProguardProguard ?사용법ReferencesProguard ?ProGuard is a free Java class file shrinker, optimizer, obfuscator, and preverifier. It detects and removes unused classes, fields, methods, and attributes. It optimizes bytecode and removes unused instructions. It renames the remaining classes, fields, and methods using short meaningless names. Finally, it preverifies the processed code for Java 6 or hig..