728x90
반응형

https://www.oracle.com/kr/database/technologies/oracle-database-software-downloads.html#19c

 

Database Software Downloads | Oracle 대한민국

Oracle Database Express Edition Previous Database Release Software Oracle Database 10.2, 11.x, 12.x, and 18c are available as a media or FTP request for those customers who own a valid Oracle Database product license for any edition. To request access to t

www.oracle.com

 

 

1. 위의 오라클 공식 홈페이지에 접속하여 자신의 운영체제에 맞는 압축파일을 다운로드 한다.

(오라클 계정으로 로그인 해야만 다운로드 가능)

 

 

 

 

 

 

 

 

2. 다운 받은 압축파일을 풀고 setup 설치 파일을 실행한다.

 

 

단일 인스턴스 데이터베이스 생성 및 구성 선택 후 [다음]

 

 

 

 

 

 

- 데스크톱 클래스(D): 데이터베이스를 혼자 사용하는 경우 선택

- 서버 클래스(S): 네트워크 상의 여러 PC들과 네트워킹을 통해 DB를 사용할 때 선택

 

설치 용도가 개인 연습용이라면 데스크톱 클래스를 설치하고, 네트워크를 통해 여러 PC와 데이터를 주고 받는 작업을 할 경우 서버 클래스를 설치 하면 된다. 나는 서버 클래스로 설치를 진행

 

 

 

 

 

 

표준 설치 선택 후 [다음]

고급 설치를 통해 세밀한 설정을 할 수 있지만, 표준 설치로 진행해도 괜춘

 

 

 

 

 

 

가상 계정 사용 선택 후 [다음]

 

 

 

 

 

 

오라클을 삭제해야할 경우가 종종 생기는데 경로는 수정해버리면 해당 경로를 기억하고 있어야 하기 때문에 설치 경로는 특별한 경우가 아니라면 수정하지 말고 기본 설정대로 하는게 좋음. 근데 난 경로 수정함.

- admin 비밀번호는 따로 기록해두기!

 

 

 

 

 

 

 

필요 조건 검사 수행 > 요약 확인 후 [설치] 실행!

 

 

 

 

 

 

 

 설치 끝

 

 

 

 

 

 

 

3. 간단하게 cmd를 통해 설치 확인

 

 

cmd 창에서 sqlplus로 오라클 접속되면 잘 설치된거임

728x90
반응형
728x90
반응형

 

1. 웹 관련 용어

 

✅ 웹

 

🔸웹의 의미

  • 팀 버너스 리가 제안한 인터넷 기반의 정보 공유 서비스
    • = World Wide Web, WWW, W3
    • 인터넷 상에 분산되어 존재하는 다양한 정보를 통일된 방법으로 찾아볼 수 있게 하는 정보 서비스
  • 인터넷 기반의 전 세계적인 정보 공유 공간
    • 분산된 웹 서버에 존재하는 하이퍼텍스트(hypertext) 문서들이 서로 연결된 시스템

 

🔸하이퍼텍스트

  • 웹 상에 존재하는 문서 형태로서 텍스트 외에 이미지, 동영상 등의 멀티미디어 요소를 포함 → 구조화된 문서
  • 하이퍼링크(hyperlink)를 통해 다른 하이퍼텍스트와 연결됨 = 문서와 문서가 연결된 구조
  • 웹 브라우저를 이용해 하이퍼텍스트를 볼 수 있음
  • HTML로 표현되며 HTTP 프로토콜을 사용하여 전송됨

 

🔸W3C

  • World Wide Web Consortium의 약자
  • 국제 웹 표준화 기구 => HTML, HTTP, XML 등의 웹 관련 기술 관리

 

 

 

 

 

✅ 웹 문서

 

1. 정적 웹 문서

출처: 방송통신대학교

  • 정적인 텍스트로 문서의 내용이 바뀌지 않음
  • 클라이언트가 서버에게 정적 웹 문서를 요청하면, 서버는 해당 문서를 찾아서 전달함
  • 정적 웹 문서를 요청하면 항상 동일한 결과가 전달됨

 

 

 

2. 동적 웹 문서

출처: 방송통신대학교

  • 동적 웹 문서를 사용하여 최종 결과가 동적으로 만들어짐 => 클라이언트 측 처리와 서버 측 처리 방식이 있음
  • JSP는 동적 웹 문서를 작성하는 기술

 

 

 

 

 

 

 

 


2. 웹 애플리케이션의 실행과 구성 요소

 

  • 웹 애플리케이션: 웹에서 실행되는 응용 프로그램
  • 웹 애플리케이션의 구분
    1. 클라이언트 측 실행 / 서버 측 실행
    2. 컴파일 방식 / 비컴파일 방식

 

 

 

🔸웹 서비스 제공과 구성 요소

출처: 방송통신대학교

  • 웹 클라이언트(브라우저): 웹 브라우저는 웹 서버에 요청을 보내고 응답 결과를 출력
  • 웹 서버: 클라이언트의 요청을 처리하도록 프로세스를 관리하고 요청을 처리한 결과를 클라이언트에게 보냄
  • 웹 애플리케이션 서버(WAS, 웹 컨테이너): 웹 애플리케이션의 실행 환경으로 JSP 프로그램을 실행시키고 결과를 웹 서버에 전달
  • 데이터베이스: 웹 서비스 수행에 필요한 데이터를 저장하고 제공

 

 

 

 

 

✅ 웹 애플리케이션과 실행 위치

클라이언트 측 실행 서버 측 실행
- 웹 문서에 동적 요소를 포함 시켜 클라이언트에게 전송
- 웹 브라우저가 해석하여 페이지를 생성
- 애플릿, Javascript, 플래시 
- 단점: 보안의 문제
- 서버에서 실행되어 응답 문서를 동적으로 생성
- 웹 애플리케이션 서버가 수행한 결과가 브라우저에 전송됨
- 서블릿, JSP, ASP, PHP, CGI 방식
- 단점: 서버의 부담

 

 

 

 

 

✅ 웹 애플리케이션의 구현 방식

컴파일 방식 비컴파일 방식
- 컴파일 과정을 통해 실행 파일이나 바이트 코드가 만들어져 사용됨
- Java, 서블릿, JSP
- Perl, C, C++을 이용한 *CGI 방식
- 매 요청마다 스크립트를 해석하여 실행하는 방식
- Javascript는 클라이언트에서 실행되는 스크립트 언어

 

 

 

🔸CGI(Common Gateway Interface)

출처: 방송통신대학교

  • 동적으로 웹 페이지를 생성하기 위한 방식 중 하나
    • 고급 언어 프로그램을 실행시켜 HTML 코드를 생성한 후 전달함

출처: 방송통신대학교

  • 웹 서버가 응용 프로그램을 직접 호출
    • 클라이언트의 요청이 있으면 해당 프로그램을 실행시키기 위해 개별 프로세스를 생성함 → 동일한 CGI를 요청해도 요청의 개수만큼 프로세스를 생성하므로 웹 서버에 부하를 줌

 

 

 

🔸WAS(Web Application Server)

출처: 방송통신대학교

  • 서버의 성능을 개선하기 위해 웹 서버의 기능을 분리
  • 웹 서비스의 처리를 위해 동적 페이지를 만들거나 비지니스 로직을 처리(동적 웹 서비스를 담당하는 서버)
  • 웹 애플리케이션을 실행하고 관리하는 별도의 전담 프로그램
    • 모든 요청에 대해 매번 프로세스를 생성하지 않고, 하나의 자바 가상 기계 내에서 수행함
    • 요청을 처리하기 위해 스레드를 생성
  • 웹 페이지 생성 외에도 많은 기능을 수행: API제공, 부하 균형(로드 밸런싱), 고장 조치 등

 

 

 

🔸웹 서버

