본문 바로가기
Ghost의 Ghost노트/Ghost의 프로그램 언어 용어

Ghost의 간단하게 보는 프로그램 언어 용어~~

by dark ghost 2015. 5. 15.
728x90
반응형

Ghost의 프로그램 언어의 용어

1. 메소드 란?

: 메소드란 Java와 C# 그리고 C++등에서 사용하는 용어 이며, 각 클래스에서 프로그래머가 직접 작업 수행하는 부분을 만들어놓고 필요할때마다 불러와 작업을 수행하는 기능이다. (함수와 비슷함)

 public void value(String[] args)

{

}

 일단 메소드를 만드는 방식은 접근지정자, 리턴타입, 메소드이름, 메소드인자 그리고 메소드 안에 들어갈 메소드 코드 이렇게 필요하다. 어떻게 보면 함수와 비슷한 구조를 가지는게 당연 할지도 모른다. 왜냐하면 C에서는 함수라고 불리지만 용어만 다르게 부를 뿐 Java와 C# 그리고 C++에서는 메소드라고 다르게만 부를 뿐이니 말이다. 

  1) 접근지정자: 접근 지정자는 메소드 맨앞에 있는 public을 말하는데 일단 접근 지정자에는 public, private, protected 라는 3종류가 있다. 우선은 public은 어디에서든 사용 가능하게 만드는 타입이다. 일명 범용이 public에 속한다. 그리고 private는 클래스 내부에서만 참조 가능하기에 다른 외부에서는 접근을 할 수가 없다. 중요한 기능을 만들고 외부에서는 사용하지 못하게 만들때 사용한다. 마지막으로 protected는 private보다는 접근성의 범위가 넓다. 클래스 내부와 상속 관계에 있는 클래스에서만 접근이 가능한 지정자인데 부모와 자식 관계라면 접근이 가능하다.

  2) 리턴타입: 리턴이란 메소드가 종요될때 어떠한 데이터 타입을 불려진 곳으로 반환하는 것이다. 예를 들면 'return 3+1;' 이라면 이 메소드를 호출한곳으로 4라는 int 타입의 값을 반환한다. 리턴타입은 크게 두 종류로 나누는데 리턴할 데이터가 존재 할경우와 아닌경우 존재할 경우라면 앞에서 언급 했는 '정수 타입이냐? 실수 타입이냐?'로 나누어 질수 있다. 그리고 존재하지 않을 경우에는 'return;' 만으로 끝내주면 된다.

  3) 메소드이름: 메소드 이름은 메소드를 호출 할때 필요한 것으로 의미있는 이름으로 지어 주는 것이 좋다. 만약 덧셈을 하고 싶다면 sum이라는 이름으로 지어 줄수도 있다.

  4) 메소드인자: 메소드인자는 메소드를 호출할때 메소드에서 임의로 필요한 데이터를 메소드에게 넘겨주는 역활을 하는데 이 임의의 데이터는 여러가지 타입의 인자가 있을 수 있다. 예를 들면 int iCnt 라는 인자는 역시 정수 타입의 인자라는 것이다. 물론 변수와 비슷한 구조를 가진다.

  5) 메소드코드: 마지막으로 메소드 코드가 들어 가는 부분인데 중괄호 안에 들어가며, 이 안에서 메소드가 하는 일을 만들어 줄 수 있다.

 

2. 스레드 란?

: 스레드란 하나의 프로그램 내에서 여러 개의 실행 흐름을 두기 위한 모델이며, 프로세스내의 제어의 단일 순차 흐름(single seqeuential flow)을 의미하며, 이를 소프트 웨어 관점에서 해석하면 사람을 프로세서(실행 중인 프로그램)로 볼 수 있고 각 독립적인 일의 단위를 스레드(Thread)라고 한다. 즉 하나의 프로세서에서 병력적으로 여러 개 작업을 처리하기 위해서는 각 작업을 스레드화하여 멀티 스레딩이 가능하게 하는 것이 좋다. 스레드를 생성할 때마다, 해당 스레드만을 위한 메모리 공간(Stack)을 Thread Stack이라 부르고 스택이 필요로 하는 동작을 위한 필요 공간을 따로 제공한다.

그림 1) 일반 적으로 프로세스에서 여러 작업을 할때 메모리 구조

: 하나의 프로세스 내에서 여러개의 작업을 수행할때 메모리 영역의 구조다. 그림 1)에서 보시다시피 모든 영역을 다시 사용 하기때문에 자원 낭비가 심하다.

 

그림 2) 스레드 사용시 프로세스에서 여러 작업을 할때 메모리 구조

: 하나의 프로세스 내에서 여러개의 작업을 수행할때 메모리 영역의 구조지만 이번에는 스레드를 사용 했을때의 메모리 영역의 구조인데 안썼을때와 차이가 있어 보인다. 그렇다. 메모리의 Code에서 Heap영역까지는 공유하기때문에 새로이 메모리에 자원을 낭비 하지 안는다. Stack 영역에서만 자원을 다시 생성하여 사용하므로 자원낭비가 심하지가 않다. 

 

3. 코루틴이 란?

: 코루틴이란 프로그램이 실행될때 불려지도록 만들어진 프로그램의 중심이 되는 일련의 코드들을 Main Routine(메인 루틴) 이라 하고 Main Routine외에 다른 Routine들을 모두 Subroutine(서브 루틴)이라 한다. 그리고 진입하는 지점을 여러 개 가질 수 있는 Subroutine을 coroutine(코루틴)이라고 한다. Coroutine은 호출한 Routine을 대등한 관계로 호출할수 있기 때문에다른 Routine의 종속관계가 아니라고 표현하기도 한다.

 C++에서는 main 함수가 Main Routine이고 그 외에 다른 함수들은 모두 Subroutine이라고 볼 수 있다. 따라서 Coroutine은 함수 내에서 호출한 쪽을 다시 호출할 수 있고 다시 다른 Routine에서 함수의 중간 지점을 호출 할 수 있는 것이라고 할 수 있다.

 

그림 1) Main Routine과 Subroutine

: 그림 1)에서 볼수 있듯이 모든 Subroutine은 Main Routine에서 연결 되는 것을 볼 수 있다. 즉 Subroutine이 Main Routine의 종속 되어 있다고 볼수 있다.

 

그림 2) Coroutine

: 그림 2)에서는 Coroutine의 구조인데 Coroutine에서 보면 어디에서든 Routine이 연결 되어 있는 것을 볼 수 있다. 즉 Routine이  Coroutine에 종속 관계가 아니라 동등 한 관계임을 알 수 있다. 

그림 3) 스레드와 루틴의 관계

: 모든 프로그램은 최소 하나의 Thread를 가지며, 이 Thread를 Main Thread(주 스레드)라고 하며, 이 Main Thread에서 Main Routine이 불려진다. Thread는 흐름의 단위이기 때문에 새로운 Thread가 만들어졌다는 것은 새로운 시간 흐름이 만들어졌다고도 볼 수 있다. 이렇게 프로그램은 여러 개의 Thread를 동시에 실행할 수도 있고, 이거으로 인해 일종의 흐름이 동시에 진행될 수 있다. 이러한 실행 방식을 Multithread(멀티스레드)라고 한다. 즉, 독립적인 시간 흐름을 가지고 Routine을 실행 하는 것이 바로 Thread이다. 

 

 

728x90
반응형

댓글