반응형

전체 글 2934

[디딤돌 자료구조와 알고리즘] 5.1 배열 - 5.1.2 동적 배열 구현

5.1.2 동적 배열 구현 먼저 동적 배열을 생성하는 함수를 작성합시다. Array *New_Array() { 동적 배열 형식 크기의 메모리를 할당합니다. Array *arr = 0; arr = (Array *)malloc(sizeof(Array)); 자료를 보관할 저장소는 0으로 초기화합니다. 여기서 구현할 동적 배열은 저장소가 꽉 차면 내부적으로 저장소의 크기를 확장해 나갈 것입니다. arr->base = 0; 저장소에 용량과 보관한 자료 개수를 0으로 초기화한 후 동적 배열을 반환합니다. arr->capacity = arr->usage = 0; return arr; } 동적 배열을 소멸하는 함수를 작성합시다. void Delete_Array(Array *arr) { 만약 저장소가 유효하면 저장소를 ..

[디딤돌 자료구조와 알고리즘] 5.1 배열 - 5.1.1 동적 배열 설계

5. 1 배열 C언어에서 제공하는 형식 배열은 원소 개수를 개발 단계에 상수로 결정하여 컴파일 시점에 할당할 메모리 크기를 결정합니다. 하지만 자료구조에서 말하는 배열은 C언어에서 제공하는 배열뿐만 아니라 같은 종류의 자료를 보관하기 위해 동적으로 메모리를 할당하여 관리하는 구조도 포함합니다. 이 책에서는 자료를 보관하는 저장소를 동적으로 할당하는 사용자 정의 배열을 구현하고 배열을 사용하는 방법을 살펴봅시다. 5.1.1 동적 배열 설계 여기에서 작성하는 배열은 동적 배열입니다. 동적 배열이란 자료를 저장하는 메모리를 프로그램 동작 중에 크기를 결정하여 동적으로 할당하는 배열을 말합니다. 즉 보관할 수 있는 원소의 개수를 개발 단계에서 결정하는 것이 아니라 실행 시간에 결정하는 것을 말합니다. 그리고 저..

[디딤돌 자료구조와 알고리즘] 5. 선형 자료구조 - 개요

5. 선형 자료구조 이번 장에서는 선형 자료구조에 관하여 살펴봅시다. 이미 앞 장에서 비선형 자료구조인 이진 탐색 트리는 살펴보았습니다. 선형 자료구조는 자료를 보관하는 논리적인 구조를 하나의 선으로 나타낼 수 있습니다. 대표적인 선형 자료구조에는 배열과 연결리스트, 스택과 큐가 있습니다. 배열은 같은 형태의 자료를 연속적인 메모리에 관리하는 자료구조입니다. 그리고 연결리스트는 노드의 선형 집합이며 노드는 하나의 자료와 다른 노드의 위치 정보인 링크로 구성합니다. 스택과 큐는 단순히 자료를 보관하고 꺼내는 동작을 제공하며 스택은 최근에 보관한 자료를 꺼내는 LIFO(Last In First Out), 큐는 먼저 보관한 자료를 꺼내는 FIFO(First In First Out) 구조입니다. 관련 게시글 [..

[안드로이드] 44. Java 다형성 개요

[안드로이드] 44. Java 다형성 개요 상속은 형식을 확장성을 높이고 데이터 신뢰성을 높이는 OOP의 대표적인 특징입니다. 그리고 상속의 특징을 보다 효과적으로 살리기 위해 다형성을 제공합니다. 다형성은 같은 표현의 결과가 다양할 수 있다는 특징을 말합니다. Java 언어에서 제공하는 다형성은 크게 형식의 다형성과 메서드의 다형성이 있습니다. 형식의 다형성은 기반 형식의 변수로 파생 형식의 개체를 참조할 수 있다는 것입니다. 그리고 메서드의 다형성은 개체를 참조하는 변수로 메서드를 사용하면 참조하는 개체 형식에 정의한 메서드가 동작하는 것을 말합니다. 예를 들어 기반 형식으로 음악가가 있고 음악가 형식을 기반으로 파생한 형식으로 피아니스트, 드러머 등이 있을 때 음악가 형식의 변수로 파생한 형식의 개..

[안드로이드] 43. Java 접근 지정자 protected

[안드로이드] 43. Java 접근 지정자 protected 캡슐화를 설명할 때 멤버 필드의 가시성을 지정하는 접근 지정자 중에서 protected 에 관한 설명은 생략하고 상속을 다룰 때 다시 설명하기로 하였습니다. public으로 접근 지정하면 다른 형식에서도 접근할 수 있고 private으로 지정하면 해당 형식에서만 접근할 수 있다는 것은 캡슐화 과정에서 살펴보았습니다. protected로 지정한 멤버는 해당 형식과 이를 기반으로 파생한 형식에서는 접근할 수 있고 그 외의 형식에서는 접근할 수 없게 합니다. 예를 들어 음악가가 연주를 하면 연주 스킬이 향상하게 구현하고자 합니다. 그리고 음악가를 파생한 피아니스트에서 레슨을 받으면 마찬가지로 연주 스킬을 향상하게 구현한다고 가정합시다. 이 때 음악가..

[안드로이드] 42. Java 필드 재정의(override)

[안드로이드] 42. Java 필드 재정의(override) 만약 기반 클래스에 캡슐화한 멤버 필드와 같은 이름으로 파생 클래스에서 멤버 필드를 캡슐화하면 어떻게 될까요? 이 때도 기반 클래스에 캡슐화한 멤버 필드는 무효화하여 파생 형식에서는 직접적으로 사용할 수는 없습니다. 하지만 무효화한 메서드를 호출하여 사용하는 것처럼 super 키워드를 이용하면 무효화 멤버 필드를 사용할 수 있습니다. 실제 프로그래밍에서 메서드 재정의는 많은 곳에서 사용하지만 멤버 필드를 재정의는 개발자에게 혼돈만 가중시켜서 거의 사용하지 않습니다. 이에 관한 사항은 여러분께서 다양한 프로그래밍 과정을 통해 느끼고 판단할 수 있을 것입니다. 예를 들어 음악가의 멤버 필드에 음악가 이름을 name 멤버 필드로 캡슐화하고 음악가를 ..

[안드로이드] 41. Java 메서드 재정의(override)

[안드로이드] 41. Java 메서드 재정의(override) 상속은 비슷한 형식의 공통적인 부분을 기반 형식으로 정의하고 이를 파생하여 다른 부분을 추가하거나 변경하는 문법입니다. 만약 기반 형식을 정의할 때 제공할 메서드는 공통적으로 정의할 수 있지만 메서드 내부에 정의할 구체적 알고리즘이 다를 때는 어떻게 해야 할까요? 이를 위해 OOP 언어에서는 재정의에 관한 문법을 제공하고 있습니다. 재정의란 기반 형식에 정의한 메서드를 파생 형식에서 구체적 행위를 다르게 정의하는 문법으로 파생 클래스에서 재정의할 메서드 앞에 @Override 키워드를 명시하여 정의합니다. 이렇게 파생 클래스에서 기반 형식의 메서드를 재정의하면 기반 형식에 정의한 메서드 이름은 무효화합니다. public class Musici..

[안드로이드] 40. Java super 키워드를 이용한 기반 형식부분 생성

[안드로이드] 40. Java super 키워드를 이용한 기반 형식부분 생성 이처럼 기반 형식에서 확장하여 파생 클래스를 정의하면 파생 클래스 형식 개체를 생성하면 기반 형식부분을 생성한 후에 파생 형식부분을 생성하여 하나의 개체가 만들어집니다. 이러한 이유로 기반 형식에 매개 변수가 있는 생성자만 존재할 때 파생 클래스의 생성자에서는 기반 형식부분을 생성할 때 어떠한 인자를 전달하여 생성해야 하는지 반드시 명시해야 합니다. 이 때 super 키워드를 이용합니다. 이러한 이유로 Java 언어에서는 기반 클래스를 슈퍼 클래스라고도 부릅니다. 그리고 파생 클래스를 서브 클래스라고도 부릅니다. public class Musician { String name; public Musician(String name)..

[안드로이드] 39. OOP - 상속과 다형성 - 상속 개요

[안드로이드] 39. OOP - 상속과 다형성 - 상속 개요 이번에는 OOP의 특징 중에 상속과 다형성에 관하여 살펴봅시다. 상속과 다형성은 캡슐화와 더불어 OOP 언어의 주요 특징입니다. 상속은 유사한 클래스의 공통적인 부분을 기반 형식으로 정의하고 이를 파생하여 세부적인 사항을 추가 및 변경하여 파생 형식을 정의하는 방법입니다. 이러한 특징은 기반 형식을 확장하여 다양한 파생 클래스를 정의할 수 있게 해 줍니다. 그리고 다형성은 파생 형식 개체를 기반 형식의 변수로 참조할 수 있고 멤버 메서드를 호출하면 참조하는 형식의 메서드가 아닌 실제 개체의 메서드를 호출할 수 있게 하여 상속의 장점을 극대화시킵니다. 상속 개요 Java 언어에서는 여러 클래스의 공통점을 기반 클래스에 정의하고 파생 클래스를 정의..

[안드로이드] 38. Java 정적 멤버와 static 키워드

[안드로이드] 38. Java 정적 멤버와 static 키워드 클래스를 정의할 때 멤버 앞에 static 키워드를 명시할 수도 있으며 static 키워드를 명시하면 정적 멤버라고 부릅니다. static 키워드를 명시하지 않은 멤버 필드는 개체(인스턴스라고도 부름)마다 상태를 기억하기 위한 영역을 부여합니다. 하지만 static 키워드를 명시하면 멤버 필드를 캡슐화하면 해당 형식에 상태를 기억하기 위한 영역을 부여하며 정적 멤버 필드라고 부릅니다. 어떠한 곳에 정적 멤버 필드를 사용하는지 예를 들어 볼게요. Unit 클래스를 정의한다고 가정합시다. 그리고 Unit 개체마다 일련 번호가 있고 생성 순서대로 1부터 순차적으로 부여하려고 합니다. 이를 위해서는 가장 최근에 부여한 Unit 개체의 일련 번호를 기..

반응형