Language/Java 4

[Java] LinkedList 파헤쳐 보기

Java의 ArrayList의 실제 구현코드를 살펴보았던 이전 게시글에 이어서 LinkedList도 소스코드를 파헤쳐보자. (참고: 2021.10.06 - [Language/Java] - [Java] ArrayList 파헤쳐 보기) Doubly-linked list implementation of the List and Deque interfaces. LinkedList는 이전/이후의 리스트와 연결되어 있는 구조이다. 이는 다음과 같은 특징을 가진다. o element 갯수에 대해 정해진 limit 없음 o Reference Type만 가질 수 있음 o Thread Safe 하지 않음 ArrayList가 내부적으로 Object[]으로 이루어졌던거에 비해 LinkedList는 Node로 이루어져있다. 코드..

Language/Java 2021.10.06

[Java] ArrayList 파헤쳐 보기

Java 개발에서 Collection의 데이터 타입을 사용하면서 내부 코드를 볼 생각을 하지는 않았었는데, 직접 ArrayList 클래스를 살펴보며 어떻게 동작하는지 공부해보니 흥미로운 부분이 많았다. 여기서는 ArrayList의 생성자, 삽입/삭제/초기화/정렬 메소드 중심으로 정리해보려 한다. Resizable-array implementation of the List ArrayList란 Size가 변하는 배열을 말한다. 그리고 다음과 같은 몇가지 특징을 가진다. o 중간에 데이터를 삽입, 삭제하는 것이 가능 o Reference Data Type만 넣을 수 있음 o Thread Safe 하지 않음 그럼 코드를 한 번 살펴보자. o 인스턴스 변수 : ArrayList는 값을 담고있는 Object배열과 ..

Language/Java 2021.10.06

[Java] 자바에서의 다중상속과 인터페이스의 Default Method

Java는 다중상속을 허용하지 않는다. 자바를 사용하면서 당연하게 생각하는 규칙인데, 그렇다면 그 이유가 무엇일까? 그리고 정말로 자바에서 다중상속이 불가능한지 알아보자. 다이아몬드 문제 (Diamond Problem) 다음과 같은 구조에서 다중상속을 허용한다고 가정해보자. Father, Mother 클래스는 Parent 클래스의 추상메소드 funcA() 를 각각 구현한다. Child 클래스가 Father, Mother 클래스를 둘 다 extends 한다면, Child.funcA() 는 어떤 메소드를 상속받아야할지 알 수 없다. ==> 다중상속의 모호성으로 이를 금지한다. 인터페이스를 사용한 다중상속 (Default Method) 클래스의 상속과 반대로 인터페이스는 여러 개를 implements 할 수 ..

Language/Java 2021.09.18

[Java] Wrapper Class의 생성과 Cache

Java의 데이터 타입은 크게 Primitive Type (기본형), Reference Type (참조형) 두가지가 있다. Java의 기본형 변수는 참조형으로 바꿀 수 있는데 이를 Wrapper Class라고 한다. Wrapper Class는 왜 쓰는걸까? 사실 코딩을 하면서 개발자가 직접 기본형 -> 참조형으로 변수 타입을 변경(Boxing)하는 일은 많지 않은 것 같다. JDK 1.5버전 이후부터 자동으로 변수타입을 바꾸어주기 때문인데, 내부적으로는 Wrapper Class는 몇가지 특징을 가진다. 1) 다형성 자주 쓰는 java.util.*의 Collections 함수들은 대부분 Object 타입으로 매개변수를 받고, 반환한다. 마찬가지로 Generic Type도 마찬가지다. 기본형의 변수를 Wra..

Language/Java 2021.09.13