ActivePerl 다운로드

https://www.activestate.com/activeperl 에서 다운로드한다.


Download Now를 클릭한다


Download ActivePerl 5.24.2 for Windows (64-bit, x64)를 클릭하여 다운로드한다.


Install 순서

Next 버튼을 클릭한다.


I accept the terms in the License Agreement에 체크 표시를 하고 Next 버튼을 클릭한다.


Location 위치에 ActivePerl 폴더가 만들어진다.

Next 버튼을 클릭한다.


Add Perl to the PATH environment variable은 환경 변수에 Perl의 경로를 추가한다.

Create Perl file extension association은 Perl 파일(.pl)의 연결을 설정한다.

Next 버튼을 클릭한다.


Install 버튼을 클릭하면 설치가 시작된다.

Finish 버튼을 클릭하면 ActivePerl 설치가 완료된다.

'개발자 > Perl' 카테고리의 다른 글

Perl이 보이는 그림책 - Perl 인터프리터 설치하기  (0) 2018.10.09

간단한 HTML 문서 만들기

<!doctype html>

<html>

<head>

<meta charset="utf-8">

<title>내가 처음 만드는 HTML 문서</title>

</head>

<body>

<h1>시간이란..</h1>

<p>내일 죽을 것처럼 오늘을 살고<br>

영원히 살 것처럼 내일을 꿈꾸어라.</p>

<img src="images/first.jpg">

</body>

</html>

웹 브라우저는 웹 문서를 한 줄씩 읽으면서 해석한다. 

웹 문서는 아무리 길더라도 <!doctype>과 <html>, <head>, <body> 네 가지 태그를 이용해 문서의 시작과 끝을 표시한다.


웹 브라우저에서 확인! 

<h1> 태그를 사용한 부분에는 제목이, <p> 태그 부분에는 일반 텍스트 단락이, <img> 태그를 사용한 부분에는 지정한 이미지가 표시된다.


HTML 문서 기본 구조 살펴보기

<!doctype> - 문서 유형을 지정하는 선언문

<!doctype html>


<html> 태그 - 웹 문서 시작을 알리는 태그

<!doctype html>

<html lang="ko">

<head></head>

<body></body>

</html>

<html> 태그에는 lang이라는 속성을 사용해 문서에서 사용할 언어를 지정할 수 있다. 

de - 독일어, en - 영어, fr - 프랑스어, ja - 일본어, ko - 한국어, zh - 중국어

<html> 태그와 </html> 태그 사이에는 문서 정보를 지정하는 <head> 태그와 실제 화면에 보이는 문서 내용을 입력하는 <body> 태그가 포함된다.


<head> 태그 - 브라우저에게 정보를 주는 태그

<head>

<title>문서 제목</title>

<meta charset="utf-8">

<meta name="description" content="여기에 사이트에 대한 짧은 설명을 입력합니다">

</head>

웹 브라우저 화면에는 보이지 않지만 웹 브라우저가 알아야 할 정보들은 모두 <head> 부분에 입력한다. 

문서에서 사용할 외부 파일들도 이곳에서 링크한다.


- <title> 태그 - 문서 제목

<title> 태그에서 지정하는 내용은 거의 모든 웹 브라우저의 제목 표시줄에 표시되고 해당 페이지를 방문하는 방문자나 검색 엔진은 제목 표시줄의 제목을 보고 페이지 전체의 내용을 추측한다.


- <meta> 태그 - 문자 인코딩 및 문서 키워드, 요약 정보

<meta> 태그에서 가장 중요한 부분은 문자 인코딩을 지정하는 것이다. HTML5에서는 모든 언어를 표시할 수 있는 utf-8 방식을 사용한다.

또한 <meta> 태그를 이용해 문서에 대한 간단한 설명을 지정할 수 있는데 이렇게 지정한 짧은 설명은 검색 결과에 사이트 설명으로 표시된다.

* 국내 검색 사이트에서는 각 포털 내의 블로그를 중심으로 검색하기 때문에 <meta> 태그가 제 역할을 못한다. 구글 검색 엔진에서 이해할 수 있는 <meta> 태그에 대한 자세한 설명은 https://support.google.com/webmasters/answer/79812?hl=ko를 참고한다.


이외에도 <head> 태그 안에는 스타일 시트를 사용하기 위한 <style> 태그와 <link> 태그 등이 사용된다.


<body> 태그 - 실제 브라우저에 표시될 내용

<body>

<h1>시간이란...</h1>