출처: 방송통신대학교

  • 클라이언트로부터 요청을 받고 결과를 전달하는 기능
    • 예) Apache HTTP Server, IIS, NginX
  • HTTP 프로토콜을 사용하여 클라이언트와 통신함
    • HTTP는 클라이언트와 웹 서버 간에 웹 문서를 전송하기 위한 통신 규약이며 웹 서버를 HTTP 서버라고 함
  • 구체적인 기능
    • 클라이언트가 요청한 웹 문서를 찾아 전달
    • 클라이언트 요청에 대한 기본적 사용자 인증을 처리
    • 문제가 있으면 정해진 코드 값으로 응답
    • 프로그램 실행 요청이 있으면 처리 후 그 결과를 전달

 

 

 

 

 

 

 


3. JSP와 웹 컨테이너

 

✅ 서블릿

출처: 방송통신대학교

  • Server + Applet = Servelt
    • 웹 페이지를 동적으로 생성하기 위한 서버 측 Java 클래스
    • Java 언어에 기초한 웹 프로그램 개발 기술
  • Java 언어로 서블릿 클래스를 만들고, 컴파일된 바이트 코드를 서버에 탑재하여 웹 서비스를 제공 → 소스를 수정하면 다시 컴파일하여 서버에 탑재해야 함

 

 

 

 

 

✅ JSP(JavaServer Pages)

JSP의 처리과정

  • 서블릿 대신에 사용할 수 있는 스크립트 형식의 언어 => HTML 페이지 내에 삽입됨
  • JSP 페이지는 서블릿으로 변환됨
    • 웹 애플리케이션 서버가 자동으로 JSP페이지를 변환하고 컴파일하여 웹 서비스를 제공
  • Java EE를 구성하는 기술 중 하나 (예:JSTL)
  • 특징
    • 스크립트 언어로 HTML 페이지에 삽입됨
    • Java 언어의 특성을 활용
    • 표현 언어, 표현식, 액션 태그 등의 스크립트적 요소를 제공
    • 다양한 개발 환경이 오픈 소스로 제공됨
    • JSP는 오픈 소스 형태로 운영되므로 다양한 기술이 지원됨
    • JSP 기술은 플랫폼에 독립적(.NET 기술은 개발과 운용 환경에 제약이 있음)

 

 

 

 

 

✅ 웹 컨테이너(=WAS)

  • 웹 컴포넌트를 저장하고 서블릿의 생명주기를 관리 => 클라이언트의 서블릿 요청을 실행시키는 역할
  • 서블릿 컨테이너라고도 함
    • Java로 구현된 서블릿 엔진(서블릿 실행 환경)
    • JSP를 서블릿으로 변환하는 기능을 포함
  • Tomcat, WildFly, WebLogic, WebSphere, JBoss 등

 

 

 

 

 

🔸웹 서버에서 서블릿이 실행되기 위한 환경

  • 웹 서버
  • 자바 실행 환경(JDK)
  • 서블릿 컨테이너(예: Tomcat)

 

 

 

 

 

🔸JSP 컨테이너

  • JSP 페이지를 서블릿 프로그램으로 변환
  • 대부분의 서블릿 컨테이너는 JSP컨테이너 기능을 포함
  • JSP 컨테이너 자체가 서블릿으로 구현되어 있으며 서블릿 컨테이너에 의해 실행됨

 

 

 

 

 

 

 


4. HTTP 프로토콜

 

✅ HTTP 프로토콜

  • 웹 서버와 클라이언트가 통신하는 규약으로 TCP 프로토콜에 기초한 애플리케이션 계층 프로토콜
  • Connection oriented & Stateless 특성
    • 요청을 위해 접속을 해야 함
    • 서버가 응답한 후에 서버는 클라이언트의 상태를 유지하지 않음
    • 웹 서버의 부담이 줄어드나 상태 관리를 위해 쿠키 세션 등이 필요
  • HTTP 요청과 응답 절차
    • 연결 설정 → 요청 메세지 전송 → 응답 메세지 전송 → 연결 끊기

 

 

 

 

 

 

✅HTTP 요청 메세지 구조

 

1. 시작 라인: 요청 방식, URI, 버전 번호

  • GET: 웹 서버에게 요청 대상에 대해 처리 방식을 지정
  • /index.html: 서버에 존재하는 파일의 URI
  • HTTP/1.1:HTTP의 버전

 

2. 요청 헤더

  • 한 라인에 하나씩 헤더 정보를 기술
  • 각 라인은 "헤더필드이름:값" 형식으로 구성됨
  • 요청 헤더의 끝에 공백 라인을 둠

예) 요청 헤더

3. 요청 메세지 몸체

  • POST 요청 방식에서만 의미있음
  • HTML 폼에서 작성한 데이터를 POST 방식으로 전송할 때 사용

 

 

 

 

 

✅ HTTP 응답 메세지 구조

  • 시작 라인, 응답 헤더, 응답 몸체로 구성
    • 시작 라인 구성: HTTP 버전, 서버의 응답 코드, 설명

출처: 방송통신대학교

🔸서버의 응답 코드와 설명

200 OK 클라이언트 요청이 성공적으로 끝남
400 Bad Request 잘못된 요청
401 Unauthorized 인증 오류
403 Forbidden 사용자 허가 모드 오류
404 Not Found 요청한 문서가 존재하지 않음
405 Method Not Allowed 요청한 방식을 지원하지 않음
500 Internal Sever Error 서버에서의 실행 오류
503 Server Unavailable 일시적으로 요청을 처리할 수 없음

 

 

 

 

 

728x90
반응형

'KNOU > JSP프로그래밍' 카테고리의 다른 글

[JSP프로그래밍] 2. 개발 환경 설정하기  (0) 2022.10.30
728x90
반응형

 

1. 영역의 개요

 

✅ 변수의 영역(scope)

출처: 한국방송통신대학교

  • 프로그램에서 변수를 사용할 수 있는 범위
  • 변수에 값을 대입하거나 값을 읽어올 수 있는 범위
  • 영역의 시작: 변수 선언 위치
  • 수명의 시작
    • 수명: 변수가 메모리를 할당받는 기간 
    • 동적 바인딩: 변수 선언 위치
    • 정적 바인딩: 프로그램이 수행되는 시점

 

 

 

 

 

✅ 블록(block)

출처: 한국방송통신대학교

  • 프로그램 문장들의 묶음
  • 영역을 구분해주는 단위
  • 블록의 표현이나 적용 기준은 언어별로 다름
    • Algol 60: 복합문(begin ~ end)
    • C, C++, Java: 복합문({~}), 함수, 클래스
    • Pascal: 주 프로그램, 서브 프로그램 → 복합문(begin~end)는 블록이 아님
  • 블록 안에서 변수 선언이 가능 (※해당 변수 영역의 끝: 블록이 끝나는 지점)

 

 

 

 

 

✅ 블록과 변수

출처: 한국방송통신대학교

  • 지역변수(local variable): 블록 안에서 선언된 변수
  • 비지역변수(non-local variable): 블록 밖에서 선언되었지만 블록 안에서 사용될 수 있는 변수
  • 지역변수와 비지역변수는 상대적인 개념

 

 

 

 

 

✅ 참조 환경(reference environment)

출처: 한국방송통신대학교

  • 프로그램의 한 위치에서 사용할 수 있는 모든 변수의 모음 
  • 해당 위치의 모든 지역변수와 비지역변수로 구성
  • 위 그림은 정적 영역 규칙을 적용(동적 영영 규칙을 적용할 경우 다른 결과를 얻을 수 있음)

 

 

 

 

 

 


2. 영역 규칙

 

✅ 영역 규칙(scope rule)

  • 변수의 참조 위치를 결정하는 방법
    1. 정적 영역 규칙
    2. 동적 영역 규칙
  • 자유변수(free variable)
    • 현재 블록에서 선언되지 않고 사용하려는 변수
    • 영역 규칙에 따라 참조 위치를 결정
      1. 참조 위치를 찾은 경우(선언된 경우): 비지역변수
      2. 참조 위치를 찾지 못한 경우: 오류

