문자열로 클래스를 만들기 위해서는 java.lang.Class.forName() 을 사용할 수 있다. 우선, Class.forName()의 정의는 이렇다. The java.lang.Class.forName(String name) method returns the Class object associated with the class or interface with the given string name. The java.lang.Class.forName(String name, boolean initialize, ClassLoader loader) method returns the Class object associated with the class or interface with the given stri..
Law of demeter는 최소 지식의 원칙이다. 여기서 말하는 지식은 "객체간의 얼마나 많은 정보를 가지고 있는 가"이다. 이런 지식을 최소한으로 가져야한다. 즉, Coupling 관계가 낮아야한다. 다음 코드는 최소 지식의 원칙에 어긋 나는 경우이다. public class A { private B b; public A() { b = new B(); } public B getB(){ return b; } } public class B { public void doSomething(){ System.out.println("작동을 한다."); } } A, B클래스가 있다. 호출하는 클래스에서 a 객체를 가지고 b의 객체 정보를 받아온다. 하지만, 받아오는 과정을 보면 호출하는 클래스에서 정보를 너무 많..
DIP(Dependency Inversion Principle)는 의존관계역전의 원칙이다. A라는 객체가 B라는 객체를 포함하고 있는 경우, B가 A객체를 호출해야 하는 일이 필요할 수 있다. 즉, 하이 레벨 모듈이 로우 레벨 모듈을 의존하는 구조, 추상이 상세를 의존하는 구조적 디자인, 이런 경우 의존관계연전 이라고 하게 된다. 이를 해결하기 위해서는 단순 컨크리트 클래스를 참조하기 보다는 참조하는 것을 추상화시켜서 참조하는 것이 좋다. 즉, 인터페이스에 의존해야한다. 이유는 자주 변경되는 컨크리트 클래스보다 추상클래스, 인터페이스가 의존을 느슨하게 하기 때문이다.
ISP( Interface Segregation Principle ) : 많은 클라이언트 고유의 인터페이스는 하나의 범용 인터페이스보다 우수하다. 즉, 거대한 클래스가 있다면, 그것을 쪼개라. 다음과 같은 코드가 있다. public interface Worker { public void work(); public void eat(); } public class Staff implements Worker { @Override public void work() { System.out.println("Staff가 일한다."); } @Override public void eat() { System.out.println("Staff가 먹는다."); } } 위 코드는 일하는 사람이라는 Worker인터페이스를 Sta..
LSP(Liskov Substitution Principle)원칙은 서브타입은 언제나 기반타입으로 교체할 수 있어야한다는 원칙이다. SOLID에서 가장 이해하기 힘든 원칙이었다. (지금도... ) public class Rectangle { protected double width; protected double height; public double getWidth() { return width; } public void setWidth(double width) { this.width = width; } public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } publ..
SRP(Single Responsibility Principle)는 단일 책임의 원리로써, 한 클래스는 오직 하나의 책임만을 가진다는 것이다. 클래스를 만들다보면, 클래스가 여러기능을 하는 경우가 많다. 이런경우는 객체지향적 관점에서 좋지 않다. 다음과 같은 코드가 있다. public class Student { private String penColor; private int penThick; public Student(String penColor, int penThick) { this.penColor = penColor; this.penThick = penThick; } public String getPenColor() { return penColor; } public void setPenColor(..
OCP(Open Closed Principle)는 확장에는 열려있되, 수정에는 닫혀있어야한다는 디자인 원칙이다. 게임 캐릭터에서 궁수라는 캐릭터를 예를들어 설명해보겠다. 아래 클래스는 아처(캐릭터) 클래스와 활(무기) 클래스이다. public class Archer { private Bow bow; private int level; public Archer(int level) { bow = new Bow(); this.level = level; } public void Attack(){ StringBuilder sb = new StringBuilder(); sb.append("Archer가 데미지 "); sb.append(getPower()); sb.append("을(를) 입혔습니다."); System...
자바에서 MySql을 사용하기 위해서는 Connector가 필요하다. 다음 링크에서 최신버전의 mysql Connector를 받고, 압축 해제 후 jar파일을 사용하고자하는 프로젝트에 추가해준다. LINK http://dev.mysql.com/downloads/connector/j/5.0.html#downloads jar파일을 추가한 다음에는 사용하는 프로젝트의 클래스에서 import java.sql.*; 를 추가해준다. public class DBManager { private Connection conn; private Statement stmt; private DBManager() { }; private static class SingleHolder { public static DBManager s..
OpenCV를 설치하기 위해서는 아래의 링크로 들어가서 다운로드 받는다.http://opencv.org/downloads.html 원하는 경로를 설정하고, Extract를 누르게 되면 다음과 같이 설치가 진행된다. 설치가 완료되면, 원하는 경로에 opencv폴더가 추가됨을 확인할 수 있다. 이제부터 opencv실행을 위한 환경설정과 Visual Studio의 간단한 세팅을 해야한다.환경 변수 설정을 위해서는 다음 경로로 이동한다.내 컴퓨터 - 시스템 속성 - 고급 시스템 설정 - 고급 - 환경변수 다음 창에서 2번째 블럭의 시스템 변수에서 Path를 수정해야한다. 자신이 설치한 경로에서 opencv - build - x86 - vc10 - bin 의 경로를 추가 해야한다. 내가 설치한 경로는 C:\ 이므..
자바를 사용할 때 문자열을 합하는 경우가 꽤 많다. 문자열을 합칠 때에는 StringBuilder와 StringBuffer의 append를 사용한 경우와 단순히 String에서 '+'를 사용한 경우의 시간을 비교해 보았다. public class test { public static void main(String[] args) { String a = new String(); StringBuilder sb = new StringBuilder(); StringBuffer sbf = new StringBuffer(); long start1 = System.nanoTime(); for (int i = 0; i < 10000; i++) { a += "abcde"; } long end1 = System.nanoTi..
- Total
- Today
- Yesterday