[Collection] Java의 Node, LinkedList
·
Java/Collection
Node의 특징Node란 서로의 메모리 주소를 참조하는 형태로 이루어진 자료구조이다.Node는 인덱스를 통해 추가 및 삭제 시 위치를 O(n)으로 찾지만, 찾은 이후에는 일부 Node의 참조값만 변경하면 되므로 해당 부분이 O(1)로 빠르다.앞에 추가하는 경우 : 연결리스트는 배열리스트 처럼 추가한 항목의 오른쪽에 있는데이터를 밀지 않고 참조값만 변경하면 되므로 데이터를 앞쪽에서 추가하는 경우 연결리스트가 보통 더 좋은 성능을 제공한다마지막에 데이터를 추가하는 경우 : 노드를 마지막까지 순회해야 마지막 노드를 찾을 수 있다. 따라서 마지막 노드를 찾는데 O(n)의 시간걸린다, 데이터를 추가하는 경우 일부 노드의 참조만 변경하면 된다. O(1), 따라서 O(n)의 성능을 제공한다.ArrayList와의 차이..
[Collection] Java의 배열과, ArrayList
·
Java/Collection
배열의 특징배열은 Java가 지원하는 CollectionFramework중의 하나로 데이터의 중복저장을 허용하고, 순서를 보장하는 Collection이다.배열에서 자료를 찾을 때 Index를 사용하면 매우 빠르게 자료를 찾을 수 있으며, Index를 통한 입력 및 변경, 조회의 경우 한번의 계산O(1)으로 자료의 위치를 찾을 수 있다.  배열이 인덱스의 위치를 찾는 방법arr[2]에 위치한 자료를 찾는다고 가정해보자.Array는 메모리상에 순서대로 붙어서 존재하게 된다.int는 4byte를 차지한다 -> 따라서 배열의 시작 위치부터 시작해서 자료의 크기(4byte)와 인덱스 번호를 곱하면 원하는 메모리 위치를 찾을 수 있다.배열의 시작 참조 위치 + 자료의 크기 + 인덱스 위치 = 해당 연산을 통해 값이..
빅오 표기법
·
Java/자료구조
빅오란알고리즘의 성능 분석 시 사용하는 수학적 표현 방식이다. 이는 알고리즘이 처리해야할 데이터의 양이 증가할 때, 해당 알고리즘이 얼마나 빠르게 실행되는지는 나타내는 표기법이다.빅오 표기법을 보고 알 수 있는것은 정확한 실행시간을 계산하는 것이 아닌 데이터 양의 증가에 따른 성능 변화의 추세를 이해하는 것이다.  빅오 표기법의 예시O(1) - 상수 시간: 입력 데이터의 크기에 관계없이 알고리즘의 실행 시간이 일정한다.예) 배열에서 인덱스를 사용하는 경우O(n) - 선형 시간: 알고리즘의 실행 시간이 입력 데이터의 크기에 비례하여 증가한다.예) 배열의 검색, 배열의 모든 요소를 순회하는 경우O(n2) - 제곱 시간: 알고리즘의 실행 시간이 입력 데이터의 크기의 제곱에 비례하여 증가한다.n2은 n * n ..
[Java] 자바의 제네릭이란, Generic, 타입 매개변수
·
Java
해당 글에서는 Generic의 깊은 이해보다는 어떠한 이유로 제네릭이 생겨났구나 정도 파악하고 예제 코드로 학습하기 위한 목적입니다. 자바에서 제네릭이 필요한 이유 만약에 하나의 기능을 제공하는데, 타입별로 다를 경우를 생각해보면된다. 예를들어 String 타입의 값을 담아서 출력하는 객체, Integer타입의 값을 담아서 출력하는 객체, Double, Boolean 등등 있다고 가정해 보겠다. 그럼 각각의 타입이 서로다르다는 이유로 값을 담아서 출력해야하는 로직을 각 타입에 맞게 코드를 작성해주어야 한다.OutputString outputStr = new OutputString();String hello = "hello";outputStr.print(hello);OutputInteger OutputIn..
[Java] StreamAPI
·
Java
Stream의 등장자바 8에서 등장한 API로 자바에서는 이와 같은 문제점들을 고려하여 StreamAPI를 내놓게 되었다.다양한 프로그래밍 문제를 더 빠르게 대응하기 위해서이를 위해서는 유지보수가 잘 이루어져야 하는데, 역시나 문제는 가독성이였다. 그래서 이를 더 간결하게 표현하고자 Stream API가 나왔다.멀티코어 프로세서를 활용해서 병렬 실행 환경을 쉽게 관리하기 위해서.Stream이란Stream의 사전적 의미는 '냇가' 혹은 "줄줄 흐르다"." 줄줄 지어 이어지다" (출처 네이버)이다. 오라클 공식 문서에서는 "일련의 요소", 모던 자바 인 액션에서는 "연속된 요소"라고도 한다. 나는 개인적으로 Stream이란 단어를 들으면 연속된 요소(줄줄 흐르는 냇가)가 연상된다. Stream의 3가지 구성..
[Java] Optional
·
Java
Optional 이란null 가능성이 있는 값을 감싸는 컨테이너 객체이다.null 체크를 명시적으로 하지 않고도 null 값으로 인해 발생할 수 있는 NullPointerException을 예방할 수 있도록 도와주며, Optional을 사용하면 코드의 가독성이 향상되고, null 관련 버그를 줄이고 핸들링 할 수 있도록 도와준다. Optional을 사용하는 이유 먼저 Optional을 사용해야만 하는 이유에 대해서 살펴보자.Optional이란 null 가능성이 있는 값을 감싸는 컨테이너 객체이다.그렇다면 그냥 if 문으로 null 가능성이 있는 객체에 대해서 예외 처리를 해주면 되는데 왜 굳이 Optional을 사용해야 하는가...OnlineClass springBoot = new OnlineClass(..
[Java]Interface란? 그리고 interface와 Abstract의 차이.
·
Java
Interface -> Interface란 순수 추상 클래스 (오로지 추상 메서드로만 이루어진 Abstract 클래스)를 Interface라고 한다. 상속 vs 구현 상속은 부모 클래스에서 정의한 메서드를 그대로 물려받아 사용하는 것이 목적이다. 허나 구현은 부모 타입에서 모든 메서드가 추상 메서드일 경우 하위 클래스에서 어차피 구현해야 하기 때문에 구현이라하며, 모든 메서드가 추상 메서드인 추상 클래스를 인터페이스라고한다. Interface를 사용해야 하는 이유 원초적인 질문이 생기게 되는데 "그럼 그냥 순수 Abstract 클래스를 사용하면 되는데 왜 굳이 Interface라는 개념을 도입한 것인가?" --> Abstract 클래스를 생성해서 순수 추상 메서드로만 작성한 개발자가 있다고 가정했을 때,..
[Java] 상속관계에 대해서
·
Java
서론이 글은 Java의 상속과 다형성에 대해 설명합니다. 상속은 기존 클래스의 기능을 재사용하게 해주는 객체지향 프로그래밍의 핵심 요소로, 클래스 상속과 추상 클래스 상속의 두 종류를 다루며, 주로 클래스 상속에 초점을 맞춥니다. extends 키워드를 사용하여 상속을 구현하는 방법과 함께, 상속을 통해 코드 재사용성을 높일 수 있는 방법을 예제 코드를 통해 보여줍니다. 다형성은 객체가 여러 형태를 가질 수 있음을 의미하며, 이 글에서는 다형적 참조와 메서드 오버라이딩을 통해 다형성의 실질적인 사용 예를 설명합니다. 다형적 참조는 부모 클래스 타입의 변수가 자식 클래스 인스턴스를 참조할 수 있게 하는 것을 말하며, 메서드 오버라이딩은 자식 클래스에서 부모 클래스의 메서드를 재정의하는 것입니다.  이 글은..
cheolhyeon
'Java' 카테고리의 글 목록 (2 Page)