Java 프로그램 연산 속도 계산하기 연산속도를 계산하기 위해서는 System.currentTimeMillis()나 System.nanoTime()을 이용합니다. 두 메소드는 UTC라는 시간 표준 체계를 따라 현재시간을 리턴해줍니다. 그래서 연산 속도를 측정하기 위해서 시작시간의 현재시간, 종료시간의 현재시간의 차를 이용하면 연산속도가 얼마인지 계산 해 낼 수 있습니다. currentTimeMillis는 ms로리턴하고(1/1,000초) JDK 5버젼 이상부터는 사용가능한 nanoTime는 ns(1,000,000,000초)로 리턴하니 가능하면 더 정확한 nanoTime을 사용하는게 좋습니다. String vs StringBuffer 연산 속도 비교해보기 String String을 이용하여서 "abcde"라..
정규표현식 정규 표현식(Regular Expression)은 주어진 문자열 데이터에서 특정한 조건의 문자를 '검색'하는 과정을 처리 할 수 있도록 하는 규칙입니다. 정규표현식은 특정 언어에서만 사용되는 것이 아니라, 대부분의 언어에서 범용적으로 사용됩니다.예를들어 c[a-z]이라는 정규표현식은 알파벳 c로 시작하고 뒤에 알파벳 a부터 z까지의 문자 중 하나가 오는 문자를 검색합니다.ex) ca, cb, cc, cd ... cz 라는 문자는 찾습니다.ex) 하지만 c1 과 같이 다른 문자는 찾지 못합니다. 정규표현식을 작성하는 방법에 대해서는 관련된 도서나 인터넷상의 자료를 이용해서 공부해야 합니다.정규표현식을 정리해둔 사이트 http://zvon.org/comp/r/tut-Regexp.html#Pages..
메소드를 람다식으로 변경하는 방법에 대해서는 이전 포스팅을 참고 해주시기 바랍니다. ☞ 자바의 람다식(Lambda) - 1. 람다식으로 표현하기 람다식 사용하기 - 함수형 인터페이스 람다식으로 바뀐 메소드를 사용하기 위해서는 함수형 인터페이스를 선언해야 합니다. 인터페이스를 함수형 인터페이스로 선언하기 위해서는 '단 하나의 추상메소드'만이 선언 되어 있어야 합니다. interface MyInterface{ abstract int myMethod(int a); } 위와 같이 선언된 인터페이스를 함수형 인터페이스라고 합니다. (인터페이스명 위에 @FunctionalInterface라고 선언하면 '단 하나의 추상메소드가 있는지' 조건을 검사해줍니다.)추상메소드에서 유심히 봐야 할 것은, 인자의 갯수와 타입 그..
람다식(Lambda expression) 함수형 프로그래밍의 등장으로 많은 언어들이 함수형 프로그래밍으로 만들어 지고 있고, 자바는 객체지향언어 이지만 이러한 시대적 흐름의 맞추어 유연하게 변하기 위해서 람다식을 도입하게 되었습니다. 함수형 프로그래밍이라는 이름에서 알 수 있듯이 람다식은 함수(메소드)의 변형으로 만들어 집니다. 람다식을 사용하게 되면 메소드가 '식(expression)'으로 바뀌게 되고 마치 하나의 '변수(값)' 처럼 사용 할 수 있게 됩니다. 기존의 메소드를 람다식으로 바꾸기 //기존 메소드 int myMetohd (int a, int b){ return a > b ? a: b; }반환타입과 메서드이름을 제거합니다.매개변수의 선언부 괄호()와 몸통{} 사이에 ->를 추가합니다. //람..
클래스패스(classpath) 자바의 가상머신(JVM)이 컴파일된 클래스 파일(.class 확장자 파일)을 실행시킬 때, 클래스패스(classpath)에 설정된 경로에서 파일을 찾아봅니다. 그래서 자바파일을 (터미널 환경에서 직접) 컴파일 할 때는 아래와 같이 클래스패스 경로를 지정해주어야 합니다. $java -classpath ".:bin" Hello 옵션으로 클래스패스를 주지 않으면 현재 디렉토리에서만 클래스를 찾게 되지만, 만약 클래스들이 현재 디렉토리와 다른 경로에 존재한다면 위의 bin과 같이 명시해주어야 합니다. :(콜론)을 이용하여 경로를 구분합니다. (윈도우는 ; 세미콜론으로 구분합니다.) 위와 같이 설정하면 현재폴더와 bin 폴더 두 군데에서 찾아보게 됩니다.위의 예제와 같이 클래스패스가..
객체의 캡슐화 TV라는 객체를 생각해봅시다. 사용자는 전원을 키고, 채널과 음량을 조절 할 줄 안다면 TV를 문제 없이 사용할 수 있습니다. TV의 내부적인 모습이나 원리는 알 필요가 없습니다. 하지만 사용자가 TV 객체에 대한 충분한 이해 없이 중요한 부품들을 건들이게 된다면, TV는 개발자가 의도한 대로 혹은 사용자가 예상한대로 작동하지 않을 확률이 매우 높습니다. 이러한 이유로 사용자가 객체에 접근할 수 있는 영역을 제한하는 것을 객체의 캡슐화(encapsulation)라고 합니다. 캡슐화의 장점사용자가 불필요한 부분을 접근하지 못하게 하여, 객체의 오용을 방지 할 수 있습니다. (항상 개발자와 사용자가 다를 수 있음을 기억해야 합니다.)객체의 내부가 바뀌어도 그 객체의 사용방법이 바뀌지 않습니다...
JDBC(Java DataBase Connectivity) JDBC란 자바에서 데이터베이스를 다루기 위한 API 입니다. Spring을 이용하게되면 JDBC를 직접 다루는 일은 없으나, SpringJDBC, MyBatis, JPA 등등 데이터베이스와 관련한 API는 JDBC를 기본으로 하여 동작하게 됩니다. 예제는 직접적인 코드 설명을 주로 하고, MAVEN과 mariaDB를 이용해서 진행했습니다. 1) SQL에 맞는 의존성을 MAVEN에 넣는다. (참고로 DBMS 버젼과 maven에 주입할 client의 버젼은 다른 것입니다.) org.mariadb.jdbc mariadb-java-client 2.3.0 2) 리플렉션을 이용하여, SQL에 맞는 드라이버를 등록한다. Class.forName("org.m..
1. Entitiy간의 연관관계(방향)이란? 데이터베이스상에서는 관계를 맺어주기만 하면 자동으로 서로간의 양방향 참조가 가능합니다. 하지만 객체지향의 (Entity) 클래스간에는 '참조 방향'을 지정해주어야 하는데, 어떤 '방향성'을 고려해야하는지는 굉장히 중요합니다. (처음에는 Entity간의 양방향성을 남발했지만, 공부를 지속하면서 양방향성의 위험성을 알게 되었습니다.) 2. 단뱡향vs양방향 방향을 가져야 하는 경우는 어떤 경우인지 부터 보겠습니다. 먼저 객체지향적인 관점에서 생각해보면 A클래스와 B클래스가 연관관계일때, A클래스는 B클래스를 사용하게 되고 이런 경우에 방향성을 갖습니다. 반대로 B클래스가 A클래스를 사용하게 되면 역시 방향성을 갖습니다. 그러나 방향성을 남발하게 되면 성능상의 큰 문..