<p>내일 죽을 것처럼 오늘을 살고<br>

영원히 살 것처럼 내일을 꿈꾸어라</p>

<img src="images/first.jpg">

</body>

대부분의 태그가 <body> 태그와 </body> 태그 사이에서 사용하는 태그들이다.


변수(variable)

'변하다'의 변과 '데이터'를 의미하는 수. 즉, 변하는 데이터
프로그래밍적 의미로는 데이터를 담을 수 있는 공간. 해당 공간의 담긴 값은 소스코드에 따라 변할 수 있다.


변수명 규칙
대소문자가 구분되며 길이 제한이 없음
예약어를 사용하면 안됨

- 예약어 : abstract, default, if, package, this, assert, do, goto, private, throw, boolean, double, implements, protected, throws, break, else, import, public, transient, byte, enum, instanceof, return, true, case, extends, int, short, try, catch, false, interface, static, void, char, final, long, strictfp, volatile, class, finally, native, super, while, const, float, new, switch, continue, for, null, synchronized

숫자를 사용해도 되지만 숫자로 시작하면 안됨
특수문자는 _(언더바)와 $만 허용
낙타표기법 - 처음은 소문자 구분자 단어의 첫 글자를 대문자
한글 이름 변수도 가능하지만 쓰지 않기를 권장
변수명만 보고도 데이터를 예측할 수 있도록 의미있는 이름으로 작성



자료형 - 변수 선언

자료형 변수명 ; : 메모리 상에 데이터를 저장할 수 있는 공간을 할당하는 것


boolean bool;    // boolean 데이터 타입을 가지는 bool이라는 변수


논리형 : true 또는 false만 표현하는 데이터형 - boolean (1Byte)


byte bnum;    // byte 데이터 타입을 가지는 bnum이라는 변수

short snum;    // short 데이터 타입을 가지는 snum이라는 변수

int inum;        // int 데이터 타입을 가지는 inum이라는 변수

long lnum;      // long 데이터 타입을 가지는 lnum이라는 변수


정수형 : 하나의 정수값을 표현하는 데이터형

- byte (1Byte) : -128 ~ +127
- short (2Byte) : -32768 ~ +32768
- int (4Byte) : -2147483648 ~ +2147483647
- long (8Byte) : -2^63 ~ +2^63-1


float fnum;        // float 데이터 타입을 가지는 fnum이라는 변수

double dnum;    // double 데이터 타입을 가지는 dnum이라는 변수


실수형 : 하나의 실수값을 표현하는 데이터형

- float (4Byte)
- double (8Byte)


char ch;    // char 데이터 타입을 가지는 ch라는 변수


문자형 : 한 개의 문자를 저장하는데 사용 - char (2Byte) : 0 ~ 65,535 (유니코드문자)


String str;    // String 데이터 타입을 가지는 str이라는 변수


문자열형 : 하나의 문자열을 저장하는데 사용

- String (참조형, 4Byte) : 자바에서 만든 특수한 형태의 자료형으로 데이터가 저장되어 있는 주소를 저장


※ 데이터 오버플로우 : byte 형에서 127+1을 하면 범위를 초과하는 경우를 뜻하는데 허용범위 최소값인 -128이 된다.



변수 초기화

생성된 변수의 값을 대입


int age = 20;

String ch = "기차";


생성과 동시에 값 대입


int age;

age = 20;


String ch;

ch = "기차";


생성 후 값 대입


int firstNum = 20;

int secondNum = 10;

int result;


result = firstNum + secondNum;

System.out.println(firstNum + "+" + secondNum + "=" + result);

result = firstNum - secondNum;

System.out.println(firstNum + "-" + secondNum + "=" + result);

result = firstNum * secondNum;

System.out.println(firstNum + "*" + secondNum + "=" + result);

result = firstNum / secondNum;

System.out.println(firstNum + "/" + secondNum + "=" + result);



minimelody.tistory.com/130



Project 만들기 : New - Java Project - 프로젝트명 입력 - Finish
프로젝트 : 여러개의 패키지가 존재하는 공간으로 하나의 작품. 프로젝트명은 낙타 표기법 - 소문자로 시작, 구분마다 첫글자 대문자



Package 만들기 : New - package - 패키지명 입력 - Finish
패키지 : 프로젝트 안에 존재하는 하나의 디렉토리로 다양한 클래스 파일이 존재. 패키지명은 2~3단계 형식으로 모두 소문자



