본문 바로가기

전체 글

(109)
Array vs List Array 같은 자료형을 가진 변수를 하나로 표현한 것. 원시타입과 객체 모두 가질 수 있다. 연속된 메모리 공간이다. 그래서 각 데이터가 줄줄이 저장될 것이기 때문에 자료형을 미리 적어주어야 한다. 인덱스는 값에 대한 유일무이한 식별자 크기가 불변적 장점: 인덱스를 활용하여 빠르게 조회 가능 단점: 엘리먼트가 삭제되어도 빈 자리가 남는다. => 불필요한 메모리 차지 List 순서가 있는 데이터들의 모임 크기가 가변적 Array의 단점을 보완한다. 불연속적인 메모리 공간 차지 리스트에서 인덱스는 몇 번째 데이터인가 정도의 의미 ArrayList와 LinkedList가 있다. ArrayList Array List는 배열을 이용해서 리스트를 구현한 것 데이터의 추가 => Array List는 내부적으로 데이..
Collection Framework class library 자주 사용하는 클래스들을 컴파일하여 jar 파일로 묶어놓은 것. JDK에 포함된 클래스 라이브러리를 Java 표준 클래스 라이브러리라고 한다. Framework 규모가 크고, 객체지향적으로 클래스들이 서로 연결되고 실행되는 구조를 갖는 클래스 라이브러리 Collection Framework의 Interface들 Collection interface : 자바 컬랙션 클래스를 대표하는 인터페이스 Set interface : 집합 개념으로 주로 중복체크 List interface : 배열과 비슷한 방법으로 사용할 수 있는 컬렉션 클래스들을 대표 Queue interface : FIFO(first-in, first-out) Deque interface : 양방향 큐. 큐(queue)처럼..
다형성 목적 사용 목적이 유사한 클래스들의 사용 방법을 통일하여 서로 호환되도록 만드는 것 구현 공통 부모 클래스를 상속(extends) 받거나, 아니면 공통 interface를 구현(implements) 해야 한다. 공통 부모 클래스를 상속(extends) 받은 자식 클래스들은 다형성을 구현하려는 부모 클래스의 메소드들 재정의 해야한다. 공통 interface를 구현(implements) 자식 클래스들은 interface의 모든 메소드를 구현해야 한다. 인터페이스 상속가능하다. 예를 들어 ArrayList 클래스는 List interface에 정의된 메소드들 뿐만 아니라, Collection interface에 정의된 메소드들도 전부 구현했다. ArrayList 클래스와 LinkedList 클래스는 둘 다 L..
배열 정렬 Arrays 클래스의 sort 메소드 Comparable 인터페이스 interface Comparable { int compareTo(T obj) } 주로 순서 기준이 한개인 경우 Comparator 인터페이스 interface Comparator { int compare(T obj1, T obj2); } 주로 순서 기준에 여러개인 경우 Java에 기본 자료형 int가 이미 있는데, Integer 클래스가 필요한 이유는 무엇일까? 기본자료형은 Arrays.sort()를 사용할 수 있다. Comparable 인터페이스를 구현한 클래스 객체의 배열은 Arrays 클래스의 sort 메소드 사용하여 정렬할 수 있다. 이렇게 객체 또는 클래스가 제공하는 메소드를 사용하기 위해서 래퍼 클래스가 필요하다.
문자열 클래스 String this 문자열을 수정하는 것이 아니고, 수정된 새 문자열 객체를 리턴한다. this 문자열은 수정되지 않는다(immutable). 연산시 새로운 메모리에 할당됨. equals 메소드가 재정의가 되어있다. StringBuilder 내부 문자열을 직접 수정한다(mutable). Thread Safe하지 않다. StringBuilder append()에서 리턴타입이 StringBuilder인 이유는 메소드 체이닝 기법을 사용하기 위해서다. 또한 equals 메소드가 재정의가 안됐다. 이유는 문자열을 조립해서 생성할 때만 잠깐 StringBuilder 객체를 사용하라는 의미에서 equals 메소드가 재정의 되지 않았다. 따라서 문자열을 조립해서 생성할 때만 잠깐 StringBuilder 객체를 사..
Object 클래스 모든 클래스의 부모 클래스는 Object 클래스다. 메소드 protected Object clone(): 자기 자신을 복제해서 새 객체를 만들어 리턴한다. boolean equals(Object obj): equals 메소드를 제대로 구현했다면, equals 메소드는 this 객체와 파라미터 obj 객체의 내용이 동일한지 비교해야 한다. (equality 비교) 그런데 Object 클래스에 구현된 equals 메소드는 객체의 내용을 비교하지 않고 두 객체가 동일한 객체인지 비교한다. (identity 비교) 그래서 equality를 제대로 비교하려면 자식 클래스에서 이 메소드를 재정의 해야 한다. protected void finalize(): 객체가 더 이상 사용되지 않을 때, 자동으로 객체가 파괴되고..
JVM, JRE, JDK, 메모리 구조 JVM Java Virtual Machine의 약자. 자바 가상 기계 자바 소스코드를 컴파일러가 바이너리 코드로 변환하는데 변환된 파일을 실행할 수 있다. 컴파일된 바이너리 코드는 어떤 JVM에서 사용 가능하다 바이너리 코드를 읽고 검증한뒤 실행한다 실행환경의 규격을 제공한다(필요한 라이브러리 및 기타파일) JRE Java Runtime Environment의 약자. 자바 실행 환경 JVM의 실행환경을 구현했다 JDK Java Development Kit의 약자. 자바 개발 도구 JRE 실행에 필요한 도구들을 포함 메모리 구조 JVM이 실행되면 OS가 JVM에게 필요한 메모리를 할당한다. OS로 받은 메모리를 'Runtime Data Area'라고 한다. JVM은 Runtime Data Area를 용도에..
Transaction Isolation Level Transaction Isolation Level 설정에 따라, 트랜잭션이 데이터를 읽기 전에 읽기 락을 하냐 마냐, 읽기 락을 언제까지 유지 하냐가 결정된다. 읽기 락을 많이 걸고 오래 유지할 수록 데이터의 안정성은 좋아지지만 성능은 나빠진다. Transaction Isolation Level을 설정하는 명령 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SET TRANSACTION ISOLATION LEVEL READ COMMITTED SET TRANSACTION ISOLATION LEVEL REPEATABLE READ SET TRANSACTION ISOLATION LEVEL SERIALIZABLE Transaction Isolcation Level을 설정하는..