람다식(Lambda expression) 함수형 프로그래밍의 등장으로 많은 언어들이 함수형 프로그래밍으로 만들어 지고 있고, 자바는 객체지향언어 이지만 이러한 시대적 흐름의 맞추어 유연하게 변하기 위해서 람다식을 도입하게 되었습니다. 함수형 프로그래밍이라는 이름에서 알 수 있듯이 람다식은 함수(메소드)의 변형으로 만들어 집니다. 람다식을 사용하게 되면 메소드가 '식(expression)'으로 바뀌게 되고 마치 하나의 '변수(값)' 처럼 사용 할 수 있게 됩니다. 기존의 메소드를 람다식으로 바꾸기 //기존 메소드 int myMetohd (int a, int b){ return a > b ? a: b; }반환타입과 메서드이름을 제거합니다.매개변수의 선언부 괄호()와 몸통{} 사이에 ->를 추가합니다. //람..
부모클래스(Entity) 설정 @Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name = "dtype") public abstract class Parent { . . . }부모 Entity클래스 애노테이션 2가지를 추가합니다.@Inheritance(strategy = InheritanceType.JOINED) : 상속 관계를 맺고 있음을 명시해줍니다. 상속관계에 대한 설정은 JOINED전략, SINGLE_TABLE 전략, TABLE_PER_CLASS 전략 3가지가 있습니다. 각 전략마다 장단점이 있고 설정방법이 상이합니다. 여기서는 주로 쓰인다고 하는 조인전략으로 설명하도록 하겠습니다. 조인 전략을 사용하게 되면..
추상화(Abstraction) 객체 설계를 위해 추상화 작업은 중요한 것은 남기고, 불필요한 것은 제거하는 일입니다. (비즈니스 적으로 추상화가 잘 된 객체는 오히려 재사용성이 떨어지게 됩니다.) 추상? 개념은 쉽게 이해가 되나 용어의 혼선이 오는 초보개발자가 있을 겁니다. (물론 제가 그랬다는 겁니다. 그리고 저와 같은 고통을 받고 있던 친구들도 포함이죠.) 이러한 분들이 생각하는 추상은 '구체적'의 반댓말로 모호한(?)것이라는 개념으로 이해하고 있기 때문입니다. 실제 추상에 대한 사전적 정의는 아래와 같습니다.추상(抽象) : 여러 가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용. 사전적 의미를 생각하면서 객체의 추상화를 진행해봅시다. 앞서 예제로 설명한 '강아지, 사자, ..
클래스패스(classpath) 자바의 가상머신(JVM)이 컴파일된 클래스 파일(.class 확장자 파일)을 실행시킬 때, 클래스패스(classpath)에 설정된 경로에서 파일을 찾아봅니다. 그래서 자바파일을 (터미널 환경에서 직접) 컴파일 할 때는 아래와 같이 클래스패스 경로를 지정해주어야 합니다. $java -classpath ".:bin" Hello 옵션으로 클래스패스를 주지 않으면 현재 디렉토리에서만 클래스를 찾게 되지만, 만약 클래스들이 현재 디렉토리와 다른 경로에 존재한다면 위의 bin과 같이 명시해주어야 합니다. :(콜론)을 이용하여 경로를 구분합니다. (윈도우는 ; 세미콜론으로 구분합니다.) 위와 같이 설정하면 현재폴더와 bin 폴더 두 군데에서 찾아보게 됩니다.위의 예제와 같이 클래스패스가..
객체의 캡슐화 TV라는 객체를 생각해봅시다. 사용자는 전원을 키고, 채널과 음량을 조절 할 줄 안다면 TV를 문제 없이 사용할 수 있습니다. TV의 내부적인 모습이나 원리는 알 필요가 없습니다. 하지만 사용자가 TV 객체에 대한 충분한 이해 없이 중요한 부품들을 건들이게 된다면, TV는 개발자가 의도한 대로 혹은 사용자가 예상한대로 작동하지 않을 확률이 매우 높습니다. 이러한 이유로 사용자가 객체에 접근할 수 있는 영역을 제한하는 것을 객체의 캡슐화(encapsulation)라고 합니다. 캡슐화의 장점사용자가 불필요한 부분을 접근하지 못하게 하여, 객체의 오용을 방지 할 수 있습니다. (항상 개발자와 사용자가 다를 수 있음을 기억해야 합니다.)객체의 내부가 바뀌어도 그 객체의 사용방법이 바뀌지 않습니다...
Spring Security (스프링 시큐리티) 스프링 시큐리티를 이용하면 개발시에 필요한 사용자의 인증, 권한, 보안 처리를 간단하지만 강력하게 구현 할 수 있습니다. 일반적인 웹 환경에서 브라우저가 서버에게 요청을 보내게 되면, DispatcherServlet(FrontController)가 요청을 받기 이전에 많은 ServletFilter(서블릿 필터)거치게 됩니다. Spring Security도 서블릿 필터로써 작동하여 인증, 권한과 관련한 처리를 진행하게 됩니다. (본래 서블릿필터는 WAS(Web Application Server)에서 담당하는데 스프링은 이 서블릿필터들을 직접 관리하기 위해서 DelegatingFilterProxy를 web.xml에 설정하여서, 스프링에서 설정된 서블릿 필터 빈..
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..