Class 만들기 : New - class - 클래스명 입력 - 메인 메소드 필요시 체크 - Finish
클래스 : 실제 소스코드가 들어 있는 파일. 클래스명은 파스칼 표기법 - 대문자로 시작, 구분마다 첫글자 대문자



소스코드 작성

package org.kh.java;    // 포함되는 패키지명


public class SampleMain {    // 해당 클래스명


public static void main(String[] args) {    // 실행용 main 메소드

System.out.println("Hello Java");        // 출력 기능을 가진 메소드


}


}


package 선언 : package org.kh.java;

- 서로 관련 있는 클래스들끼리 그룹으로 묶어서 효율적으로 관리

- 같은 이름의 클래스라도 다른 패키지에 각각 존재하는 것도 가능

- 클래스의 실제 이름은 패키지 명을 포함

import 선언 : import java.util.*; import java.lang.*; - 포함 선언을 하지 않아도 자바 가상머신에 의해 자동 포함처리되는 패키지명

- 서로 다른 패키지에 있는 클래스를 참조

- 소스 파일에 여러 번 선언이 가능

class 작성부 : public class SampleMain {    }

- main method 작성 : public static void main(String[] args) - main() 메소드의 head 부분

{    }

- 사용자 정의 method 작성 : public void 메소드명(매개변수)
- 주석 작성 : 소스코드의 내용을 설명하기 위한 문구를 넣을 때 사용 → 주석처리 되어있는 부분은 컴파일시 소스분석 하지 않는다

// : 한줄만 주석처리할 때 사용
/*    */ : 한줄이상의 범위를 주석처리할 때 사용


컴파일 (Ctrl + F11)



실행용 클래스

package product.run;


import product.model.vo.Product;


public class TestProduct {

public static void main(String[] args)

{

// Product의 printProduct 실행

Product pr = new Product();

pr.printProduct();

}

}


해당 프로그램을 실행하기 위한 용도의 클래스
기능제공 클래스를 사용하기 위한 클래스
main 메소드가 포함되어 있는 클래스


기능제공 클래스

package product.model.vo;


public class Product {

public void printProduct()

{

// 제품소개글 출력

System.out.println("TV, 42인치, 100만원");

}

}


오직 기능을 제공하기 위한 클래스
main 메소드가 포함되어 있지 않은 클래스




package com.kh.edu;


import java.util.Date; // 오류 클릭하여 자동 생성! 자바에서 지원하는 API 중 java.util.Date 클래스 이용


public class TestJavaApi {

public static void main(String[] args)

{

System.out.println(new Date()); // 날짜 출력

}

}



'' 카테고리의 다른 글

자바 프로젝트, 패키지, 클래스  (0) 2018.02.16

컴퓨터 프로그램

<변수 선언> 자료를 저장할 변수(기억공간)를 할당받아 변수에 값을 저장하고, 

<대입문 : 변수 = 데이터;> 계산을 통해 새로운 값으로 수정해가면서 변수에 원하는 결과값이 저장되게 하는 것

- 구성 요소 : 상수, 변수, 연산자, 대입문, 선언문, 제어문, 함수 호출문


상수 : 데이터 값 자체

변수(variable) : 상수를 저장하는 기억공간

대입문 형식 : 변수에 상수(데이터)를 저장하는 데 사용하는 명령문



1비트(bit) : 전구 1개. 0 또는 1 두 가지 정보를 저장할 수 있는 최소의 자료 저장 단위

1바이트(byte) : 8비트(bit) 가지 데이터 표현 가능, 문자 1개를 표현하는데 사용


1KB = B

1MB = KB

1GB = MB

1TB = GB



C언어 자료 종류 (자료형 이름 - 기억공간 크기)

정수(int / 4B) : 소수점이 없는 숫자

실수(double / 8B) : 소수점이 있는 숫자

문자(char / 1B) : ''로 묶은 문자 1개

문자열 : ""로 묶은 1개 이상의 문자 (한글 1자는 최소 2바이트가 필요하므로 문자 상수가 못 됨)

* float, unsigned int 등의 자료형은 심화에서 확인!


예약어(reserved word, keyword) : C언어에서 특별한 의미로 사용하는 단어

- char, float, double, if, else, switch, case, default, return, break, int, for, while, do, continue, goto, void, sizeof, struct 등

- 식별자로 사용할 수 없다

- printf 등 C언어에서 제공하는 라이브러리 함수명은 예약어가 아니다. 단, 식별자로 사용할 수 있지만 함수 원래의 기능이 사라진다