Sub2 블록에 선언되지 않은 A는 자유변수(비지역변수)

 

 

 

 

 

✅ 정적 영역 규칙 = 사전적 영역 규칙(lexical scope rule)

: 블록들의 정적 내포 관계(블록의 문맥적인 포함 관계)를 이용

 

 

 

🔸용어

블록 C의 부모: B / 블록 C의 조상: B, A

  • 정적 조상(static ancestors): 현 블록을 문맥적으로 포함하는 모든 블록들
  • 정적 부모(static parent): 현 블록에 가장 가까운 정적 조상

 

 

 

🔸적용 방법

  1. 사용하려는 변수의 이름에 대한 선언이 현재 블록 안에 존재 → 지역변수
  2. 자유변수라면 현재 블록의 정적 부모에 대해
    • 자유변수 이름에 대한 선언 존재 → 비지역변수
    • 선언이 없으면 그 블로그이 정적 부모에 대해 반복
  3. 가장 바깥 영역까지 선언을 찾지 못함 → 오류

 

 

 

 

✅ 영역 구멍(scope hole)

  • 비지역변수가 같은 이름의 지역변수 때문에 보이지 않는 영역

 

 

 

 

 

✅ 동적 영역 규칙

  • 블록들의 동적 내포 관계(서브프로그램의 호출 관계)를 이용
  • 프로그램 수행시점에서만 판단 가능

 

 

 

🔸적용 방법

  1. 사용하려는 변수의 이름에 대한 선언이 현재 블록 안에 존재 → 지역변수
  2. 자유변수라면 현재 블록을 호출한 블록에 대해 
    • 자유변수 이름에 대한 선언이 존재 → 비지역변수
    • 선언이 없으면 그 블록을 호출한 블록에 대해 반복
  3. 최종 호출자 영역까지 선언을 찾지 못함 → 오류

 

 

 

 

 

🔸영역 규칙의 비교

정적 영역 규칙 동적 영역 규칙
- 컴파일 시점에서 변수의 참조 위치를 결정
- 정적 타입 검사 가능, 빠른 수행 속도
- Algol 60, Pascal, C/C++, Java, Python 등 대부분의 언어
- 수행 시점에 변수의 참조 위치를 결정
- 정적 타입 검사 불가능, 느린 수행 속도
- LISP 등의 인터프리터 방식 언어

 

 

 

 

 

 

 


3. 이름 공간

 

✅ 전역 변수(global variable)

출처: 한국방송통신대학교

  • 어떤 블록에도 포함되지 않는 곳에서 선언된 변수
  • 영역: 프로그램 전체
  • 모든 블록에서 비지역변수로 취급

 

 

 

 

 

🔸영역 구멍에서의 전역변수 사용

  • 영역 구멍: 어떤 블록 내에서 전역변수 이름과 동일한 지역변수를 사용할 경우, 지역변수가 우선권을 가지기 때문에 전역 변수는 해당 블록 내에서 보이지 않음
  • 영역 연산자(scope operator)를 이용하면 해결 가능
    • C++의 영역 연산자 → ::

출처: 한국방송통신대학교

 

 

 

 

 

✅ 이름 공간(name space)

출처: 한국방송통신대학교

  • 관련성이 높은 변수와 함수를 하나의 묶음으로 관리하는 영역
  • 영역 자체의 이름을 가짐

 

 

 

🔸이름 공간 내의 변수/함수를 이름 공간 밖에서 사용하는 방법

출처: 한국방송통신대학교

  1. 이름 공간의 이름과 영역 연산자 ::를 이용
  2. 예약어 using을 이용

 

 

 

🔸이름 공간과 영역 구멍

  • 이름 공간의 변수와 지역변수가 중첩된 경우 → 영역 연산자를 이용해서 해결

 

 

 

 

728x90
반응형
728x90
반응형
💡 현실 세계에서 다루는 데이터들을 추상화(자료구조화)하기 위해서는 트리와 그래프가 훨씬 더 많이 사용됨 

1. 트리 용어 정의

 

✅ 트리

  • 데이터 간의 관계를 나타내는 비선형 자료구조(데이터 간의 관계가 1:n) ↔ (선형 자료구조: 데이터 간의 관계가 1:1:1)
  • 노드(node)라고 불리는 부분과 노드를 연결하는 가지(branch, edge)로 구분됨
  • 노드 사이에는 계층적인 관계성을 가짐

 

출처: 한국방송통신대학교

트리 용어 정리
노드(node) - 정보 항목을 의미함
루트(root) - 빈 트리가 아닌 경우에 맨 꼭대기에 있는 하나의 노드
차수(degree) - 각 노드에 있는 가지의 수
잎 노드(leaf node) = 단말 노드(terminal node)
- 노드의 차수가 0인 노드
내부 노드(internal node) = 비단말 노드(non-terminal node)
- 루트 노드와 단말 노드를 제외한 나머지 노드
조상(선조) 노드 - 루트 노드로부터 어떤 노드 X까지의 경로(가지들의 모음) 상에 존재하는 모든 노드를 X의 조상 노드라고 함

예) K의 조상 노드 = E, B, A
자손(후손) 노드 - 어떤 노드 X에서 단말 노드까지의 경로 상에 존재하는 모든 노드를 자손 노드라고 함

예) C의 자손 노드 = G, H, I, L, M
레벨(level) - 루트 노드로부터의 거리(가지의 수)를 의미함
트리의 깊이(depth)/높이(height) - 루트 노드로부터 가장 긴 경로에 있는 단말 노드의 레벨에 1의 값을 더한 것(예: 깊이:4)
서브 트리(subtree) - 특정 노드를 루트 노드로 하고, 그 아래에 있는 열결된 구조의 트리
숲(forest) - n개의 서브 트리를 가진 트리에서 루트 노드를 제거해서 얻을 수 있는 분리된 서브 트리의 집합

(위 트리의 경우 3개의 숲을 가질 수 있음)

 

 

 

 

 

 


2. 이진 트리

 

✅ 이진 트리(binary tree)

출처: 한국방송통신대학교

  • 트리 중에서 차수가 2인 트리
  • 모든 노드의 차수는 최대 2를 넘지 않음
  • 모든 노드는 최대 2개의 서브 트리를 가짐(각 서브 트리는 왼쪽/오른쪽 서브 트리로 구분)
  • 왼쪽 노드와 오른쪽 노드에 '순서'의 의미를 부여함 → 왼쪽과 오른쪽을 구분함으로써 편하게 의사소통하고 효율적으로 알고리즘을 만들 수 있어!
  • 이진 트리의 각 서브 트리는 다시 이진 트리가 됨

 

 

 

 

 

✅ 이진 트리의 높이

  • N개의 노드를 가진 이진 트리의 높이를 계산으로 구할 수 있음
  • 트리는 높이가 낮을 수록 검색 속도가 빨라짐(비교 횟수가 줄어듬)
최대 높이 최소 높이



- N으로 노드의 개수와 같음


- 최대 2개의 자식 노드를 갖는 경우로서 [log₂ N]+1이 높이(레벨+1)가 됨

 

 

 

 

 

✅ 이진 트리 순회 연산 (암기)

  • 일정한 순서에 따라 트리에 있는 각 노드를 한 번씩 방문하는 것
    1. 전위 순회: DLR
    2. 중위 순회: LDR
    3. 후위 순회: LRD

출처: 한국방송통신대학교

Data Left Right (전위 순회; preorder)


A B D H I E J K C F L M G N O
루트노드 방문 → 왼쪽 서브 트리 방문 → 오른쪽 서브 트리 방문
Left Data Right (중위 순회; inorder)

H D I B J E K A L F M C N G O

왼쪽 서브트리 방문 → 루트 노드 방문 → 오른쪽 서브 트리 방문
Left Right Data (후위 순회; postorder)

