전체 글 18

[자바로 배우는 핵심 자료구조와 알고리즘] 5장 이중 연결 리스트

이중 연결 리스트성능 프로파일 결과추정 기울기?문제 크기와 실행시간 사이 관계의 지수 앞자리를 의미예ArrayList의 끝에 요소를 더하는 add 메서드를 사용하였을 때 n번 추가 연산의 전체 시간은 n에 비례추정 기울기 : 1에 가까움n번 추가 연산은 O(n)ArrayList의 시작에 새로운 요소를 추가하는 연산의문제 크기 대비 실행시간 그래프 이 그래프에서 직선은 알고리즘이 선형임을 의미하지 않음실행시간이 어떤 지수 k에 대해 n^k에 비례한다면 결과 그래프는 기울기 k인 직선이 됨n번 추가하는 연산의 전체 시간이 n^2에 비례하므로 직선의 기울기는 2가 됨사실, 추정 기울기는 1.992인데, 데이터를 조작한 것처럼 너무나 정답에 가까움LinkedList 메서드 프로파일하기LinkedList 시작에 ..

[자바로 배우는 핵심 자료구조와 알고리즘] 4장 LinkedList 클래스

LinkedList 클래스MyLinkedList 메서드 분류하기indexOf 메서드 구현public int indexOf(Object object) { Node node = head; for (int i = 0; i 보통 다음 Node가 null이 아닌지 확인해야 하지만, 이 경우에는 리스트 끝까지 가면 반복문이 종료되므로 안전size 변수는 리스트의 실제 노드 개수와 일치한다고 가정이 메서드의 증가 차수는?반복마다 상수 시간인 equals 메서드를 호출함이 메서드는 target이나 data의 크기에는 의존하지만, 리스트의 크기에는 의존하지 않음반복문의 다른 연산 또한 상수 시간반복은 n번 실행됨. 운이 없으면 전체 리스트를 순회할 수도 있기 때문=> 이 메서드의 실행시간은 리스트의 크기에 비..

[자바로 배우는 핵심 자료구조와 알고리즘] 3장 ArrayList 클래스

ArrayList 클래스MyArrayList 메서드 분류하기get 메서드 구현public E get(int index) { if (index = size) { throw new IndexOutOfBoundsException(); } return array[index];}get 메서드에 있는 모든 것은 상수 시간 => get 메서드는 상수 시간set 메서드 구현public E set(int index, E element) { E old = get(index); array[index] = element; return old;}set 메서드는 인덱스가 유효하지 않으면 예외를 던지는 get 메서드를 호출get 메서드 호출을 포함한 set 메서드의 모든 것은 상수 시간 => set 메서드는 상수 ..

[자바로 배우는 핵심 자료구조와 알고리즘] 2장 알고리즘 분석

알고리즘 분석프로파일링이란?어떤 응용 프로그램에 어느 클래스가 더 좋을지 결정하는 한 가지 방법은 둘 다 시도해 보고 각각 얼마나 걸리는지 알아보는 것문제점알고리즘을 비교하려면 사전에 그것을 모두 구현해봐야 함결과는 사용하는 컴퓨터의 성능에 의존함한 알고리즘이 어떤 컴퓨터에서는 더 좋을 수 있지만, 다른 알고리즘은 다른 컴퓨터에서 더 좋을 수도 있음결과는 문제 크기나 입력으로 사용하는 데이터에 의존하기도 함알고리즘 분석을 사용하면 이런 문제점을 해결할 수 있음컴퓨터 하드웨어의 세부사항을 다루지 않기 위해 보통 알고리즘을 이루는 더하기와 곱하기, 숫자 비교 등의 기본 연산을 식별. 각 알고리즘에 필요한 연산 수를 셈입력 데이터의 세부사항을 다루지 않으려면 가장 좋은 선택은 기대하는 입력 데이터에 대한 평균..

[자바로 배우는 핵심 자료구조와 알고리즘] 1장 인터페이스

인터페이스리스트가 두 종류인 이유왜 자바는 List 인터페이스에 두 가지 구현을 제공?둘 중에 어느 것을 선택?어느 것이 더 좋을지는 수행하는 동작에 달려 있음자바 interface자바 interface는 메서드 집합을 의미ex) Comparable interfacepublic interface Comparable {public int compareTo(T o);}interface는 타입 파라미터인 T를 사용하여 Comparable이라는 제네릭 타입을 정의이 interface를 구현하려면 클래스는 다음과 같아야 함T 타입을 명시해야 함T 타입의 객체를 인자로 받고 int를 반환하는 compareTo() 메서드를 제공해야 함expublic int compareTo(Integer anotherInteger)..

C#의 확장 메서드

c# 공부 중인데 확장 메서드라는 부분은 자바에서 보지 못한 부분이라 정리해봅니다.확장 메서드란?클래스의 외부에서 클래스의 메서드처럼 사용할 수 있는 새로운 메서드를 만들 수 있는 기능즉 상속할 수 없는 클래스의 기능을 확장할 수 있음특징기존 코드 수정 없이 기능 확장정적 클래스에서 정의내부적으로 정적 메서드내부적으로는 정적 메서드이지만, 사용하는 방식은 인스턴스 메서드처럼 사용할 수 있음사용법class Person{ public string name; public Person(string name) { this.name = name; }}class Print{ public static string printPerson(this Person p) { r..

공부/c# 2024.11.25

[운영체제] 캐시

캐시 메모리(Cache Memory)속도가 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리더보기ex1) CPU 코어와 메모리 사이의 병목 현상 완화ex2) 웹 브라우저 캐시 파일은 하드디스크와 웹페이지 사이의 병목 현상을 완화CPU가 주기억장치에서 저장된 데이터를 읽어올 때, 자주 사용하는 데이터를 캐시 메모리에 저장한 뒤, 다음에 이용할 때 주기억장치가 아닌 캐시 메모리에서 먼저 가져오면서 속도를 향상시킴속도라는 장점은 얻지만, 용량은 적기도 하고 비용이 비쌈CPU에는 이러한 캐시 메모리가 2 ~ 3개 정도 사용L1, L2, L3 캐시 메모리라고 부름속도와 크기에 따라 분류한 것으로, 일반적으로 L1 캐시부터 먼저 사용CPU에서 가장 빠르게 접근하고, 여기서 데이터를 찾지 ..

