프로그래밍

    이펙티브 자바 규칙 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는 이 ..

    CSS 파일이 변경 후 적용이 안될 때

    CSS 파일이 변경 후 적용이 안될 때

    CSS 파일이 변경 후 적용이 안될 때 시간을 많이 잡아먹어서, 문제 해결 후 기록합니다. .col .col .col 현재 저는 그리드를 만들려 합니다. 이 그리드에 스타일을 주기 위해 링크를 한 CSS 파일을 선택자로 수정해 주었습니다. 일단 선택이 잘 되는지 확인해보기 위해 테두리도 넣어보고 색도 아무거나 넣어봤습니다. .row { border: solid #2B81AF thick; background-color: #710909; } 그런데 결과는? 변화가 없습니다. 설정이 잘못됐을까요? 그리드에 직접 스타일을 넣어봅시다. .col .col .col 넣고 확인해보면 잘 됩니다. 선택자 문제라 생각해서 이것저것 해보고, 안되서 검색해보니 CSS 파일 링크문제더군요. 이전에 사용한 CSS를 브라우저가 캐..

    이펙티브 자바 규칙 13 - 클래스와 멤버의 접근 권한은 최소화하라

    객체 지향의 모듈에서 중요한 특성을 뽑으라면 정보 은닉과 캡슐화가 있을 것입니다. 정보은닉은 모듈사이의 의존성을 낮추어 주어서 개별적으로 개발, 시험, 최적화한다는 특성에 목적을 두고 있습니다. 정보은닉과 캡슐화가 이루어진 모듈은 병렬적으로 개발할 수 있기 때문에 시스템 개발 속도가 올라가고다른 모듈에 영향을 끼칠 걱정 없이 디버깅이 가능합니다. 이 외에도 유지보수의 용이성, 소프트웨어의 재사용 용이 등 여러가지 장점을 누리기 위해 정보은닉을 할 필요가 있습니다. 정보은닉의 핵심적인 원칙은 각 클래스와 멤버는 가능한 한 접근이 불가능 하도록 만들어야 한다는 점입니다. 자바는 네개의 접근 권한을 제공합니다. private 클래스 내부에서만 접근이 가능합니다. package-private 같은 패키지 내에서..

    자바 Exception 예외 (throwable, Error, Exception, RuntimeException)

    자바 Exception 예외 (throwable, Error, Exception, RuntimeException)

    자바의 예외에는 위와 같은 종류로 나누어집니다 크게 Error와 Exception으로 나뉩니다. Error 에러는 시스템에 문제가 생겼을 때 발생합니다. 이는 프로그래머나 사용자가 수정할 수 없는 성격으로서 예로는 OutOfMemoryError, StackOverflowError 등이 있습니다. 이런 에러는 코드로 잡을 수 없는 상황이 많습니다. Exception 익셉션 클래스는 다시 RuntimeException(uncheck 예외)을 상속하는 Exception들과 그 외의 Exception(check 예외)으로 나뉩니다. 자바를 다루다 보면 자주 사용하는 코드들이 파일 인풋 아웃풋, DB 관련 코드일 텐데 이 부분을 구현하다보면 try, catch 로 묶거나 throw를 사용하여 에러를 던지는 경우를..

    이펙티브 자바 규칙 12 - Comparable 구현을 고려하라

    이펙티브 자바 규칙 12 - Comparable 구현을 고려하라

    Comparable은 Comparable 인터페이스에 포함된 유일한 메소드입니다. Object의 equals 메소드와 특성은 비슷하지만, 단순한 동치성 검사 이외에 순서 비교가 가능하며 좀 더 일반적입니다. 먼저 CompareTo의 규약을 살펴봅시다. 본 메소드는 이 객체와 인자로 주어진 객체를 비교한다. 이 객체의 값이 인자로 주어진 객체보다 작으면 음수를, 같으면 0을, 크면 양수를 반환한다. 인자로 전달된 객체의 자료형이 이 객체와 비교 불가능한 자료형인 경우에는 ClassCast Exception 예외를 던진다.아래의 명세에 등장하는 sgn(expression)은 수학에서의 signum 함수를 나타내는 것으로 -1, 0, 1 가운데 한 값을 반환한다. 어떤 값이 반환될지는 expression의 값..

    이펙티브 자바 규칙 10 - toString은 항상 재정의하자

    Java를 다루어 본 분들이라면 잘 알다시피 toString은 객체를 println printf, 문자열 연결 연산자, assert, 디버거 등의 메소드가 호출했을 때 객체의 정보를 표현하기 위해 자동으로 호출되는 메소드 입니다. 재정의 하지 않는다면 객체를 문자열 관련 메소드로 호출했을 때 PhoneNumber@163b91 과 같이 ' 클래스 이름 + @ + 16진수로 표현된 해시코드 '로 구성된 문자열이 리턴됩니다. 이 toString은 객체를 손쉽게 표현하기 위해 재정의해주는 게 좋습니다. toString의 일반규약에는 이런 구절도 있습니다. "모든 하위 클래스는 이 메소드를 재정의함이 바람직하다." 이펙티브 자바에서는 이 toString을 재정의 할 때 신경써야할 점을 꼽고 있습니다. 1. toS..

    디자인 패턴 - 전략 패턴(Strategy pattern) 예시 / 예제

    디자인 패턴 - 전략 패턴(Strategy pattern) 예시 / 예제

    전략 패턴이란 인터페이스를 두고 클래스와 클래스를 느슨하게 연결하여 재사용할 수 있는 코드를 극대화하는 다지안 패턴 중 하나입니다. 자바, C++ 등에서 활용됩니다. 일단 예제코드를 한번 보죠. 나름 모형도 한번 만들어 봤습니다. import java.io.File; import java.util.ArrayList; public class Client { public static void main(String[] args) { CompressionContext ctx = new CompressionContext(); //we could assume context is already set by preferences ctx.setCompressionStrategy(new ZipCompressionStrat..