H I D J K E B L F M N O G C A
왼쪽 서브 트리 방문 → 오른쪽 서브 트리 방문 → 루트 노드 방문 

 

 

 

✅ 포화 이진 트리(full binary tree)

출처: 한국방송통신대학교

  • 깊이가 k인 이진 트리 중에서 노드의 개수가 2^k - 1개인 이진 트리
    • 즉, 깊이가 k인 이진 트리가 가질 수 있는 노드의 최대 개수는 2^k - 1개이며, 단말 노드의 개수가 2^k-1개
  • 각 레벨에서 빈자리가 없이 노드를 모두 가지고 있음
  • 모든 내부 노드들은 2개의 자식 노드를 가짐

 

 

 

✅ 완전 이진 트리(complete binary tree)

출처: 한국방송통신대학교

  • 트리의 최대 레벨이 k 일 때, 레벨 k-1까지는 포화 이진 트리를 형성하고, 레벨 k에서는 왼쪽부터 오른쪽으로 채워진 트리

포화 이진 트리 ⊂ 완전 이진 트리

  • 총 노드의 개수가 2^k+1 -1을 초과하지 않으면서, 포화 이진 트리의 노드 번호에 해당하는 연속적인 번호를 갖는 트리
  • 포화 이진 트리는 완전 이진 트리에 속함 ↔ 완전 이진 트리는 포화 이진 트리가 될 수 없음 

 

 

 

✅ 경사 이진 트리(skewed binary tree)

출처: 한국방송통신대학교

  • 한 쪽(왼쪽/오른쪽) 방향으로만 가지가 뻗어 나간 경사 이진 트리
  • 검색 시간 등 여러 가지 측면에서 수행 시간을 늘려나감 = 비효율적

 

 

 

 

 

 

 


3. 그래프

 

✅ 그래프 G

  • 정점(vertex)들의 유한 집합 V와 두 개의 정점을 연결하는 간선(edge)들의 유한 집합 E로 정의
  • G=(V,E)로 표시

 

무방향 그래프(undirected graph) 방향 그래프(directed graph, digraph)
간선이 방향성이 없는 간선으로 연결된 그래프

V(G1)={1,2,3,4}
E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)} 

*정점의 차수(degree): 정점에 부수된 간선의 개수
두 정점을 연결하는 간선이 방향성을 가지는 간선으로 연결된 그래프

V(G2)={1,2,3,4}
E(G2)={<1,2>,<1,3>,<3,2>,<3,4>,<4,1>,<4,2>}

*정점의 차수(degree)
- 진입 차수(indegree): 다른 정점에서 해당 정점을 향하는 간선의 개수
- 진출 차수(outdegree): 해당 정점으로부터 다른 정점으로 향하는 간선의 개수

 

 

 

🔸용어 정리

  • 두 정점이 간선으로 직접 연결되어 있으면 두 정점은 인접(adjacent)해 있다고 하며, 해당 간선은 두 정점에 부수(incident) 되었다고 함
    • '인접한다': 정점 간의 관계
    • '부수되었다': 정점과 간선 간의 관계
  • 경로(path): 간선으로 연결된 정점들의 순차적 나열을 의미함
  • 경로의 길이: 경로에 포함된 간선의 개수
  • 단순 경로(simple path): 경로 상에 존재하는 정점들이 모두 다른 경로
  • 사이클(cycle): 세 개 이상의 정점을 가진 경로 중에서 시작 정점과 끝 정점이 같은 경로 (예: 1,2,1 또는 1,2,3,4,2,1)
  • 단순 사이클(simple cycle): 시작 정점과 끝 정점을 제외하고 모든 정점이 다른 사이클 (예:1,2,3,4)
  • '두 정점은 서로 연결되었다': 두 정점 사이에 경로가 존재함
  • '그래프가 서로 연결되었다': 무방향 그래프에서 서로 다른 모든 정점들 사이에 경로가 존재함
  • 방향 그래프에서 적어도 두 정점 사이에 어느 한 쪽으로만 경로가 존재할 때, 약하게 연결되었다고 함
  • 트리는 그래프의 특수한 형태로 봄
    • 무방향 그래프에서 모든 정점이 서로 연결되어 있으면서 사이클이 존재하지 않는 그래프를 트리라고 함

 

 

 

 

 

 

 

4. 그래프의 표현

 

인접 행렬(adjacency matrix) 인접 리스트(adjacency list)
출처: 한국방송통신대학교
  • 그래프를 컴퓨터 프로그래밍 언어로 구현하기 위해서는 인접 행렬(adjacency matrix)이나 인접 리스트(adjacency list)를 이용하여 표현함
  • 인접 행렬을 이용하여 n개의 정점을 가진 그래프를 표현하기 위해서는 n*n 크기의 2차원 배열을 이용함
    • 인접 행렬 A[i][x]에 값(1)이 존재하면 그래프의 정점 Vᵢ에서 정점 Vₓ 사이에 간선이 존재함을 의미

 

 

 

 

 

✅ 그래프의 탐색

그래프의 모든 정점을 체계적으로 방문하는 것

깊이 우선 탐색(depth first search) 너비 우선 탐색(breadth first search)


- 최근에 방문하지 않은 인접한 하나의 정점을 우선적으로 방문함 
- 최종 방문 순서는 (1,2,4,5,7,6,3) 이지만 이는 구현 방법에 따라 달라질 수 있음

- 최근에 방문하지 않은 인접한 모든 정점을 모두 방문함
- 최종 방문 순서는 (1,2,3,4,5,6,7) 이지만 이는 구현 방범에 따라 달라질 수 있음

 

 

728x90
반응형
728x90
반응형
IT 기초 문법서

 

컴퓨터의 기본 구조, 운영체제, 프로그래밍 언어, 네트워크, API와 JSON, 애플리케이션, 웹, 데이터베이스, 이미지 처리, 프레임워크와 라이브러리, 깃 등 필수 지식들을 이해하기 쉽고 간략하게 설명하고 있기 때문에 IT 업계의 전체적인 흐름을 정리하기 좋은 책이다. 

 

내가 1년차 때 공부를 하면서 답답했던 부분 중 하나가 이 분야의 전체적인 숲을 보고 싶은데 이 숲을 볼 방법을 몰랐었다.  언어와 프레임워크에 연연하기 전에 전체적인 흐름을 먼저 잡았어야 했는데.. 지금 돌이켜보니 이 부분이 많이 아쉽다.

 

이 책은 과거의 나처럼 시야가 좁은 개발자들에게 강추한다!

 

 

728x90
반응형
728x90
반응형

1. 변수의 개요

 

출처: 방송통신대학교

🔸변수

  • 프로그램에서 처리할 데이터를 저장/관리 할 수 있도록 메모리를 추상화한 것

 

 

 

🔸변수의 속성

배런(Barron)의 표기법

  • 변수명: 변수의 이름, 식별자(identifier)
  • 타입: 변수에 저장할 수 있는 데이터 집합의 종류, 자료형 
  • 주소: 변수가 사용하는 메모리의 위치, "참조(reference)"
  • : 변수에 저장된 데이터, 수행시간 동안 변경될 수 있음

+ 수명, 영역(scope)

 

 

 

 

 


2. 바인딩

 

출처: 방송통신대학교

🔸바인딩(binding)

  • 언어 구성 요소의 속성이 구체적으로 결정되는 것

 

 

 

🔸바인딩 시각(binding time) - 바인딩이 일어나는 시점


(바인딩 시각은 무조건 고정적이지 않음)
  • 언어 정의 시점
  • 언어 구현 시점
  • 컴파일 시점
  • 링크 시점
  • 로드 시점
  • 프로그램 수행 시점

 

 

 

