본문 바로가기

프로그래밍

(57)
Collection remove에 대해 Collection의 element를 remove 할 때, 1. Arrays.asList() 아래와 같이 Arrays.asList() 를 통해 생성한 리스트의 0번째 인덱스를 삭제해보자.List aaList = Arrays.asList("a", "1", "c", "d", "e"); aaList.remove(1); 두둥.... 지원하지 않는 연산이란다. Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.remove(AbstractList.java:161) at JavaExamples01.marathon(JavaExamples01.java:22) at ModernJava.main(ModernJ..
String, StringBuffer, StringBuilder 1.String은 Immutable이다.vsStringBuffer/StringBuilder는 mutable이다. 2.String으로 +연산, concat을 이용하면 새로운 String 객체가 만들어지는 것이다.(JDK 1.5부터 +연산이 내부적으로 StringBuilder에 의해 이뤄지긴 함.)참조되지 않는 String은 GC 대상이 된다.문자열 연산이 많은 경우 오버헤드가 발생할 수 있다. vsStringBuffer와 StringBuilder는 문자열 연산이 자주 있을 때 사용한다. 3.StringBuffer는 멀티 스레드 환경에서 syncronized 키워드가 가능해 동기화가 된다. 즉, thread-safe하다vsStringBuilder는 동기화를 지원하지 않지만 연산이 빠르다. vsString은 ..
Object의 메서드/equals/hashCode/clone Object class는 모든 자바 클래스의 최상위 클래스이다. 필드는 없고, 11개의 메소드를 가지고 있다. toString- 해당 인스턴스에 대한 정보를 문자열로 반환한다. - 구분자로 '@'가 사용되고 그 뒤로 16진수 해시 코드가 추가된다. equals- 전달 받은 매개변수와 해당 인스턴스를 비교하여 그 결과를 반환한다.- 참조값을 비교하므로 주소 값이 같아야 참이 된다. - 중요한 규칙이 있는데, equals를 재정의 할 때는 hashCode도 재정의 해야 한다. - 그렇지 않으면 규약이 깨질 수 있다. (A->B가 true이면 C->B는 true다 뭐 이런거..)- 자세한 내용은 참고 블로그를 보자. clone- 해당 인스턴스를 복제하여 새로운 인스턴스를 생성해 반환한다.- Object의 cl..
JVM https://huelet.tistory.com/entry/JVM-%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B5%AC%EC%A1%B0 에서 참고했습니다. 메모리는 프로그램을 실행하기 위한 데이터, 명령어가 저장되는 공간이다. 한정된 공간이기 때문에 효율적인 관리가 중요하다. 메모리가 부족하게 되면 성능 문제 뿐만 아니라 프로그램 자체가 뻗어 버릴지도 모른다. 프로그램이 실행되려면 OS가 제어하는 RAM(=memory)이 필요한데 JAVA 이전의 언어들은 OS에 종속적이다.JAVA에서는 이런 OS 의존성을 없앴는데 그 역할을 해 주는 것이 JVM이다.JVM이 각 OS로부터 메모리 권한을 할당 받아 프로그램을 실행해 준다. 즉, JAVA는 OS로부터는 독립적이지만 JVM에 종속적이고..중간에 ..
Normalization & Denormalization 요약 Normalization: 정규화, Denormalization: 비정규화에 대해 간략하게 요역 한다. Normalization 데이터베이스에서 정규화 작업은 데이터 모델을 검증하는 방법다. 이론적으로는 5단계로 구성되어 있고, 실질적으로는 3단계까지만 적용하는 경우가 대부분이다. 고려되는 요소는 아래와 같다. - 중복 컬럼 삭제: No repeating group- 유일키 전체에 대한 종속: Whole key dependent- 유일키가 아닌 것에 영향을 받는 속성은 분리: Non-key Independent 정규화 작업은 중복 컬럼 등을 분리하여 유지보수를 쉽게 해 주지만, 비효율적인 정규화는 '조인'을 과도하게 사용하게 되어 성능을 떨어뜨린다. 따라서 성능적 측면을 고려한 비정규화 작업을 실행해 주..
Filter & Interceptor Filter, Interceptor 웹 프로그래밍을 하다보면 컨트롤러에 도달하기전 전처리가 필요한 경우가 있다. 후처리일수도 있고.. 가령.. 회원 인증 여부를 체크하고 싶다던가, 개인정보 보호를 위해 로그 기능을 끄고 싶다던가..권한 체크..Cross Site Script(XSS) 방어..PC/Mobile web 분기..인코딩 변환... 등등등 공통적인 기능들은 각 컨트롤러에서 할게 아니라 전처리 또는 후처리를 해주면 매우 좋다. 그럼 컨트롤러에 도달하기 전에 어떤 레이어가 있을까?Spring MVC life cycle를 검색해보면 아래와 같은 그림을 볼 수 있다. 출처: https://all-record.tistory.com/164 [세상의 모든 기록]> Request가 들어오면 Filter를 맨 먼..
ArrayList + Generic 구현하기 제네릭을 활용한 ArrayList를 구현해보는 건 기본기를 닦는데 매우 도움이 되는 것 같다.답안지는 저 아래에 있다. https://github.com/yudong80/ThinkDataStructures/blob/master/code/src/com/allendowney/thinkdast/MyArrayList.java List 인터페이스를 implements 해서 직접 한번 구현해보자!!public class MyArrayList implements List { private int size; private T[] array; public MyArrayList() { size = 0; array = (T[])new Object[10]; }
Java Collections Framework 블로그에 Java Collection에 대해 한눈에 알게 해주는 이미지가 있어 퍼왔다. Java Collection에 대해서는 JCF(Java Collections Framework)에서 제공한다. 크게 네가지로 분류한다.ListQueueSetMap List- 순서 O- 중복 허용 O ArrayList- 단방향 포인터 구조- 인덱스가 있어 조회 성능 좋음 LinkedList- 양방향 포인터 구조- 삽입/삭제가 빈번한 경우 성능 좋음- 스택, 큐, 양방향 큐 용도로 쓰임 Vector- 동기화 처리가 내부적으로 일어나 성능이 좋지 않음 Set- 순서 X- 중복 허용 X HashSet- 빠른 임의 접근 속도- 순서 없음 TreeSet- 정렬 가능 Map- key-value 구조- 순서 X- value 중복 허..