공부 2024.11.10

[모던 리액트 Deep Dive] 1장. 리액트 개발을 위해 꼭 알아야 할 자바스크립트

1.7 선택이 아닌 필수, 타입스크립트더보기동적 언어인 자바스크립트에서 런타임에만 타입을 체크할 수 있는 한계를 극복해 더욱 안전하게 작성하면서도 잠재적인 버그도 크게 줄일 수 있는 기회를 얻을 수 있음1.7.1 타입스크립트란?TypeScript is JavaScript with syntax for types기존 자바스크립트 문법에 타입을 가미한 것자바스크립트는 기본적으로 동적 타입의 언어이기 때문에 대부분의 에러를 코드를 실행했을 때만 확인할 수 있다는 문제점동적 타입 언어라는 점은 개발자에게 자유를 주기도 하지만 코드의 규모가 커질수록 오히려 발목을 잡는 경우도 많음타입스크립트는 타입 체크를 정적으로 런타임이 아닌 빌드 타입에 수행할 수 있게 해줌모든 함수와 변수에 이러한 타입 확인 연산자인 type..

[모던 리액트 Deep Dive] 1장. 리액트 개발을 위해 꼭 알아야 할 자바스크립트

1.6 리액트에서 자주 사용하는 자바스크립트 문법더보기웹 페이지에 접근하는 사용자의 브라우저와 버전은 개발자와 다르게 항상 최신 버전이 아니고, 크롬, 사파리, 파이어폭스 등 다양하기 때문에 이러한 다양한 브라우저에서 문법 지원 또한 염두에 두어야 함1.6.1 구조 분해 할당배열 또는 객체의 값을 말 그대로 분해해 개별 변수에 즉시 할당하는 것주로 어떠한 객체나 배열에서 선언문 없이 즉시 분해해 변수를 선언하고 할당하고 싶을 때 사용배열 구조 분해 할당const array = {1, 2, 3, 4, 5}const [first, second, third, ...arrayRest] = array// first 1// second 2// third 3// arrayRest [4, 5]🔖 useState 함수..

[모던 리액트 Deep Dive] 1장. 리액트 개발을 위해 꼭 알아야 할 자바스크립트

1.5 이벤트 루프와 비동기 통신의 이해더보기자바스크립트는 한 번에 하나의 작업만 동기 방식으로 처리 동기란?◾ 직렬 방식으로 작업을 처리하는 것◾ 이 요청이 시작된 이후에는 무조건 응답을 받은 이후에야 비로소 다른 작업을 처리◾ 그 동안 다른 모든 작업 대기 비동기란?◾ 직렬 방식이 아니라 병렬 방식으로 작업을 처리하는 것◾ 요청을 시작한 후 이 응답이 오건 말건 상관없이 다음 작업이 이루어지며, 한 번에 여러 작업이 실행될 수 있음 자바스크립트는 싱글 스레드에서 동기 방식으로 작동, 싱글 스레드 기반의 자바스크립트에서도 비동기 작업이 이루어짐예) 사용자가 검색어를 입력해 검색을 위한 네트워크 요청이 발생하는 순간에도 사용자는 다른 작업 처리 가능1.5.1 싱글 스레드 자바스크립트프로세스프로그램을 구동..