🔸바인딩 시각의 구분

  1. 정적 바인딩(static binding)
    • 프로그램 수행 이전(예: 컴파일, 로드 시점)에 모두 결정되어서 프로그램 수행 시점에 바인딩의 변화가 없는 경우
    • 프로그램 수행시간의 효율성이 높음
    • 컴파일 방법에 적합
  2. 동적 바인딩(dynamic binding)
    • 프로그램 수행 시점에서 바인딩의 변화가 있는 경우
    • 실제 바인딩 시작이 프로그램 수행 시점인 경우
    • 유연한 프로그래밍이 가능
    • 인터프리터 방법에 적합

 

 

 

 

 

 


3. 변수의 바인딩

 

변수의 바인딩 예 변수명 바인딩 없이 사용되는 경우(예: 포인터)

(포인터 변수를 통해서만 값에 접근 가능)

🔸변수의 바인딩

  • 변수의 속성이 구체적으로 결정되는 것
  • 프로그램 수행 중에 변수가 사용되기 위해서는 변수의 속성이 바인딩되어야 함
    • 변수의 속성: 변수명, 타입, 주소, 값

 

 

 

🔸일반적인 변수의 속성별 바인딩 순서

①변수명 바인딩 → ②타입 바인딩 → ③주소 바인딩 → ④값 바인딩

 

 

 

①변수명 바인딩

변수명 바인딩 방법
명시적 선언(explicit declaration) 묵시적 선언(implicit declaration)
- 선언문에 명시된 이름으로 변수명을 바인딩

- 선언문 없음
- 대입문 등에 처음으로 사용된 이름으로 변수명을 바인딩

 

 

 

 

②타입 바인딩

타입 바인딩 방법
명시적 선언 묵시적 선언
- 선언문에 명시된 타입으로 변수의 타입을 바인딩 - 변수명이나 대입할 값으로부터 정해지는 타입으로 바인딩



- Fortran: 변수명의 시작 알파벳에 따라 바인딩

타입 바인딩 시각
정적 바인딩 동적 바인딩
- 컴파일 시점에 구분 분석을 통해 타입을 판단
- 명시적 선언과 묵시적 선언 모두 가능
- 변수의 타입을 고정하지 않음
- 대입할 값에 맞추어 계속 변화시킴
- 예: APL, SNOBOL 4, Python

 

 

 

③주소 바인딩

  • 변수가 사용할 메모리가 할당되어 변수의 주소가 그 메모리의 주소로 바인딩되는 것 => 변수 주소와 메모리 주소를 매칭
    • 할당(allocation): 가용한 메모리 중 필요한 만큼의 공간을 변수에 배정하는 것
    • 해제(deallocation): 할당된 메모리를 변수로부터 회수하는 것
  • 변수의 수명(lifetime/extent)
    • 변수가 메모리를 할당받고 있는 기간

※ 변수의 수명이 존재해도 무조건 해당 변수를 사용할 수 있는 것은 아님! 영역과 관련됨(8강 포스팅 확인)

 

 

 

바인딩 방법
자동 할당 수동 할당
- 선언을 통해 정해진 변수의 타입에 맞추어 필요한 메모리를 할당

- 프로그래머가 지정한 크기만큼의 메모리를 할당



- 자동 할당: 상황/언어에 따라 정적 또는 동적 세그먼트 활용
- 수동 할당: 동적 세그먼트의 힙 활용
바인딩 시각
정적 바인딩 동적 바인딩
- 로드 시점에 정적 세그먼트의 주소를 바인딩 - 프로그램 수행 중 변수가 사용되는 시점에 동적 세그먼트의 주소를 바인딩

 

 

 

  • 정적 변수(static vatiable)
    • 정적 바인딩을 하는 변수
    • 전체 프로그램 수행 시간 동안 수명 유지
    • 초기 Fortran의 모든 변수
  • 동적 변수(dynamic variable) → 동적 세그먼트의 사용 영역에 따라 구분됨
    1. 스택 동적 변수
      • 스택에서 메모리를 할당받음
      • 자동 할당을 이용하는 변수 중 정적 변수가 아닌 경우
      • 필요한 시점에 자동으로 할당/해제됨
    2. 힙 동적 변수
      • 동적 세그먼트 중에서 메모리를 할당 받음
      • 수동 할당을 이용하는 변수 (예: malloc(), free() in C)
      • 동적 타입 바인딩을 하는 언어의 변수 (예: Python)
728x90
반응형
728x90
반응형

※ Microsoft Azure  계정 생성 전, 유의 사항

  • 학생용 체험 계정과 일반 체험 계정의 화면 UI가 거의 동일하기 때문에 헷갈릴 수 있음
  • 일반 체험 계정은 신용카드 정보를 요구하지만 학생용은 신용카드 정보를 요구하지 않음
  • 학생용 체험 계정 생성은 아래 링크에 접속 후 진행하면 됨

 

Azure for Students - 체험 계정 크레딧 | Microsoft Azure

 

Azure for Students - 체험 계정 크레딧 | Microsoft Azure

Microsoft Azure for Students에서 체험 계정을 만들면 $100크레딧을 받을 수 있습니다. 신용 카드가 필요 없으며 Azure 평가판 서비스를 12개월 동안 사용할 수 있습니다.

azure.microsoft.com

 


 

홈 - Microsoft Azure

 

Microsoft Azure

 

portal.azure.com

 

계정 생성 후, 위에 링크된 Microsofe Azure 포털 사이트에 접속하여 가상머신 생성 작업을 진행하면 됨

 

 

 

 

 

1. 리소스 그룹 만들기

*리소스 그룹: 여러 개의 서비스를 논리적으로 묶어주는 단위. 서비스의 영역을 구분하는 논리적 단위.

 

화면 경로: [홈] - [리소스 그룹] - [+ 만들기]

 

입력란에 기입 후, [검토 + 만들기] 버튼 클릭하면 리소스 그룹 생성 완료

 

 

 

 

 

 

 

2. 가상머신 만들기

 

2-1. 리소스 그룹 목록에서 생성한 리소스 그룹을 선택하여 [+만들기] 버튼 클릭

화면 경로: [홈] - [리소스 그룹] - [생성한 리소스 그룹]

 

 

 

 

 

2-2. 전환된 마켓플레이스 화면에서 원하는 운영체제 검색해서 [만들기] 버튼 클릭

나는 우분투 18.04버전으로 만들거임

 

 

 

 

 

 

 

2-3. 가상머신 [기본 사항] 설정

 

  • 가용성 옵션
    • 항상 서비스가 지속될 수 있도록 리소스를 준비해두는 것(하나의 서비스가 다운되면 다른 서비스가 대체 되도록 하는..)
    • 선택할 경우 비용 + a
  • 이미지
    • 서버의 운영체제 종류와 버전 선택

 

 

  • 크기: 가상 머신의 크기(CPU, RAM, 디스크, IOPS(디스크 입출력 수치) 등) 설정 → pay as you go
  • 인증 형식 : 가상 머신 접속할 때 사용하는 인증 형식
    • SSH 공개 키: 대량으로 관리하기 적합
    • 암호
  • 공용 인바운드 포트: 외부에서 데이터 센터(생성한 가상 머신)로 들어오는 포트 결정

 

 

 

2-4. 가상 머신 [디스크] 설정

 

  • VM으로 삭제: 가상 머신 삭제 시, 해당 디스크도 삭제할 것인지의 여부
  • 암호화 형식: 디스크를 암호화하는 방식

 

 

 

2-5. 가상 머신 [네트워크] 설정

 

  • 서브넷: 가상 네트워크의 일정한 IP 주소 범위
    • IP 주소/사이더
    • 사이더: 네트워크에 몇 개의 서버, 단말이 붙을 수 있는지 갯수를 의미
    • 10.0.0.0/32 = 32비트까지 고정 => 단말 1개
      10.0.0.0/31 = 31비트까지는 고정하고 마지막 1비트만 0과1로 변경 가능 => 단말 2개
      10.0.0.0/24 = 2^8 => 단말 256개
      10.0.0.0/16 = 2^16 => 단말 65000개
  • 공용 IP
    • 가상머신은 기본적으로 데이터 센터 내의 가상 IP를 받지만 외부와 통신하기 위해선 공용 IP가 필요
  • 부하 분산(로드 밸런싱)
    • 하나의 PC에서 감당하기 어려운 요청이 들어오면 2대 이상의 PC에서 나눠서 작업량을 분배

 

 

 

 

 

 

 