식별자(identifier) : 변수명, 배열명, 함수명, 구조체명. 프로그램에서 이름으로 사용하는 것의 총칭

- A~Z, a~z, 0~9, 한글, 특수문자는 _(밑줄)만, 대/소문자 구별

- 첫 글자 숫자, 중간에 빈칸, 예약어는 안 된다

 

Front-end Developer

웹사이트 = 집

HTML 파일 = 구조. 벽이 어디 배치될지 어느 방이 거실이고 어느 방이 부엌이고 어떤 방이 침실인지

CSS 파일 = 스타일. 카펫은 무슨 색인지 여러분이 집에 어떤 장식들을 했는지 벽이 무슨 색인지

JavaScript 파일 = 상호작용. 차고 문 개폐기나 텔레비전 리모컨 등 집의 구성 요소들을 변화


Exploring the Web

웹브라우저 구글 크롬에는 훌륭한 개발자 도구(Ctrl + Shift + I)가 포함되어 있습니다. 이것은 실제 코드 그 자체는 아니고 브라우저가 해석에 따른 페이지 구조 입니다. 코드 라인 왼쪽에 있는 세모를 클릭하면 구조가 확장되고 트리 구조 내부로 계속 들어갈 수 있습니다. 오른쪽에는 Styles라고 불리우는 분리된 패널이 있는데 여기에는 다른 종류의 정보가 포함되어 있습니다. 


구조의 모든 요소들이 페이지에 보였나요? No

하이라이트 된 모든 요소가 직사각형이었나요? Yes

구조 깊숙히 탐색해 봤다면 페이지에 있는 텍스트와 똑같은 걸 찾을 수 있었나요? Yes


Page Structure


옆쪽 삼각형은 HTML 태그입니다. 각각에는 여는 태그와 닫는 태그가 있습니다. 이 안에는 간단히 텍스트이거나 또 다른 엘리먼트일 수 있습니다.


Visual Styling


오른쪽에 있는 스타일 부분을 보면 페이지의 각각의 엘리먼트에 해당하는 스타일을 볼 수 있습니다. 

컴퓨터 시스템은 대게 네 가지 구성 요소인 하드웨어, 운영체제, 응용 프로그램, 사용자로 구분할 수 있다.

운영체제는 다양한 사용자를 위해 다양한 응용 프로그램간의 하드웨어 사용을 제어하고 조정한다.

 - 하드웨어는 중앙 처리 장치(CPU), 메모리 및 입출력(I/O) 장치로 구성되어 기본 계산용 자원을 제공한다.

 - 응용 프로그램인 워드 프로세서, 스프레드시트, 컴파일러, 웹 브라우저 등 사용자의 계산 문제를 해결하기 위해 자원이 어떻게 사용될지를 정의한다.


또한 컴퓨터 시스템이 하드웨어, 소프트웨어 및 데이터로 구성되어 있다고 볼 수 있다. 

운영체제는 컴퓨터 시스템이 동작할 때 이들 자원을 적절하게 사용할 수 있는 방법을 제공한다. 


운영체제 (Operating System)

컴퓨터는 토스터, 자동차, 선박, 우주여행선, 가정 및 사업체에 존재한다. 컴퓨터는 게임기, 음악 연주기, 및 산업제어 시스템의 기반이 된다. 컴퓨터의 역사는 짧지만 급격히 발전해 왔다. 컴퓨팅은 처음 무엇을 할 수 있을지 알기 위한 실험으로 시작했으나 곧바로 암호 깨기와 탄도 계산과 같은 군사용 및 인구조사 계산과 같은 정부 업무 등의 고정 목적 시스템으로 전용되었다. 

