Posts by Tag

Effective java

[Effective Java] 7. finalize 를 사용하지 말것

1 분 소요

C++의 경우 생성자와 소멸자를 쌍으로 만들지만 자바의 경우는 GC가 불필요한 메모리를 정리하기 때문에 소멸자가 필요하지 않다. 자바에서 소멸자인 finalize는 절대로 사용하면 안된다. 1. finalize의 단점 자바의 finalize의 경우 예측이 불가능하고, 위험하며 ...

[Effective Java] 65. 예외를 무시하지 마라

최대 1 분 소요

당연한 얘기지만 checked exception은 개발자에게 명시적으로 처리할 예외가 있다는 것을 알리는 것이다. 그렇기 때문에 무시하는 것은 좋지 못하다. 빈 catch문은 예외를 사용하는 목적에 맞지 않게 무시하는 것이다. 처리할 별다른 내용이 없다면 적어도 주석이라도 달아두...

[Effective Java] 64. 실패 원자성 달성을 위해 노력하라.

1 분 소요

일반적으로 메서드 호출이 정상적으로 처리되지 못하고 예외가 발생한 경우 객체의 상태는 메서드 호출 이전과 동일해야 한다. 이를 만족할때 실패원자성(failure atomicity)을 갖췄다고 한다. 1. failure atomicity를 달성 방법

[Effective Java] 60. 표준 예외를 사용하라.

최대 1 분 소요

자바 플랫폼 library에는 대부분 api가 필요로 하는 Runtime Exception이 갖춰져 있다. 수준 높은 코드는 코드 재사용성이 높다. Exception역시 마찬가지다. 참고로 Exception을 재사용 할때는 예외를 발생시키는 조건이 문서에 기술된 것과 일치해야...

[Effective Java] 6. 객체 참조 폐기

1 분 소요

GC가 있는 Java의 경우 메모리 관리를 망각하는 경우가 많다. 하지만 실수에 의해 불필요한 참조가 제거되지 않아 Memory leak이 발생할 수 있다.

[Effective Java] 59. 불필요한 Checked Exception 사용은 피하라.

최대 1 분 소요

Checked Exception을 사용하면 예외처리를 강제함으로써 프로그램의 안전성을 높일 수 있다. (try-catch 문 사용이 필수적이기 때문에) 하지만 너무 남발하면 사용하는 측에서 불편한 api가 된다. 만약 API를 제대로 사용해도 예외적인 상황이 발생하는 것을 피...

[Effective Java] 56. 일반적으로 통용되는 작명 관습을 따르라.

1 분 소요

자바의 작명 관습은 철자 와 문법 두가지 범주로 나눌 수 있다. 1. 철자 철자의 작명 관습은 패키지, 클래스, 인터페이스, 메서드, 필드, 자료형 변수에 관한 것으로 별다른 이유가 없다면 어겨서는 안된다. 1.1. 철자 관습을 어길 경우 유지 보수가 어려워 진다. 코...

[Effective Java] 50. 다른 자료형이 적절하다면 문자열 사용은 피하라

최대 1 분 소요

1. 적절한 자료형으로 변환하라. 네트워크나 키보드를 통해 입력되는 값이 문자열 형태이다 보니 그대로 사용하려는 경우가 있을 수 있다. 하지만 이는 매우 좋지 못한 것으로 적절한 자료형이 있다면 그것이 기본 자료형이든 객체 자료형이든 상관없이 해당 자료형으로 변환해서 사용해야 한...

[Effective Java] 49. Wrapper class 대신 기본자료형을 사용하라

1 분 소요

모든 기본 자료형(primitive type)에는 이와 대응되는 참조 자료형이 있다. 이를 boxed primitive type 이라고 부른다. JDK 1.5부터는 autoboxing, auto-unboxing을 지원하게되어 기본 자료형과 이런 참조 자료형의 차이를 희미하게 ...

[Effective Java] 48. 정확한 답이 필요하면 float, double은 피하라

1 분 소요

float와 double은 부동소수점 연산을 수행한다. 이는 넓은 범위의 값에 대해서 정확도가 높은 근사치를 제공할 수 있도록 설계된 연산으로 정확한 값을 보장하지 않는다. 특히나 돈과 같이 정확한 연산을 할때는 절때 float와 double을 사용해서는 안된다. 예를 들어...

[Effective Java] 47. 라이브러리를 적절히 활용하라

최대 1 분 소요

라이브러리를 활용할때의 장점은 아래와 같다. 표준 라이브러리를 사용하면 그 라이브러리를 개발한 전문가의 지식뿐 아니라 먼저 그 라이브러리를 사용한 개발자의 경험을 활용할 수 있다.

[Effective Java] 46. for-each 문을 사용하라

최대 1 분 소요