2-6. 가상 머신 [관리] 설정

변경 없이 기본 디폴트 값 유지

 

 

 

 

 

 

 

2-7. 가상 머신 [고급] 설정

 

 

  • 사용자 지정 데이터 및 Cloud-init : 복제할 때 어떤 기능을 복제할 건지, 복사될 서버의 초기 값

 

 

 

 

 

 

 

2-8. 가상 머신 [검토+만들기]

유효성 검사가 통과되면 [만들기] 버튼 클릭

 

 

배포 완료 후, [리소스로 이동] 클릭

 

 

 

 

잘 생성된 것을 확인할 수 있음

 

 

 

 

 

 

 

 

3. 생성된 가상머신 접속하기

나는 Xshell을 이용해서 접속할 거임

 

 

이렇게 연결하면 ?

 

 

안 됨

 

 

 

3-1. 가상머신 [네트워킹] - [인바운드 보안 규칙 추가] 설정

 

  • 원본 IP 주소/CIDR 범위
    • 원본 IP 주소: 내 PC의 공용 IP
    • CIDR 범위: 32로 지정할 경우 나만 접속 가능

 

 

 

설정 추가 후에 재 접속하면?

 

 

접속 성공

 

 

728x90
반응형

'클라우드' 카테고리의 다른 글

AWS를 이용해 정적 웹 어플리케이션 배포하기  (0) 2021.08.14
728x90
반응형

1. 프로그래밍 언어 정의와 구현

 

✅ 프로그래밍 언어 정의

프로그래밍 언어 정의 = 구문 규칙 + 의미 규칙
  • 구문 규칙: 어떤 프로그램이 올바른 형태인지 규정하는 것
  • 의미 규칙: 올바른 형태의 프로그램을 실행하였을 때 어떻게 실행되는 것이 올바른 것인지 규정하는 것
  • 구문 규칙 정의
    • 문맥 자유 문법 - BNF, EBNF, 구문 도표 등이 있고 문맥 자유 문법 - EBNF를 주로 사용
  • 의미 규칙 정의
    • 기능적 의미론, 표기적 의미론, 공리적 의미론 등이 있지만 너무 복잡하기 때문에 대부분의 언어는 자연어를 주로 사용

 

✔️ 프로그래밍 언어 정의 예: 간단한 로봇 제어 언어
출처: 방송통신대학교

 

 

 

 

 

 

✅ 프로그래밍 언어 구현

  • 그 언어로 작성된 프로그램을 수행하는 프로그램
  • 프로그래밍 언어 L의 구현 = 아래와 같은 작업을 수행하는 프로그램
    1. Pₗ이 L의 구문 규칙을 따르는 올바른 프로그램인지 검사 (Pₗ : 언어 L로 작성된 프로그램)
    2. 올바른 경우, Pₗ을 입력으로 받아서 L의 의미 규칙에 따라 실행 

 

 

🔸CPU의 함수 모형

  • M : CPU가 받아들이는 기계어
  • Pₘ : 기계어로 작성된 프로그램
  • in : 입력 데이터
  • out : 출력 데이터

 

 

🔸프로그래밍 언어 구현의 함수 모형

  • L : 프로그래밍 언어
  • Pₗ : L로 작성된 프로그램
  • in : 입력 데이터
  • out : 출력 데이터

 

 

🔸인터프리터의 함수 모형

  • Intₗ : 언어 L의 멍령어를 해석하는 인터프리터

 

 

🔸컴파일러의 함수 모형

  • Compₗ : 언어 L의 컴파일러
  • Pₘ : CPU M이 이해하는 프로그램

 

 

 

 

 


2. 프로그래밍 언어 구현 방법

 

① 전통적인 프로그래밍 언어 구현

  • 대상: 명령형 언어, 절차형 언어, 객체지향 언어
  • 기계어를 확장하는 형태로 구현

 

② 새로운 패러다임의 언어 구현

  • 대상: 함수형 언어, 논리 언어
  • 구현 모델을 추상기계로 만들어 징검다리 삼아 구현

 

 

🔸전통적인 프로그래밍 언어 구현

  • 명령형 언어: 저급언어의 연산과 명령어를 확장하는 형태로 구현
    • b^2+4ac 
  • 절차형 언어: 명령형 언어+사용자 정의 연산(함수)과 사용자 정의 명령어(프로시저)를 지원하는 형태로 구현
  • 객체지향 언어: 절차형 언어+사용자 정의 자료형을 지원하는 형태로 구현

 

🔸새로운 패러다임의 프로그래밍 언어 구현

  • 언어별 계산 모델
    • 함수형 언어: 람다 계산법
    • 논리 언어: 연역 논리
  • 저급언어와의 연관성을 직접 파악하기 어려움
  • 계산 모델과 하드웨어 사이에 중간 기계(추상기계)를 하나 더 놓은 형태로 구현 → 프로그램을 추상기계가 알아듣는 형태로 변경
    • 추상기계
      • 함수형 언어: CPS, G-machine, TIM 등
      • 논리 언어: WAM 등
    • 가상기계: 추상기계가 구체적인 구현물로 제시되고, 코드를 독자적으로 수행할 수 있는 경우 (예: Java - JVM)

 

 

 

🔸컴파일러 구현 단계

출처: 방송통신대학교

  • 분석 단계 
    • 원시 프로그램(해당 언어로 작성된 프로그램)의 구조 파악
    • 전단부(어휘 분석, 구문 분석, 의미 분석)가 끝나면 중간 표현 생성 → 프로그래밍 언어에 종속적
  • 생성 단계
    • 목적 기계에 적합한 명령어 생성
    • 후단부(중간 코드 최적화, 코드 생성, 목적 코드 최적화)가 끝나면 효율적인 목적 코드 생성 → 목적 기계에 종속적

 

 

🔸인터프리터 구현 단계

출처: 방송통신대학교

  • 컴파일러 구현 단계의 분석 단계를 그대로 포함
  • 중간 표현을 순회하며 프로그램을 수행
  • 프로그래밍 언어의 문장 단위로 해석

 

 

 

🔸언어 구현에 필요한 자료 구조

  • 구문 트리
    • 언어 구현 단계의 중심을 차지
    • 분석 단계의 전 과정을 관통
  • 심볼 테이블(컴파일러 구현)
    • 식별자 정보(자료형, 선언 위치(전역/지역변수..)를 저장
  • 환경(인터프리터 구현)
    • 값 정보를 포함한 식별자 정보를 저장
  • 실행 환경(컴파일러 구현 시, 사용자 프로그램이 동작하려면 필요)
    • 실행을 지원하기 위한 메모리 구조
      • 정적 세그먼트: 코드, 정적 데이터
      • 동적 세그먼트: 스택, 힙
    • 메모리 및 실행 상태를 관리하기 위한 레지스터
      • PC, SP, FP등 전용 레지스터 혹은 여러 범용 레지스터

 

 

 

 

 


3. 언어 구현 실제

 

🔸어휘 분석기 구현

유한 상태 기계(FSM)

  • 어휘 분석기: 프로그램의 어휘(토큰)를 구별해 내고 속성을 구분하여 구문 분석기에 전달 (어휘: 예약어, 리터럴, 연산자 등)
  • 유한 상태 기계(FSM)를 구성하여 구현

 

 

🔸구문 분석기 구현

  • 구문 분석기는 토큰 열로부터 구문 트리를 생성
    • 구문 트리의 형태: 파스 트리, 추상 구문 트리

왼: 파스 트리 / 오: 추상 구문 트리

  • 구문 트리를 순회하는 여러 프로시저로 구성된 프로그램
  • 순환 하강 구문 분석기: 문법 규칙을 그대로 코드로 바꾼 형태
    1. 각 비단말 기호의 문법 규칙에 대해 하나의 프로시저 생성
    2. 우변을 모사할 때 단말 기호는 일치 검사, 비단말 기호는 해당 프로시저 호출

 

순환 하강 구문 분석기 예
✔️ 괄호가 맞는 문자열을 생성하기 위한 문법



(한줄 한줄 각각 다른 프로그램)
C언어로 구현

 

 

 

728x90
반응형
728x90
반응형

1. 기본 개념

 

자료 사이의 논리적 관계를 컴퓨터나 프로그램에 적용하기 위해서는 자료의 추상화가 필요함

  • 자료구조(data structure): 추상화를 통해 자료의 논리적 관계를 구조화한 것
  • 추상화: 공통적인 개념을 이용하여 같은 종류의 다양한 객체를 정의하는 것 예) 수식, 프로그램 언어 등
  • 자료(데이터)의 추상화: 다양한 객체를 컴퓨터에서 표현하고 활용하기 위해 필요한 데이터의 구조에 대해서 공통의 특징만을 뽑아 정의한 것

 

  • 자료의 추상화와 구조화가 적절히 이루어지지 못하면 소프트웨어는
    • 비효율적으로 개발되거나
    • 비요율적으로 수행되거나
    • 소프트웨어의 확장성에 문제가 생기거나
    • 소프트웨어의 유지보수에 문제가 생길 수 있음



