프로그래밍 노트/JAVA

final 필드와 상수 final 필드final의 의미는 최종적이라는 뜻을 갖고 있다. Final 필드는 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정할 수 없다. final 필드의 초기값을 줄 수 있는 방법은 두가지이다. 첫 번째는 필드 선언시에 초기값을 주는 방법이며, 두 번째는 생성자를 통해 초기값을 주는 방법이다. (만약 초기화되지 않은 final 필드를 그대로 남겨두면 컴파일 에러가 발생한다.) 상수(static final)일반적으로 불변의 값을 상수라고 부른다. 불변의 값을 저장하는 필드를 자바에서는 상수(constant)라고 부른다. final 필드는 한 번 초기화되면 수정할 수 없는 필드이지만, final 필드를 상수라고 부르진 않는다. 왜냐하면 불변의 값은 객체..
정적멤버와 static정적(static)은 ‘고정된’이라는 의미를 가지고 있다.정적 멤버는 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메서드를 말한다. 정적 멤버 선언1234567public class 클래스{ // 정적 필드 static 타입 필드 // 정적 메소드 static 리턴 타입 메소드() {… }}cs 정적필드, 정적 메소드는 클래스에 고정된 멤버이므로 클래스 로더가 클래스(바이트 코드)를 로딩해서 메소드 메모리 영역에 적재할 때 클래스별로 관리된다. (클래스 로딩이 끝나면 바로 사용할 수 있음) 인스턴스 필드 => 객체마다 가지고 있어야할 데이터 정적 필드 => 객체마다 가지고 있을 필요성이 없는 공용적인 데이터 일 경우 각각에 맞게 사용하면 된다. 123456p..
예외처리 방법1. 예외 복구 => 정상 상태로 돌려 놓는 것. 예외로 인해 기본 작업 흐름이 불가능하다면 다른 작업 흐름으로 자연스럽게 유도해주는 것ex) SQLException (네트워크가 불안해서 발생하는 문제라면)123456789101112int maxRetry = MAX_RETRY;while(maxEntry --> 0){ try{ .. return; // 작업 성공 }catch(SomeException e){ // 로그 출력 및 정해진 시간만큼 대기 }finally{ // 리소스 반납 }}throw new RetryFailedException(); // 최대 횟수를 넘기면 직접 예외 발생cs 2. 예외처리 회피예외처리를 담당하지 않고, 호출한 쪽으로 예외를 던져버리는 것.하지만 무책임한 회피는 금..
예외처리블랙홀 예외처리=> catch블록을 이용해 화면에 메시지를 출력한 것은 예외를 처리한 것이 아니다.예외를 처리할 때 반드시 지켜야 할 핵심 원칙은 한가지다.모든 예외는 적절하게 복구되든지 아니면 작업을 중단시키고 운영자 또는 개발자에게 분명하게 통보돼야 한다.123456try{ // .. 로직}catch(SQLException e){ e.printStackTrace(); System.exit(1);}cs(그나마 나은 예외처리.. 시스템 종료) 무의미하고 무책임한 throws=> 기계적으로 throws를 던진다면, 결과적으로 적절한 처리를 통해 복구될 수 있는 예외상황도 제대로 다룰 수 있는 기회를 박탈 당한다. 예외의 종류와 특징예외처리에서 가장큰 이슈는 checked Exception(명시적 처..
Map 구현체 TreeMap이진검색트리의 형태로 키(Key)와 값(Value)의 쌍으로 이루어진 데이터를 저장한다. 검색과 정렬에 적합한 컬렉션 클래스이다.HashMap이 TreeMap보다 검색에 관한부분은 성능이 더 뛰어나므로 HashMap을 사용하는 것이 좋고,범위검색이나 정렬이 필요한 경우에는 TreeMap이 더 유리하니 TreeMap을 사용하면된다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667public class TreeMapTest { public static void main(String[] args){ Strin..
Map 구현체 HashMapHashtable과 HashMap은 Vector와 ArrayList와 같은 관계이다. (새로운 버전인 HashMap을 사용할 것을 권장하고 있다.)Map의 특징, 키(key)와 값(value)을 묶어서 하나의 데이터(entry)로 저장한다는 특징을 갖고있다.그리고 해싱(hashing)을 사용하기 때문에 데이터검색에 뛰어난 성능을 보인다. 12345678public class HashMap extends AbstractMap implements Map, Cloneable, Serializable{ transient Entry[] table; static class Entry implements Map.Entry{ final Object key; Object value; }}Col..
Set 구현체 TreeSetTreeSet은 이진검색트리(binary search tree)라는 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스이다. 이진검색트리는 정렬, 검색, 범위검색(range search)에 뛰어난 성능을 보이는 자료구조이며, '레드-블랙 트리'로 구현되어 있다.(이미지 출처) 이진 트리(binary tree)는 링크드리스트처럼 여러 개의 노드가 서로 연결된 구조로, 각 노드에 최대 2개의 노드를 연결할 수 있으며 '루트(root)'라고 불리는 하나의 노드에서부터 시작해서 계속 확장해 나간다.이진트리의 노드를 코드로 표현하면 다음과 같다.12345Class TreeNode{ TreeNode lfet; // 왼쪽 자식노드 Object element; // 객체를 저장하기 위한 Tre..
Set 구현체 HashSetSet인터페이스를 구현한 가장 대표적인 컬렉션으로, Set의 특징대로 중복된 요소를 저장하지 않는다.HashSet의 특징을 이용하면, 컬렉션 내의 중복된 요소들을 쉽게 제거할 수 있다.(이미지 출처) ArrayList와 같이 List 인터페이스를 구현한 컬렉션과 달리 HashSet은 저장순서를 유지하지 않으므로 저장순서를 유지하고자 하면 LinkedHashSet을 사용해야 한다.123456789101112131415161718192021public class HashSetTest { public static void main(String[] args){ Integer[] intArr = {4, 4, 5, 6, 1, 1, 1, 2, 2, 3, 3, 7, 8,}; // HashSe..
Key 인터페이스JCA에서 지원하는 모든 키는 Java.Security.Key 인터페이스로 추상화된다.Key 인터페이스는 getAlgorithm(), getFormat(), getEncoded() 를 제공하며, 제한된 키정보에 대한 접근만 허용하고 있다.1234567KeyPair keyPair = rsaUtil.generateKeyFair();PrivateKey privateKey = keyPair.getPrivate();PublicKey publicKey = keyPair.getPublic(); log.info("algorithm : {}", privateKey.getAlgorithm());log.info("format : {}", privateKey.getFormat());log.info("encod..
JCA(Java Cryptography Architecture)JAVA에서의 보안 관련 기능 중에서 JCA(Java Cryptography Architecture)는 핵심이라고 할 수 있다.JCA는 프로바이더 구조를 사용하여 보안과 관련된 다양한 API를 제공한다.ex) 전자서명(Digital Signature), 메시지 다이제스트(Message Digest), 인증서 유효성 검사(Certificate Validation), 키생성 등등정확히 말하자면 디자인 패턴은 아니다. Factory 패턴과 유사하나 외부설정에 따라 다른 객체를 생성하는 패턴을 칭한다. (나쁜 패턴이라고 함)하지만 잘 작성된 오픈소스 프로젝트들에서 이러한 구현을 꽤 볼수있다. => 더 알아봐야할듯 설계 원칙JAVA 플랫폼을 기반으로 ..
깡냉쓰
'프로그래밍 노트/JAVA' 카테고리의 글 목록 (7 Page)