JDK 1.5에 도입된 for-each 문은 반복자나 첨자 변수, 기타 성가신 코드를 없애서 오류 가능성을 없앤다. 또한, 성능면에서도 기존 for 문과 거의 동일하고 어떤 상황에서는 for문보다 나은 성능을 보이기도 한다.

[Effective Java] 45. 변수 범위의 최소화

최대 1 분 소요

지역 변수의 유효범위를 최소화하면 가독성(readability)과 유지보수성(maintainability)이 좋아지고 오류 가능성도 줄어든다. 변수 범위를 최소화하는 가장 좋은 방법은 처음 사용하는 곳에서 선언하는 것이다. 지역 변수를 너무 빨리 선언하면 유효범위가 앞 뒤로 ...

[Effective Java] 4. 객체 생성을 막을때 private 생성자 활용

최대 1 분 소요

객체 생성을 막고자 할 경우 private 생성자를 사용하자. 가끔 Utility성 Class로 static method나 field만 모은 클래스를 만들때가 있다. 이런 구조는 객체지향적이지 않기 때문에 남용하면 안된다. 하지만 반드시 필요한 경우도 있기 때문에 자주 사용되...

[Effective Java] 20. 태그 형태의 클래스 구현 대신 상속을 사용

1 분 소요

Class가 특정 상태에 따라서 다르게 동작하는 식으로 구현되는 경우가 있다. 이런 특정 상태(태그)에 따라서 내부 구현이 달라진다면 상속으로 구분하는 것이 좋다. 아래는 이러한 구현의 예로 shape 라는 태그 내용에 따라서 클래스가 사용하는 멤버가 정해진다. public...

[Effective Java] 2. Builder 패턴

4 분 소요

생성자의 parameter가 많을때는 Builder 패턴을 고려하는것이 좋다. 특히나 선택적으로 필요한 parameter가 많을 경우 유용하다.

[Effective Java] 19. Interface는 자료형을 정의할 때만 사용하라

1 분 소요

인터페이스를 구현하는 클래스를 만들면 그 인터페이스는 해당 클래스 객체를 참조할 수 있는 자로형의 역할을 하게 된다. 인터페이스를 구현해 클래스를 만든다는 것은 해당 클래스의 객체로 어떤일을 할 수 있다라는 것을 클라이언트에게 알리는 행위로, 이 외에 다른 용도로 인터페이스를 사...

[Effective Java] 16. 상속 대신 구성하라

3 분 소요

상속은 코드 재활용을 위한 강력한 방법이지만 적절하게 사용하지 않은 경우 깨지기 쉬운 소프트웨어가 된다. 1. 상속이 안전한 경우

[Effective Java] 15. 변경 가능성을 최소화하라

3 분 소요

immutable class란 변경 불가능한 클래스로 객체가 생성되고 난 이후 그 객체 값의 변경이 불가능한 class를 말한다. 자바에서는 String, 기본자료형 wrapper, BigInteger, BigDeciaml 등이 이러한 class 이다. 변경 불가능한 클래스는 ...

[Effective Java] 13. 접근 권한의 최소화

1 분 소요

잘 설계된 모듈은 구현 세부사항을 API 뒤에 잘 숨긴다. 즉, 정보 은닉(information hiding). 다른말로 캡슐화(encapsulation)가 잘 된 것이다. 1. 캡슐화의 중요성 모듈간의 캡슐화가 잘 된 경우 모듈사이 의존성을 낮춰서 개별적인 개발, 테스트, ...

[Effective Java] 1. Static Factory Method

2 분 소요

객체를 생성하는 방법으로 생성자 외 정적 팩토리 메서드(Static Factory Method)를 사용하는 방법이 있다. 일반적인 생성자보다 장점이 많으니 무조건 생성자를 만들것이 아니라 static factory method를 만드는것을 고려해봐야 한다. singleto...

맨 위로 이동 ↑

암호화

암호화 알고리즘의 분류

3 분 소요

0. Intro 암호화 알고리즘은 크게 대칭형와 비대칭형 2가지로 나뉘는데 이는 암호화에 사용하는 Key와 복호화에 사용하는 Key가 같은지 다른지를 기준으로 분류된다. 통상적으로 대칭형 암호는 비밀키 암호에 사용되며 비대칭형 암호는 공개키 암호에 사용된다. 따라서 각각 대칭...

맨 위로 이동 ↑

SSL

암호화 알고리즘의 분류

3 분 소요

0. Intro 암호화 알고리즘은 크게 대칭형와 비대칭형 2가지로 나뉘는데 이는 암호화에 사용하는 Key와 복호화에 사용하는 Key가 같은지 다른지를 기준으로 분류된다. 통상적으로 대칭형 암호는 비밀키 암호에 사용되며 비대칭형 암호는 공개키 암호에 사용된다. 따라서 각각 대칭...

맨 위로 이동 ↑