🔸자료구조의 종류와 관계

출처: 방송통신대학교

  • 미리 정의된 자료구조
    • 프로그래밍 언어에서 제공
    • 프로그래밍 설계나 컴파일러 구현 단계에서 정의되어 개발자에게 제공되는 자료구조
  • 사용자 정의 자료구조
    • 개발자가 정의하여 사용함
    • 소프트웨어 개발 중에 개발자에 의해 만들어지는 자료구조(리스트, 스택, 큐, 트리, 그래프 등)






2. 배열

 

출처: 방송통신대학교

  • 배열(array): 동일한 자료형을 갖는 여러 개의 데이터를 동일한 변수 이름의 방에 일렬로 저장하는 자료 집합체(원소+인덱스)
  • 원소(요소): 자료 집합체에서 각 원소의 항목값 = 데이터
  • 인덱스(첨자): 자료 집합체에서 각 원소가 저장된 방을 접근하기 위한 방 번호에 해당하는 것 = 번호



🔸1차원 배열

  • 가장 간단한 형태의 배열
  • 한 개의 인덱스(첨자)를 사용해서 원소에 직접 접근
  • 배열의 원소들은 컴퓨터 메모리의 연속적인 기억장소에 할당되어 순차적으로 저장됨
  • 배열 A의 크기를 k라고 가정하고 시작 주소를 a라고 가정하면, A[i]의 저장 주소= a+i*k

1차원 배열에서의 주소 계산



🔸다차원 배열

2차원 배열


2차원 배열


다차원 배열: 두개 이상의 첨자들을 가지는 배열을 총칭함
  • 동일한 크기의 1차원 배열을 모아 놓아, 바둑판 형태로 만든 배열
  • 하나의 원소는 두개의 첨자 i와 j의 쌍으로 구분됨 → A[i][j]
    • 행(row): 첨자 i에 해당하는 것
    • 열(column): 첨자 j에 해당하는 것



🔸2차원 배열 저장 순서

  • 열 우선 순서 저장
    • 첫 열에 있는 각 행의 원소를 차례대로 컴퓨터 메모리에 저장하고 다음 열로 이동하여 각 행에 있는 원소를 차례대로 컴퓨터 메모리에 저장하는 방법

 

  • 행 우선 순서 저장
    • 첫 행에 있는 각 열의 원소를 차례대로 컴퓨터 메모리에 저장하고 다음 행으로 이동하여 각 열에 있는 원소부터 차례대로 컴퓨터 메모리에 저장하는 방법



🔸희소행렬(spare matrix)

 

  • 원소 값이 0인 원소가 그렇지 않은 원소보다 상대적으로 많은 행렬
  • 0값을 저장하기 위해 컴퓨터 메모리의 낭비를 막고, 처리의 효율성을 높이기 위해 사용
  • 희소 행렬의 0인 원소는 따로 저장하지 않고, 0이 아닌 값만 따로 모아서 저장하는 방법
  • 0이 아닌 원소를 (행 번호, 열 번호, 원소 값)의 형태로 나타내면 2차원 배열로 표현 가능함






3. 리스트

✅ 선형 리스트(linear list)

  • 순서 리스트(ordered list)라고도 함
  • 1개 이상의 원소들이 순서를 가지고 구성됨
  • A = (a₁, a₂, ..., aᵢ, ..., aₙ)와 같이 표시
    • aᵢ는 i번째 원소를 나타냄
    • aₙ의 n은 리스트의 크기가 됨
  • 예1) 요일 리스트: (월, 화, 수, 목, 금, 토, 일)
  • 예2) 전쟁 리스트: ((황산벌 전투, 660), (임진왜란, 1592), (세계 1차 대전, 1914), (세계 2차 대전, 1939))



🔸선형 리스트의 구현1(배열을 통한 구현)

 

  • 선형 리스트와 1차원 배열은 순차적인 구조를 가지고 있으므로 1차원 배열로 간단하게 표현할 수 있음
  • 원소 삽입
    • 삽입될 위치 이후의 원소들의 순서를 그대로 유지하면서 원소를 삽입해야 함
    • 그래서 삽입할 위치에 있는 원소와 그  다음에 위치한 원소들을 모두 한 칸 씩 뒤로 이동시킴
  • 원소 삭제
    • 삭제할 원소를 찾아 삭제한 후, 그 뒤에 있는 모든 원소들을 한 칸 씩 앞으로 이동시킴



🔸선형 리스트의 구현2(연결 리스트(linked list))

 

  • 노드 간의 포인터 연결을 통해서 구현됨
  • 각 노드는 적어도 두 종류의 필드(원소 값을 저장하는 데이터 필드/노드 연결을 위한 링크 필드)를 가짐
  • 선형 리스트의 논리적 순서만을 지원함
  • 포인터만 변경 시키면 되기 때문에 쉽게 연산 가능



🔸연결 리스트 종류

  • 단일 연결 리스트(singly linked list)
    • 특정 노드의 링크 필드를 사용해서 후행 노드를 가리킴
    • 특정 노드의 후행 노드는 쉽게 접근할 수 있지만, 선행 노드에 대한 접근은 헤드노드부터 새로 시작해야 함
  • 이중 연결 리스트(doubly linked list)
    • 첫번째 링크는 후행 노드를 가리키고 두번째 링크는 선행 노드를 가리킴
    • 특정 노드에서 후행 노드 뿐만 아니라 선행 노드에 대한 접근을 쉽게 제공하기 위한 것
    • 메모리 추가적으로 들겠지만 연산은 조금 더 빨라짐






4. 스택과 큐

 

 

✅ 스택(Stack)

  • 데이터의 삽입과 삭제가 한쪽 끝에서만 이루어지는 자료구조
  • 가장 먼저 입력된 데이터가 가장 나중에 제거되는 선입후출(FILO, First-In-Last-Out) 특징을 가짐 (=LIFO, Last-In-First-Out)



🔸스택의 연산

  • 삽입 연산: push
  • 삭제 연산: pop
  • 스택 오버플로(overflow)
    • 삽입 연산을 수행할 때 발생
    • 스택을 위해 할당된 저장 공간을 초과해서 더 이상 데이터를 삽입할 수 없는 현상
  • 스택 언더플로(underflow)
    • 삭제 연산을 수행할 때 발생
    • 스택에 데이터가 존재하지 않으면 삭제가 일어나지 않는 현상





