분류 전체보기
이펙티브 자바 규칙 13 - 클래스와 멤버의 접근 권한은 최소화하라
객체 지향의 모듈에서 중요한 특성을 뽑으라면 정보 은닉과 캡슐화가 있을 것입니다. 정보은닉은 모듈사이의 의존성을 낮추어 주어서 개별적으로 개발, 시험, 최적화한다는 특성에 목적을 두고 있습니다. 정보은닉과 캡슐화가 이루어진 모듈은 병렬적으로 개발할 수 있기 때문에 시스템 개발 속도가 올라가고다른 모듈에 영향을 끼칠 걱정 없이 디버깅이 가능합니다. 이 외에도 유지보수의 용이성, 소프트웨어의 재사용 용이 등 여러가지 장점을 누리기 위해 정보은닉을 할 필요가 있습니다. 정보은닉의 핵심적인 원칙은 각 클래스와 멤버는 가능한 한 접근이 불가능 하도록 만들어야 한다는 점입니다. 자바는 네개의 접근 권한을 제공합니다. private 클래스 내부에서만 접근이 가능합니다. package-private 같은 패키지 내에서..
리눅스 - CentOs, Oracle 설치 및 데이터베이스 생성
이 페이지에서는 오라클을 설치해보고 데이터베이스를 생성해보겠습니다. 먼저 제 가상머신은 현재 오라클을 설치할 수 있을만큼 공간이 크지 않기 때문에 임시적으로 2G를 늘려 사용할 것입니다. 공간이 충분하신 분들은 패스해주세요 dd if=/dev/zero of=/swapfile bs=1024 count=4194304 를 입력해줍시다. mkswap /swapfile 로 swap swapon /swapfile 순서대로 따라합시다. swapon -s 에서 swapfile이 보이면 성공입니다. cd /etc/rc.d 로 이동한뒤 chmod 755 rc.local 로 권한을 수정해줍시다 그리고 vi rc.local 로 편집을 해줘야 합니다. swapon /swapfile 을 적어두면 재부팅 되더라도 사라지지 않고, ..
자바 Exception 예외 (throwable, Error, Exception, RuntimeException)
자바의 예외에는 위와 같은 종류로 나누어집니다 크게 Error와 Exception으로 나뉩니다. Error 에러는 시스템에 문제가 생겼을 때 발생합니다. 이는 프로그래머나 사용자가 수정할 수 없는 성격으로서 예로는 OutOfMemoryError, StackOverflowError 등이 있습니다. 이런 에러는 코드로 잡을 수 없는 상황이 많습니다. Exception 익셉션 클래스는 다시 RuntimeException(uncheck 예외)을 상속하는 Exception들과 그 외의 Exception(check 예외)으로 나뉩니다. 자바를 다루다 보면 자주 사용하는 코드들이 파일 인풋 아웃풋, DB 관련 코드일 텐데 이 부분을 구현하다보면 try, catch 로 묶거나 throw를 사용하여 에러를 던지는 경우를..
이펙티브 자바 규칙 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) 예시 / 예제
전략 패턴이란 인터페이스를 두고 클래스와 클래스를 느슨하게 연결하여 재사용할 수 있는 코드를 극대화하는 다지안 패턴 중 하나입니다. 자바, 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..
이펙티브 자바 규칙 9 - equal 메소드를 재정의 할 때 hashCode()도 재정의 하자
Object 클래스의 명세를 보면 hashCode의 일반 규약은 아래와 같습니다. 어플리케이션 실행 중 같은 객체의 hashCode를 여러 번 호출하는 경우, equals가 사용하는 정보들이 변경되지 않았다면, 언제나 동일한 정수가 반환되어야한다. 다만 프로그램이 종료되었다가 다시 실행되어도 같은 값이 나올 필요는 없다.equals(Object) 메소드가 같다고 판정한 두 객체의 hashCode 값은 같아야 한다.equals(Object) 메소드가 다르다고 판정한 두 객체의 hashCode 값은 꼭 다를 필요는 없다. 그러나 서로 다른 hashCode 값이 나오면 해시 테이블의 성능이 향상될 수 있다는 점은 이해하고 있어야 한다. 저번 포스트에서 equals 메소드를 재수정 했습니다. 내부의 중요 필드를..
스프링 프레임워크 - Junit Test
개발 상황에서 테스트의 중요성을 부인할 사람은 없을 것이라 생각합니다. 그것도 처음부터 자잘하게 꾸준히 테스트하는 게 나중에 생각해보면 시간을 많이 절약해주죠. 이 포스트에서는 간단하게 Junit에 대해 다룹니다. Junit은 클래스의 제어권한을 넘겨받아 어플리케이션의 흐름을 제어하는 프레임워크입니다. 테스트에서 Junit 프레임워크가 요구하는 조건은 두가지입니다. 메소드가 public이로 사용되어야하고, @Test 라는 어노테이션이 붙어야합니다. Junit은 어노테이션을 적극적으로 활용하죠. 1번의 @Runwith은 Junit의 기능을 확장해서 스프링과 관련된 기능을 사용하게끔 해주는 어노테이션입니다.모든 클래스는 클래스의 작업을 실행해주는 main 클래스가 있습니다. Junit의 경우 그 main 클..
이펙티브 자바 규칙 8 - equals 재정의 / 오버라이드 방법
참조 객체를 다룰 때 가장 많이 사용되는 메소드중 하나가 equals 메소드일 것입니다. 이 메소드는 객체간의 관계를 다루는만큼 재정의 시 주의를 요합니다. 이펙티브 자바 규칙 8 에서는 이 메소드를 정의할 때의 규약을 다루가 있습니다. 먼저 equals 메소드를 재정의 하지 않아도 되는 경우는 1. 각각의 개체가 고유한 값을 가질 때 기본형 값(value)로 이루어진 변수 대신 활성개체(active entity)를 나타내는 스레드로 이루어진 클래스는 단순한 실행단위이기 때문에 . 이런 클래스는 Object의 equals 메소드를 그대로 사용해도 됩니다. 2. 클래스에서 논리적 동일성 검사를 요구하지 않는다. 예로 java.util.Random 클래스가 있다. 이 클래스에서 equals 는 랜덤 객체가 ..
이펙티브 자바 규칙 7 - 종료자 사용을 피하라
저번 포스팅에서도 다루었지만 C,C++과 JAVA의 많은 차이 중 두드러지는 것 하나가 쓰레기 수집가(GC)입니다. C,C++ 에서는 잘 다루면 어마어마한 효율을 보여주지만, 못다루면 주된 버그의 원인이 되는주소값 관리를 자바에서는 GC 알고리즘을 통해 다루어 줍니다. 과거에는 자바의 쓰레기 수집가 알고리즘이 지금만큼 뛰어나지 못해문제가 된 적이 있지만, 지금은 많이 향상되었다고 합니다. public static void main(String[] args){ System.runFinalization(); System.gc(); }자바에서 GC를 호출하는 방법입니다. GC는 JVM마다 호출되는 시점이 다르고, 메모리의 여유상황에 영향을 받기 때문에제어하기 힘든데, 이 명령어를 쓰면 호출을 간접적으로 요청할..