분류 전체보기

    ORA-00904 에러 부적절한 식별자

    ORA-00904 에러 부적절한 식별자

    Question: I am running a SQL statement and I get a SQL*Plus error ORA-00904 invalid identifier. 질문: 저 SQL 썻는데 ORA-00904 에러 떴어요. Answer: When ORA-00904 occurs, you must enter a valid column name as it is either missing or the one entered is invalid. The "invalid identifier" most common happens when you are referencing an invalid alias in a select statement. 답: ORA-00904 에러가 떳다면, 컬럼이 빠졌거나 이름이 잘못되있..

    Meven에서 자바(Java) SDK 최신버전 사용하기

    Meven에서 자바(Java) SDK 최신버전 사용하기

    Meven을 사용할 때는 IDE의 설정만으로 자바 버전이 적용이 안됩니다. 프로젝트 SDK에 1.8로 맞추어져있어도 정작 모듈에 들어가보면 5에 맞추어져 있죠. 이를 강제로 8로 바꾸어도 에러는 안뜹니다. IDE는 이를 감지하지 못하죠 다만 람다표현식과 같은 기능은 못쓰게 됩니다. 컴파일은 에러가 안나도 빌드할때 에러가 날거에요. 해결법은 pom.xml에 아래 내용을 붙어주시면 됩니다. org.apache.maven.plugins maven-compiler-plugin 1.8 1.8 붙이시고 다시 빌드해보세요 소스나 타겟은 본인의 버전에 맞추어서 합시다.

    이펙티브 자바 규칙 18 - 추상 클래스 대신 인터페이스를 사용하자

    이펙티브 자바 규칙 18 - 추상 클래스 대신 인터페이스를 사용하자

    자바에는 여러 구현을 허용하는 자료형을 만드는 방법이 두가지 있습니다. 추상형 클래스와 인터페이스입니다. 이 두가지의 차이점은 추상클래스는 구현된 메소드를 포함할 수 있지만, 인터페이스는 아니라는 점입니다... 는 점이었지만 자바 1.8부터 default 를 활용하여 언터페이스도 body를 가질 수 있게 되었습니다! public interface Test { public void existingMethod(); default public void newDefaultMethod() { System.out.println("New default method is added in interface"); } }덕분에 우리는 공부할 게 늘었습니다. 추상형 클래스는 구현하려면 상속(계승)을 써야합니다. 자바에서는 멀..

    예외 - Error creating bean with name 'sqlSessionFactory'

    예외 - Error creating bean with name 'sqlSessionFactory'

    "C:\Program Files\Apache Software Foundation\Tomcat 9.0\bin\catalina.bat" run[2018-02-17 03:30:25,265] Artifact MyProject:war exploded: Waiting for server connection to start artifact deployment...Using CATALINA_BASE: "C:\Users\PC\.IntelliJIdea2017.2\system\tomcat\Unnamed_MyProject"Using CATALINA_HOME: "C:\Program Files\Apache Software Foundation\Tomcat 9.0"Using CATALINA_TMPDIR: "C:\Program Fil..

    이펙티브 자바 규칙 17 - 계승을 위한 문서를 갖추거나, 그럴 수 없다면 금지하자

    이펙티브 자바 규칙 17 - 계승을 위한 문서를 갖추거나, 그럴 수 없다면 금지하자

    저번 포스트에서는 계승(상속)의 위험성을 설명하면서 구성의 디자인 패턴을 설명했습니다. 이번엔 EFJ에서는 상속의 위험성을 다루고 있습니다. 저번의 포스트에서 본 바와 같이 상속은 캡슐화를 깨뜨릴 수 있는 위험을 내포하고 있는 기능입니다. 때문에 오버라이드 등을 사용할 때 주의가 필요합니다. 1. 메소드를 재정의 할 때는 무슨 일이 발생하는지 정확하게 문서로 남겨야 한다. /** * {@inheritDoc} * * This implementation iterates over the collection looking for the * specified element. If it finds the element, it removes the element * from the collection using th..

    이펙티브 자바 규칙 16 - 계승하는 대신 구성하라

    이펙티브 자바 규칙 16 - 계승하는 대신 구성하라

    자바를 하는 사람은 상속(계승)을 모를 수가 없죠. 코드의 재사용을 돕는 강력한 도구입니다. 하지만 상속을 적절하게 사용하지 못한 소프트웨어는 깨지기 쉬운데요. 그래서 상속에는 그에 걸맞는 문서가 있는 것이 안전합니다. 이펙티브 자바에서는 먼저 상속의 단점을 나열하고 있습니다. 먼저 메소드와 달리 상속은 캡슐화 원칙을 위반합니다. 상위 클래스를 상속한 하위클래스는 상위클래스에 의존적입니다. 상위 클래스가 수정되면, 하위 클래스의 코드도 필연적으로 수정되어야 하죠. 캡슐화의 조건을 깨뜨리고 있습니다. 예제 코드로 한번 살펴봅시다. package dao; import java.util.Collection; import java.util.HashSet; public class InstrumentedHashSe..

    이펙티브 자바 규칙 15 - 변경 가능성을 최소화하라

    자바의 클래스는 변경가능한 클래스와 변경 불가능한 클래스로 나눌 수 있습니다. final 선언자가 큰 역할을 하죠. EFJ15에서는 이 변경 불가능한(immutable) 클래스의 이점에 대해 설명하면서, 특별한 이유가 없을 때에는 되도록 변경이 불가능 하도록 설정하라고 권하고 있습니다. 먼저 변경 불가능한 클래스를 만들 때 지켜야할 5규칙입니다. 1. 객체 상태를 변경하는 메소드(Setter 등)를 제공하지 않는다. 2. 계승할 수 없도록 한다.(상속 불가)하위 클래스로 인해 변경될 가능성을 차단합니다. 3. 모든 필드를 final로 선언한다.시스템상으로 강제해 의도를 분명히 합니다. 4. 모든 필드를 private로 선언한다.클라이언트가 객체를 직접 수정하는 일을 막습니다. 5. 변경 컴포넌트에 대한 ..

    디자인 패턴 - 프록시 패턴(Proxy pattern)

    디자인 패턴 - 프록시 패턴(Proxy pattern)

    프록시는 클라이언트나 대상 사이의 대리 또는 접근 방법의 제어를 말하는 오브젝트를 일컫을 때 사용하는 단어입니다. 디자인 패턴 중 프록시 패턴이 있습니다. 디자인 패턴의 프록시는 타켓의 기능을 추가하지 않습니다. Spring을 다루어 보신 분이라면 AOP, intercepter, filter 등을 사용해보셨을 텐데요. 이 기능들의 공통점은 오브젝트에 접근할 때 먼저 처리해야할 점 또는 나중에 처리해야할 점의 설정을 도와준다는 점이죠,타켓에 접근하는 방식을 변경해주는 역할을 합니다. 프록시 패턴이 이와 비슷합니다. 프록시 패턴을 이해하기 위해서는 먼저 리플렉션에 대한 이해가 필요합니다. 리플렉션이란, 오브젝트에 대한 구체적인 클래스 정보 없이도 그 오브젝트가 가진 변수, 메소드 등에 접근할 수 있게 하는 ..

    디자인 패턴 - 데코레이터 패턴(Decorator Pattern)

    디자인 패턴 - 데코레이터 패턴(Decorator Pattern)

    데코레이터 패턴은 목표 객체의 부가적인 속성을 동적으로 표현해주기 위해 사용하는 디자인 패턴입니다. 동적으로 연결된다는 의미는 기능을 부가할 때, 어떤 방법과 순서에 따라서 연결되지 않는다는 것을 의미합니다. 자동차를 만들 때를 한번 생각해보죠. 자동차가 있으면, 네비게이션 달고, 스킨 튜닝하고, 썬루프 달고 하는 걸 순서대로 하지는 않겠죠? 사용자의 요구에 맞추어서 해주겠죠. 코드를 한번 봅시다. public interface Car { public void assemble(); }public class BasicCar implements Car { @Override public void assemble() { System.out.print("Basic Car."); } }public class Car..

    JDBC 트랜잭션과 트랜잭션 추상화 (Transaction, Abstraction of Transaction)

    JDBC 트랜잭션과 트랜잭션 추상화 (Transaction, Abstraction of Transaction)

    자바에서 JDBC 데이터베이스 접근을 할 때는 자동적으로 트랜잭션이 적용됩니다. DB는 그 자체로 완벽한 트랜잭션을 제공해서, 다중 데이터의 수정이나 삭제 등을 요청했을 때 중간에 어떠한 오류나 외부 상황에 의해 작업이 종료되더라도 일부만 삭제되거나 하는 일은 없습니다. 이러한 일관성은 DB의 신뢰로 이어지죠. JDBC로 데이터베이스를 이용할 때 트랜잭션이 나눠지는 경계의 조건은 두가지입니다. 확정 작업의 커밋과 본래의 상태로 돌리는 롤백이죠. 하나의 쿼리 작업(업데이트, 삭제 등)이 끝나면 트랜잭션이 종료 됨과 동시에 새로운 트랜잭션 작업의 실행에 들어갑니다. 트랜잭션을 설명할 때 가장 많이 사용하는 예인 은행 계좌 송금을 예로 들어볼까요 트랜잭션을 통한 한 단위로 묶인 것이 아니라면, JDBC는 이 ..