이들 초기의 컴퓨터들이 범용의 다기능 대형컴퓨터로 발전하였으며 그즈음 운영체제가 탄생하였다. 1960년대에 무어의 법칙(Moore's Law)은 집적회로의 트랜지스터 수가 매 18개월마다 배가할 것이라고 예측했으며 이 법칙은 지켜져 왔다. 컴퓨터는 기능이 확대되고 크기가 작아졌으며 용도가 다양해졌고 다양한 운영체제가 등장하였다.

운영체제가 존재하는 이유는 운영체제가 유용한 컴퓨터 시스템을 만드는 과정에서 발생하는 문제점을 해결하기 위한 적절한 방법이기 때문이다. 컴퓨터 시스템의 근본 목적은 사용자 프로그램을 실행하고, 사용자 문제의 해결을 보다 쉽게 해주는 데 있다. 이러한 목적을 위해 컴퓨터 하드웨어가 제작된다. 순수 하드웨어만으로는 사용이 그렇게 쉽지 않기 때문에, 응용 프로그램이 개발되었다. 이들 다양한 프로그램들은 입출력 장치의 통제와 같은 공통적인 연산을 필요로 한다. 여기에 자원을 제어하고 할당하는 공통 기능을 하나의 소프트웨어로 통합한 것이 운영체제이다.

- 컴퓨터 하드웨어를 관리하는 프로그램

- 응용 프로그램을 위한 기반을 제공하며 컴퓨터 사용자와 컴퓨터 하드웨어 사이에서 중재자 역할


어느 부분이 운영체제에 속하고 어느 부분이 속하지 않는 자에 대한 보편적으로 인정되는 정의 또한 존재하지 않는다. 단순한 관점으로는 사용자가 '운영체제'를 주문했을 때 판매업자가 실어 보내는 모든 것을 포함한다는 것이지만, 포함되는 기능은 시스템에 따라서 크게 변한다. 일반적인 정의로 운영체제는 컴퓨터에서 항상 수행되는 프로그램으로 일반적으로 커널이라 불린다.

대형 컴퓨터의 운영체제는 주로 하드웨어의 이용을 최적화하는 데 주안을 두고 있다. 

퍼스널 컴퓨터 운영체제는 복잡한 게임, 비즈니스 응용, 그리고 이들 중간에 위치하는 모든 응용을 지원한다. 

휴대용 컴퓨터 운영체제는 사용자가 프로그램을 수행하기 위해 컴퓨터와 쉽게 인터페이스 할 수 있는 환경을 제공한다.

 - 애플의 iOS와 구글의 안드로이드는 핵심 커널과 더불어 데이터베이스, 멀티미디어 및 그래픽스를 제공한다 

어떤 운영체제는 일반인들이 사용하기에 편리하도록 설계되었고, 일부는 효율성에 주안을 두고 설계되었고 일부는 이들의 조합으로 설계되었다. 


사용자 관점 (User View)

사용되는 인터페이스에 따라 달라진다. 

대부분의 컴퓨터 사용자는 모니터, 키보드, 마우스 및 시스템 유니트로 구성된 PC 앞에서 작업을 한다. 이러한 시스템은 한 사용자가 자원을 독점하도록 설계되었으며 목표는 사용자가 수행하는 작업을 최대화하는 것이다. 이러한 경우 운영체제는 대부분 사용의 용이성을 위해 설계되고 성능에 약간 신경을 쓰고 다양한 하드웨어와 소프트웨어 자원이 어떻게 공유되느냐에는 전혀 신경을 쓰지 않는다. 한 사용자가 사용하기에 적합하도록 최적화 된다.

다른 경우 대형 컴퓨터나 미니 컴퓨터에 연결된 터미널에 앉아 있다. 이들 사용자들은 자원을 공유하며 정보를 교환할 수 있다. 이 경우 운영체제는 자원 이용을 극대화하도록 설계되어 있어 모든 가용 CPU 시간, 메모리 및 입출력은 효율적으로 사용되며 각 개인의 자신의 정당한 몫만 사용한다.

또 다른 경우 워크스테이션과 서버의 네트워크에 연결된 워크스테이션에 앉아 있다. 이들 사용자들은 자신이 맘대로 할 수 있는 전용 자원을 갖지만 이들은 또한 네트워킹과 서버-파일, 계산 및 프린트 서버를 공유한다. 따라서 운영체제는 개인의 사용 용이성과 자원 이용 간에 적절히 조화를 이룬다.

최근 스마트폰이나 태블릿 같은 다양한 휴대용 컴퓨터들이 이용되고 있다. 이들 장치의 대부분은 개인 사용자들을 위한 독립형 장치들이다. 종종 이들은 전화망이나 무선 기술을 통해 네트워크에 연결된다. 점점 이들 휴대용 장치들은 이메일이나 웹 브라우징을 위해 컴퓨터를 사용하는 사람들에게 데스크톱 및 랩톱 컴퓨터를 대체하고 있다. 휴대용 컴퓨터의 사용자 인터페이스는 터치 스크린을 사용하며, 이를 통해 사용자들은 키보드나 마우스 대신 손가락으로 스크린을 누르거나 밀어 시스템과 상호 작용한다.

일부 컴퓨터는 사용자 관점이 존재하지 않거나 매우 작은 경우도 있다. 가전제품이나 자동차 내의 내장형 컴퓨터는 숫자 키패드를 가지고, 상태를 보이기 위해 표시등을 켜고 끌 수 있지만 이들 컴퓨터나 운영체제는 사용자의 개입 없이 작동하도록 설계되어 있다.

시스템 관점 (System View)

운영체제는 하드웨어와 가장 밀접하게 연관된 프로그램이다. 따라서 우리는 운영체제를 자원 할당자(resource allocator)로 볼 수 있다. 컴퓨터 시스템은 문제를 해결하기 위해 요구되는 여러 가지 자원들 즉, CPU 시간, 메모리 공간, 파일 저장 공간, 입출력 장치 등을 가진다. 운영체제는 이들 자원의 관리자로서 동작하며, 작업을 위해 특정 프로그램과 사용자에게 필요한 자원을 할당한다. 자원에 대해 서로 상충될 수도 있는 많은 요청이 있기 때문에, 운영체제는 컴퓨터 시스템을 효율적이고 공정하게 운영할 수 있도록 어느 요청에 자원을 할당할지를 결정해야 한다. 

운영체제의 다른 관점은 여러 가지 입출력 장치와 사용자 프로그램을 제어할 필요성을 강조한다. 운영체제는 제어 프로그램(control program)이다. 제어 프로그램은 컴퓨터의 부적절한 사용을 방지하기 위해 사용자 프로그램의 수행을 제어한다. 운영체제는 특히 입출력 장치의 제어와 작동에 관여한다.


C언어의 문법과 관련해서 알고 있다고 가정하는 부분

  • 구조체를 정의할 줄 알고 구조체 대상의 typedef 선언을 할 줄 안다.
  • malloc 함수와 free 함수를 사용할 줄 알고, 이는 메모리의 동적 할당과 관련 있음을 이해한다.
  • 포인터 변수의 선언과 포인터 연산에 부담이 없다.
  • 헤더파일이 필요한 이유를 이해한다.
  • 헤더파일을 정의할 줄 알고 헤더파일에 들어가야 할 것들이 무엇인지 알고 있다.
  • 헤더파일의 정의에 사용되는 매크로 #ifndef ~ #endif 의 의미를 알고 있다.
  • 하나의 프로그램을 둘 이상의 소스파일과 헤더파일에 나누어 담을 줄 안다.
  • 재귀함수의 동작방식을 안다. 그리고 재귀함수와 관련된 아주 간단한 예제는 분석할 수 있다.

자료구조란 무엇인가?

"프로그램이란 데이터를 표현하고, 그렇게 표현된 데이터를 처리하는 것이다."

'데이터의 표현'은 '데이터의 저장'을 포함하는 개념이다. 
'데이터의 저장'을 담당하는 것이 바로 자료구조이다. 


선형 자료구조는 그 이름이 의미하듯이 자료를 표현 및 저장하는 방식이 선형(linear)이다. 선형이라는 단어의 뜻 그대로 '선의 형태'로 이해하면 된다. 

즉, 선형 자료구조는 데이터를 선의 형태로 나란히 혹은 일렬로 저장하는 방식이다.


반면 비선형 자료구조는 그 이름이 의미하듯이, 데이터를 나란히 저장하지 않는 구조이다. 


자료구조와 알고리즘

자료구조가 '데이터의 표현 및 저장방법'을 뜻한다면, 알고리즘은 이렇듯 표현 및 저장된 데이터를 대상으로 하는 '문제의 해결 방법'을 뜻한다. 
자료구조와 알고리즘은 밀접한 관계를 갖는다. 자료구조가 결정되어야 그에 따른 효율적인 알고리즘을 결정할 수 있기 때문이다. 

"여기 상자가 제법 많이 쌓여 있지요? 이 상자들 중 어딘가에 넣어 둔 머그컵을 찾으셔야 합니다."

위의 문장에서 '쌓여있는 상자'는 자료구조이다. 그렇다면 이 상자들을 대상으로 머그컵을 찾는 알고리즘은 어떻게 구성해야겠는가?
상자가 쌓여 있으니 가장 위에 있는 상자부터 순서대로 내려서 찾아봐야 할 것 아닌가? 

"자료구조에 따라서 알고리즘은 달라집니다."
"알고리즘은 자료구조에 의존적입니다."


+ Recent posts