✅ 큐(Queue)

  • 선형 리스트의 한쪽 끝에서는 데이터의 삭제만 이루어지고, 다른 한쪽 끝에서는 데이터의 삽입만 이루어지는 자료구조
  • 가장 먼저 입력된 데이터가 가장 먼저 제거되는 선입선출(FIFO, First-In-First-Out) 특징을 가짐



🔸큐의 연산

  • 삽입 연산: enqueue
  • 삭제 연산: dequeue
  • 오버플로(overflow)
    • 삽입 연산을 수행할 때 발생
    • 큐를 위해 할당된 저장 공간을 초과해서 더 이상 데이터를 삽입할 수 없는 현상
  • 언더플로(underflow)
    • 삭제 연산을 수행할 때 발생
    • 큐에 데이터가 존재하지 않으면 삭제가 일어나지 않는 현상



🔸큐의 만원 상태

  • 만원 상태
    • 데이터가 큐에 삽입됨에 따라 rear 변수 값이 증가하다가 n-1이 되면 더 이상 데이터가 삽입될 수 없는 상태가 됨. 하지만 이 경우가 반드시 큐에 n개의 항목이 가득 차 있다는 것을 의미하는 것은 아님

=> 큐가 가득 채워진 상태를 결정하기 위한 다른 방법이 필요함

728x90
반응형
728x90
반응형

1. 데이터와 정보

 

✅ 데이터와 정보의 관계

I = P(D)

 

 

 

🔸데이터 표현 형태

  • 데이터의 유형(문자, 정수/실수, 이미지, 오디오, 비디오...)과 무관하게 일관된 표현 방식 = "비트 패턴"
    메모리에 저장된 데이터 유형에 맞는 해석과 처리가 필요 → 입출력 장치나 프로그램의 책임

 

 

 

✅ 데이터 표현 단위

비트(binary digit) 0 또는 1 예/아니오(수치❌ 기호⭕)
1바이트(byte) 8bit 알파벳 또는 숫자 한 개
1킬로바이트(KB) 1024 byte 몇 개의 문단
1메가바이트(MB) 1024 KB 1분 길이의 MP3 노래
1기가바이트(GB) 1024 MB 30분 길이의 HD 영화
1테라바이트(TB) 1024 GB 약 200편의 FHD 영화
1페타바이트(PB) 1024 TB  
1엑사바이트(EB) 1024 PT  
1제타바이트(ZB) 1024 EB  
1요타바이트(YB) 1024 ZB  
워드(word) 컴퓨터 연산의 기본단위가 되는 정보의 양 → 32비트, 64비트

 

 

 

 


2. 진법

 

 

✅ 진법(number system)

출처: 방송통신대학교

  • 수를 세는 방법 또는 단위
  • r진수: 0, 1, ..., (r-1)까지의 숫자만을 사용해서 표현한 수
  • 각 위치에 따른 서로 다른 가중치(자릿값)가 존재
십진수 '123' = 일백이십삼 = 1*10^2+2*10^1+3*10^0
이진수 '10111.011'

 

 

 

🔸2진수 → 10진수

10진수 = (각 비트값 * 해당 비트 위치의 가중치)

출처: 방송통신대학교

 

 

 

🔸8진수, 16진수 → 10진수

10진수 = (각 비트값 * 해당 비트 위치의 가중치)  

출처: 방송통신대학교

 

 

 

🔸10진수 → r진수(r=2, 8, 16)

정수 부분소수 부분을 구분하여 각각 처리한 후, 각 결과를 단순히 연결해서 나열

 

 

 

🔸10진수_정수 부분 → r진수(r=2, 8, 16)

알고리즘 예시

 

 

 

🔸10진수_소수 부분 → r진수(r=2, 8, 16)

알고리즘
예시

 

 

- 소수 부분이 반복되는 경우, 반복 값 전까지만 변환
💡십진수 0.6 ≒ 이진수 0.1001 => 비슷한 값이긴 하지만 같은 값은 아님

 

 

 

🔸2진수 ↔ 8진수/16진수

 

 

 

 


3. 정수 표현

 

✅ 정수 표현 방법

출처: 방송통신대학교

  • 부호 없는 정수: 부호(+,-) 비트가 없음
  • 부호 있는 정수: 최상위 비트 => 부호 비트(0: 양수, 1: 음수)
  • 음의 정수는 서로 다른 형태를 가짐 (양의 정수는 모두 동일)
    1. 부호화-크기: 절대값으로 표현
    2. 1의 보수: 양수에 대한 보수로서 표현
    3. 2의 보수: (1의보수+1)로 음수 표현

 

 

 

✅ 부호 없는 정수

 

 

 

부호 있는 정수

⭐컴퓨터에서 일반적으로 사용하는 방법: 2의 보수⭐

 

 

 

 

✅ 8비트 정수 표현 방법 비교

 

 

 

✅ 2의 보수 방식의 응용

24-17

연습 문제

 

 

 

 


4. 실수 표현

 



✅ 실수 표현

  • 과학적 표기법을 활용한 부동소수점 방식으로 표현
  • 지수 → 초과표기법
  • 가수 → 정규화

 

 

 

✅ 초과표기법

  • 부동소수점 방식의 지수 부분만을 표현하기 위한 방법
  • 매직 넘버

 

 

 

✅ 정규화

  • 가수를 표현할 때 표준화된 형식이 필요
    • → 소수점의 위치를 통일
    • 소수점을 기준으로 소수점 왼쪽에 1이 오직 하나만 있도록 소수점의 위치를 조정

 

 

 

⭐ 실수 표현 예

💡 정규화 후, 소수점 왼쪽에 있는 1을 저장하지 않는 이유
정규화를 통해 소수점 왼쪽에는 무조건 1만 있다는 걸 알기 때문에이를 저장하지 않고 대신에 다른 데이터를 저장 
※ 23비트에 저장된 값을 사용하기 위해 해석할 때는 앞에 1. 붙여줘야 함!

 

 

 

🔸IEEE 부동소수점 방식의 표준 형식

 

 

 

 


5. 문자 표현

 

✅ 문자 표현

  • 키보드를 통해 입력되는 문자도 2진수로 표현되어 처리
  • 각 문자마다 유일한 값으로써 코드를 할당할 수 있는 약속된 문자 체계가 필요
  • 문자 체계의 종류: ASCII, 유니코드, ...

 

 

 

✅ ASCII

  • American Standard Code for Information Interchange
  • 미국표준협회(ANSI)
  • 7비트 코드 → 128(2^7)의 서로 다른 문자 표현 가능
  • 실제 사용할 때는 8비트로 맞춰주기 위해 왼쪽에 1비트를 추가시켜 1byte를 만듬
    • 확장된 아스키(Extended ASCII): 1비트+7비트
    • 1비트
      1. 그냥 0으로 채워 넣음
      2. 패러티(parity)비트: 데이터를 전송할 때 전송상에서 발생하는 오류를 검출하기 위한 용도로 사용
        • 짝수 패러티: 11001100
        • 홀수 패러티: 01001100

 

 

 

 

✅ 유니코드

  • 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준
  • 1990년 애플 컴퓨터, IBM, MS 등 컨소시엄으로 설립한 유니코드(Unicode)가 첫 버전발표
  • 1995년 국제 표준으로 제정 → 공식명칭: ISO/IC 10646-1
  • 사용 중인 플랫폼, 프로그램, 언어에 무관
  • 16비트 코드 체계 → 65636개(2^16)의 서로 다른 문자 표현

 

 

 

🔸EBCDIC

  • Extended Binary Coded Decimal Interchange Code
  • IBM 개발, 8비트 코드 → 실제 사용되는 문자 코드는 127개
  • IBM 메인 프레임에서만 사용

 

 

 

🔸BCD

  • Binary Coded Decimal
  •  4비트로 구성된 열 개의 코드로 10진수를 표현 →  '8421 코드'

 

 

728x90
반응형

+ Recent posts