교착 상태(Deadlock)
  • 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상
  • Multi processing 환경에서 다수의 프로세스가 특정 자원의 할당을 무한정 기다리고 있는 상태




교착 상태(Deadlock)와 기아(Starvation)

 

교착상태 (Deadlock) 

기아(Starvation) 

정의

 다수의 프로세스가 아무일도 하지 못하고 특정 사건 무한대기

특정 프로세스가 자원을 할당 받기위해 무한정 대기 상태 

 발생 원인

상호배제, 점유와 대기, 비선점, 환형 대기 

자원의 편중된 분배정책 

해결방안

예방, 회피, 발견, 회복 기법

Aging 기법 

( ※ Aging 기법 : 대기 시간 등에 따라 우선순위를 높여줌으로써 기아현상을 해결하는 방법)




교착상태 발생 조건
  • 교착상태는 다음 4가지 조건이 모두 성립시에 발생한다.
  1. 상호배제 (Mutual Exclusion) - 한 시점에 한 프로세스만이 자원을 사용 할 수 있다. 즉 한 프로세스에 의해 점유된 자원을 다른 프로세스들이 접근할 수 없다.
  2. 점유와 대기 (Hold-and-wait) - 프로세스가 어떤 자원을 할당 받아 점유하고 있으면서 다른 자원을 요구.
  3. 비선점 (No Preemption) - 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없으며, 점유하고 있는 프로세스 자신만이 해제 가능
  4. 환형 대기 (Circular wait) - 프로세스들 간에 닫힌 연결(closed chain)이 존재한다. 즉 자원 할당 그래프에서 환형이 만들어지는 것.






교착상태 해결 방안
  • 교착상태 예방
        교착상태이 발생하기 위한 4가지 필요충분조건 중에 하나를 배제하는 것
        - 상호배제 : 상호 배제 조건은 공유 자원의 일관성을 유지하기 위해 반드시 필요하기 때문에, 상호 배제 조건을 없앨 수는 없다.
        - 점유와 대기 : 프로세스가 자신이 사용할 모든 자원을 할당 요청하고, 모든 자원을 할당받을 수 있으면 계속 수행, 하나의 자원이라도 할당받을 수 없다면 할당 받지 않은채 대기한다. 이 방법은 가능하지만 자원의 비효율적이다.
        - 비선점 : 자원임시 할당해제 및 원상복구, but 비효율적
        - 환형 대기 : 자원들의 할당 순서를 정한다. but 환형대기 조건을 없애는 것은 프로세스의 수행 지연과 불필요한 자원 할당 거부를 야기할 수 있다.

  • 교착상태 회피
        교착상태 회피를 위한 2가지 기법
            1. 프로세스 시작 거부
                새로운 프로세스와 기존 프로세스들이 요구하는 자원의 개수가 그 자원의 전체 개수보다 적을 경우에 수행을 허용하는 것이다. 이 정책은 최악의 경우, 즉 모든 프로세스들이 동시에 최대 자원을 요구하여 사용함을 가정하고 있으며, 따라서 효율적이지 않다.

            2. 자원 할당 거부 (Banker's algorithm)
                OS는 자원의 상태를 감시하고, 프로세스는 사전에 자기 작업에서 필요한 자원의 수를 제시한다. OS는 사용자 프로세스로부터 자원의 요청이 있으면 모든 프로세스가 일정기간 내에 성공적으로 종료될 수 있는 안전한 상태인지 면밀하게 분석해서, 안전한 상태를 유지할 수 있는 요구만을 수락, 그  외의 요구는 만족될 때까지 계속 거절.

  • 교착상태 발견
        - 시스템의 상태를 감시하는 알고리즘을 통하여 교착상태를 검사하는 알고리즘
        - 시스템의 자원할당 그래프로 교착상태 검출
        - 교착상태 발생 시 자원할당 소거

  • 교착상태 회복
        - 교착상태에 포함되어 있는 모든 프로세스들을 중지시킴.
        - 교착상태에 포함되어 있는 각 프로세스의 수행을 롤백시킴
        - 교착상태게 없어질 때까지 교착상태에 포함되어 있는 프로세스들을 하나씩 종료.
        - 교착상태가 없어질 때까지 교착상태에 포함되어 있는 자원을 하나씩 선점시킴.





 교착상태 해결을 위한 전체 시스템 설계
  1. 내부 시스템 자원을 순서화
            - PCB, 버퍼, Semaphore 등의 자원 순서화
  1. 사용자 작업에 대한 주기억장치 선점
            - 선점은 Paging, Segmentation, Swapping 시스템에서 가장 효율적인 접근법
  1. ​작업이나 작업단계의 자원필요량 산정
  2. 교체 가능 공간 사전 할당 - 요구된 기억장치를 사전에 할당



세마포어
  • 병행처리를 위한 프로세스 동기화 기법
  • 운영체제의 자원을 경쟁적으로 사용하는 다중 프로세스에서, 행동을 조정하거나 동기화하는 기술
  • 다익스트라가 제안
  • 세마포어는 Busy-waiting을 피한다.

세마포어를 이용한 상호배제(Mutual Exclusion)

                    <세마포어 함수 정의>

  • semWait 연산 : 세마포어 값을 확인한다. 세마포어 값을 확인해서 0이면, semWait를 호출한 프로세스를 세마포어 큐에 넣고 블록상태로 전이시킨다.
          만약 세마포어 값이 1이면, 값을 0으로 변경시키고 프로세스는 
          계속 수행된다.
  • semSignal 연산 : 블록되어 있는 프로세스가 존재하는지 확인한다. 만일 블록되어 있는 프로세스가 존재하면 그 프로세스를 깨운다. 반면 블록되어 있는 프로세스가 존재하지 않으면 세마포어 값을 1로 설정한다.

    
            < 세마포어를 이용한 상호배제 >

강성 세마포어 & 약성 세마포어
  • 강성 세마포어 : 큐에 연결된 프로세스들을 깨울 때 선입선출(FIFO) 정책을 사용하는 세마포어.
  • 약성 세마포어 : 큐에 연결된 프로세스들을 깨울 때 순서를 특별히 명시하지 않은 세마포어.


세마포어의 유형
  • Binary Semaphore 
            목적 : 상호배제, 프로세스 동기화
            세마포어 변수: 0 or 1
  • Count Semaphore(general semaphore) 
            목적 : 초기에 동시에 진행가능한 프로세스 개수 정의 가능
            세마포어 변수 : 0,1,2 ....



세마포어와 Mutex의 차이
  • mutex는 객체를 얻거나 반납할 때 사용하는 프로그래밍 플래그이다. 사용하려는 데이터가 공유될 수 없거나 또는 연산이 동시에 수행될 수 없는 경우, mutex가 설정되고 접근/연산을 시도한 프로세스들은 블록된다. 데이터에 대한 접근이 더 이상 필요 없거나 또는 연산이 완료되면 mutex의 락은 해제된다.
  • mutex와 이진 세마포어의 핵심 차이는 mutex의 경우 락을 설정한(값을 0으로 설정한) 프로세스만이 락을 해제할 수 있다. 반면, 이진 세마포어의 경우 락을 설정한 프로세스와 해제하는 프로세스가 서로 다를 수 있다.




'운영체제' 카테고리의 다른 글

캐시 메모리(Cache Memory)  (0) 2018.08.28
교착상태(Deadlock)  (0) 2018.08.28
병행성과 상호배제&상호배제 알고리즘  (0) 2018.08.26
Thread  (0) 2018.08.24
Context Switch (문맥 교환)  (0) 2018.08.23


병행성의 주요 용어 정리
  • 경쟁 상태 (Race condition)
- 두개 이상의 쓰레드나 프로세스가 공유 자원을 동시에 접근하려는 상태.
  • 상호 배제 (Mutual exclusion)
     - 특정 프로세스가 공유자원을 사용하고 있을 경우 다른 프로세스가 해당 공유자원을 사용하지 못하게 하는 조건
  • 임계 영역 (Critical Section)
- 공유 자원을 접근하는 프로세스 내부의 코드 영역. 다른 프로세스가 이 영역에 있을 때, 이 프로세스 또한 이 영역을 수행할 수 없다.       
  • 기아 (Starvation)
     - 특정 프로세스가 수행 가능한 상태임에도 불구하고 매우 오랜 기간 동안 스케줄링 되지 못하는 경우.
  • 교착 상태 (Deadlock)
 - 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상.
  • 원자적 연산 (Atomic operation)
- 하나 또는 여러 개의 명령어들로 구성된 함수 또는 액션으로 더 이상 분할할 수 없는 단위. 따라서 다른 어떤 프로세스도 중간 상태를 볼 수 없으며, 연산을 중단 시킬 수 없다. 이 명령어들은 모두 수행되거나 하나도 수행되지 않음이 보장된다. 원자성은 병행 프로세스들에게 고립(isolation)을 보장한다.

    



 Critical Section 문제의 해결을 위한 필요조건
  • Mutual Exclusion
- 한 프로세스가 임계영역(Critical section)을 수행하고 있으면, 다른 프로세스는 그 임계영역을 수행 할 수 없다.
  • Progress
- 임계영역을 수행하고 있는 프로세스가 없고, 한 프로세스가 임계영역에 진입하려고 하면 즉시 임계영역에 들어갈 수 있어야 한다.
  • Bounded Waiting
- 임계영역에 접근하고자 하는 프로세스의 수행이 무한히 미루어져서는 안된다. 즉, 교착상태 및 기아가 일어나지 않아야 한다.





Mutual Exclusion 문제의 해결방안

  • 소프트웨어적 해결 알고리즘
    • 데커(Dekker) 알고리즘 - 두 프로세스가 동시에 임계 영역에 들어가려고 할 때 하나만 들어가게 하는 알고리즘. 한 프로세스가 이미 임계 영역에 있다면, 다른 프로세스는 전 프로세스가 끝나기를 기다린다. (busy waiting)
    • 피터슨(Peterson) 알고리즘 - 데커 알고리즘과 유사하며, 두 프로세스가 동시에 임계영역에 진입하려고 하면 turn 변수가 늦게 수행된 프로세스가 기회를 양보한다.
    • 빵집(Bakery) 알고리즘 - 데커/피터슨 알고리즘은 2개의 프로세스에 대해서만 가능하지만,  Bakery 알고리즘은 2개 이상의 프로세스에 대해서 사용 가능한 알고리즘이다.

  • 하드웨어적 해결 방법
    • Test & Set 
    • Compare & Swap
            - 하드웨어적 해결방법의 장점 : 단순하다. 사용하기 쉽다. 여러개의 임계 구역에서 사용 가능하다.
            - 하드웨어적 해결방법의 단점 : Busy-waiting이 발생(CPU 활용도 저하), Deadlock이 발생 할 수 있다.



'운영체제' 카테고리의 다른 글

교착상태(Deadlock)  (0) 2018.08.28
세마포어와 뮤텍스 (Semaphores&Mutex)  (0) 2018.08.26
Thread  (0) 2018.08.24
Context Switch (문맥 교환)  (0) 2018.08.23
프로세스 (개념, 상태, PCB)  (0) 2018.08.23

  1. 프로세스 & 쓰레드

프로세스의 특징
  • 자원 소유권 - 프로세스는 자신의 이미지를 위한 가상주소 공간을 포함
  • 스케줄링/실행 - 프로세스 수행은 하나 이상의 프로그램을 통과하는 수행 경로를 따른다. 한 프로세스는 다른 프로세스들과 번갈아 가면서(interleave) 수행될 수 있다. 따라서 프로세스는 프로세스 수행 상태와 디스패칭 우선순위를 가지며, 운영체제에 의해 스케줄되고 디스패치되는 개체

 쓰레드
  • 프로세스 안에서의 실행 단위
  • 실행 상태를 가진다

 CPU 디스패칭 단위는 쓰레드 또는 경량 프로세스라고 하며,
자원 소유권의 단위는 프로세스 또는 task라고 한다.





  2. Resources of Process and Thread - 프로세스와 쓰레드의 자원
 
  • 프로세스는 Code, Data, Stack, Memory for registers context(program counter, register etc.)로 구성된다
  • 쓰레드는 Stack, Memory for registers context(program counter, register etc.):thread control blcok로 구성된다
  • 프로세스 내의 모든 쓰레드들은 그 프로세스의 상태와 자원을 공유한다. 



     <한 프로세스 내부 모습(각 쓰레드는 각각 registers, stack을 가지며 code,data,files를 공유)>



   3. 멀티쓰레딩 (Multithreading)
  • 멀티쓰레딩이란 운영체제가, 하나의 프로세스 내에서 수행되는 여러 개의 쓰레드를 지원하는 기능이다.
  • 멀티쓰레딩에서 프로세스는 동시에 실행될 수 있는 쓰레드로 분할된다.
  • 단일 쓰레드 OS로는 MS-DOS, Original UNIX가 있다.
  • 멀티 쓰레드 OS로는 Windows, Solaris, Linux. Mach 등이 있다.

                                < Multithreading Example on a Uniprocessor >





   4. 멀티쓰레딩의 이점
  • 새로운 프로세스를 생성하는 시간보다, 기존 프로세스 내에서 새로운 쓰레드를 생성하는 시간이 더 짧다.
  • 프로세스 종료시간보다 쓰레드 종료시간이 더 짧다.
  • 프로세스들 간 교환보다 같은 프로세스에 있는 두 쓰레드 간 교환이 효율적이다.
  • 프로세스 간의 통신보다 한 프로세스 내에서 쓰레드 간의 통신이 더 빠르다. 
            -> 같은 프로세스 내에 쓰레드들은 메모리와 파일을 공유하기 때문에 커널을 호출하지 않는다.
            -> 프로세스 간 통신 (IPC) : 커널 호출 시간 필요 = 큰 오버헤드 필요




    5. Thread 유형
  • 사용자 수준 쓰레드
             - 쓰레드 관리와 관계된 모든 일은 응용이 수행하며 커널은 쓰레드의 존재를 알지 못한다.
             - 사용자 영역에서 쓰레드 연산을 수행
             - 사용자 수준 쓰레드의 장점
                    + 스케줄링 결정이나 프로시저 동기화를 위해 커널을 호출하지 않으므로 오버헤드가 적다.
                    + 운영체제에서 쓰레드를 지원 할 필요가 없으므로,어느 OS든 실행 할 수 있다. (즉, 이식성이 높다)
                    + 기존 OS 스케줄링을 방해하지 않고 응용에 맞춘 사용자 수준 쓰레드 스케줄링 알고리즘이 가능하다.
             - 사용자 수준 쓰레드의 단점
                    + 한 개의 사용자 수준 쓰레드가 블록되면, 그 프로세스의 모든 쓰레드가 블록된다.
                    
             
                                           

  • 커널 수준 쓰레드
            - 쓰레드 관리와 관련된 모든 작업이 커널에 의해 이루어진다. 
            - 응용 영역에는 쓰레드 관리를 위한 코드가 없고, 단순히 커널 쓰레드 기능에 대한 API가 있다. (ex. Windows, Linux)
            - 커널 수준 쓰레드의 장점
                + 커널이 각 쓰레드를 개별적으로 관리 할 수 있다.
                + 응용 프로그램은 입출력 작업이 끝날 때까지 다른 쓰레드를 사용해 다른 작업을 할 수 있다.
            - 커널 수준 쓰레드의 단점
                + 스케줄링과 동기화를 위해 커널을 호출해야하므로 오버헤드가 증가된다.
                + 이식성이 떨어진다.
                + 시스템이 달라지면 해당 운영체제에서 제공하는 쓰레드 API를 사용해 프로그램을 수정해야 한다.

                                           








문맥 교환 (Context Switch)
  •  문맥 교환(Context Switch)이란 하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 실행중인 프로세스의 상태(문맥)를 보관하고 새로운 프로세스의 상태를 적재하는 작업.
  •  한 프로세스의 문맥은 그 프로세스의 프로세스 제어 블록(PCB)에 저장되어 있다.







Context Switch는 언제 일어나는가?
  • Termination of a process (프로세스의 종료)
            ☞ 에러,예외가 나타나거나 보통의 프로세스의 종료
  • Expiration of time slice ( time slice 만료 )
             가능한 CPU 점유 시간이 만료되었을 경우
  • Blocking system calls (also called supervisor call)
             I/O 요청, 파일 오픈과 같은 시스템 콜의 경우
             Page fault  - 메모리 주소가 가상 메모리에 있으므로 main memory로 가져와야 한다
  • I/O 인터럽트
             I/O가 완료되면 Block 상태의 프로세스를 Ready 상태로 바꾼다.
            



Steps of Context Switch  - Context Switch 단계

  1. 프로그램 카운터와 다른 레지스터들을 포함한 프로세스의 문맥을 저장
  2. 현재 실행 중인 프로세스(Running 상태에 있는)의 PCB를 갱신
  3. PCB를 적당한 Queue로 옮긴다. ( Queue - Ready or Blocked or ready/suspend)
  4. 실행 할 다른 프로세스를 선택
  5. 선택 된 프로세스의 PCB를 갱신
  6. 메모리 관리 데이터 구조 갱신
  7. 선택 된 프로세스의 문맥 복원



'운영체제' 카테고리의 다른 글

교착상태(Deadlock)  (0) 2018.08.28
세마포어와 뮤텍스 (Semaphores&Mutex)  (0) 2018.08.26
병행성과 상호배제&상호배제 알고리즘  (0) 2018.08.26
Thread  (0) 2018.08.24
프로세스 (개념, 상태, PCB)  (0) 2018.08.23

Process : 프로세스
  • 실행중에 있는 프로그램
  • 프로세서에 할당되어 실행 될 수 있는 entity
  • 프로세스 제어 블록(PCB : Process Control Block)을 할당 받는 개체
  • 컴퓨터에서 실행되는 프로그램의 인스턴스



Reasons for Process Creation : 프로세스의 생성 이유
  1. OS에 의해 생성
  2. Interactive login  - 터미널에서 사용자가 시스템에 로그인
  3. 존재하는 프로세스에 의해 생성 - 사용자 프로그램은 OS에게 자식 프로세스를 생성하라고 요청 할 수 있다.
  4. user command에 의해 생성 
 ☞ foreground (interactive) mode에서 프로그램 실행   
 ☞ background (batch) mode에서 프로그램 실행





Process States : 프로세스 상태   

  • Dispatcher(kernel function)은 PC(Program Counter)에 있는 주소값을 가져와서 한 프로세스로부터 다른 프로세스로 switch 해준다. ( 다른 프로세스로 자원을 할당해준다)
  • 프로그램 카운터(Program Counter,PC)는 중앙처리장치 내부에 있는 레지스터 중의 하나로서, 다음에 실행될 Process의 주소값이 저장되어있다. (=명령어 포인터)

<Five-State Process Model>
  • Ready : Process가 CPU를 점유 할 준비가 된 상태
  • Running : Process가 CPU를 점유하고 있는 상태
  • Blocked (= wait state, sleep state) : Process가 event가 나타나는 것을 기다리는 상태 (ex. I/O completion)




프로세스 제어 블록 ( PCB : Process Control Block) = (TCB : Task Contol Block)
  • 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자료구조
  • 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 Terminated 되면 PCB는 제거
  • OS에 의해 만들어지고 관리
  • PCB가 가지고 있는 정보
              프로세스 식별자(Process Identifier)
             프로세스 상태 (Process State) 
             프로그램 카운터 (PC:Program Counter)
             메모리 관리 정보 : 해당 프로세스의 주소 공간 등
             CPU 레지스터 및 일반 레지스터
             CPU 스케줄링 정보 : 우선순위, 최종 실행시각, CPU 점유시간 등
             프로세스 계정 정보 : 페이지 테이블, 스케쥴링 큐 포인터, 소유자, 부모 등
             입출력 상태 정보



 프로세스 문맥 ( Process Context )
  • Context : 프로그램의 실행 환경
  • User Context 
             - Code : 실행 될 사용자 프로그램 코드 (instructions) 
             - Data : 프로세스의 전역 변수
             - User Stack
                    LIFO 구조
                    사용자 기능을 호출하는 정보를 저장하는 데 사용 (  함수의 지역 변수, 함수의 인자, register value )
  • System Context
             System stack ( kernel stack) : 커널 함수를 호출하기 위한 정보를 저장하는 데 사용
             Process Control Block (PCB) : 프로세스를 제어하기 위해 운영 체제에 필요한 데이터



'운영체제' 카테고리의 다른 글

교착상태(Deadlock)  (0) 2018.08.28
세마포어와 뮤텍스 (Semaphores&Mutex)  (0) 2018.08.26
병행성과 상호배제&상호배제 알고리즘  (0) 2018.08.26
Thread  (0) 2018.08.24
Context Switch (문맥 교환)  (0) 2018.08.23

 쉬운 문제지만 코틀린을 배우는 초기단계라 review 하겠습니다


 해결방법 : "CAMBRIDGE" 에 들어간 알파벳을 input에서 빼고 출력하는 문제입니다. 

대문자만 필요하므로 크기 26짜리 배열 alpha를 Boolean 배열로 선언하고, 

"CAMBRIDGE"의 알파벳 하나하나의 자리에 true로 하였습니다.

그리고 입력받은 input에 filter을 통해 true가 아닌것 (즉, false 인 것)만 출력하도록 하였습니다.


 ▼ 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.io.BufferedReader
import java.io.InputStreamReader
 
fun main(args: Array<String>) {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val chk = "CAMBRIDGE"
    val alpha = BooleanArray(26)
    chk.forEach { alpha[it.toInt() - 65= true }
 
    val input = br.readLine()
    input.filter { !alpha[it.toInt() - 65] }.forEach { print(it) }
    println()
}
cs





  Kotlin의 Any Class와 타입 체크



※ 정리

 ☞ Any : kotlin.Any 모든 코틀린 클래스의 최상위 (java.lang.Object)

 ☞ type check : 런타임에서 type을 검사,  'is' , '!is' 연산자 (java의 instanceOf와 같음)




 ▶ Any type은 어떠한 자료형으로도 바뀔 수 있습니다.

 ▶ a3의 type이 처음에는 String -> Double형 -> Boolean 형으로 바뀐다.


1
2
3
4
5
    val a: Any = 1234  // kotlin.Any,  코틀린의 최상위 타입 클래스=? java Object와 비슷하지만 똑같지는 않다
    val a2: Any = 'A'
    var a3: Any = "xyz"
    a3 = 3.141592  // double
    a3 = true // boolean
cs

 




 ▶ Type checkis로 한다. 

 ▶ 만약, 아닌 것을 판달할 때에는 is 앞에 !을 붙인다. ex) 7번째줄에서... val b2 = b1 !is Int

 ▶ 7번째 줄에서, b1이 Int형이면 b2는 true, Int형이 아니면 false가 된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
    val a: Any = 1234  // kotlin.Any,  코틀린의 최상위 타입 클래스=? java Object와 비슷하지만 똑같지는 않다
    val a2: Any = 'A'
    var a3: Any = "xyz"
    a3 = 3.141592  // double
    a3 = true // boolean
    val b1 = 365
    val b2 = b1 is Int  // 'is' type check => java의 instanceOf
 
    println("b1 is Int = ${b1 is Int}, b2 = ${b2}")
    println("a is Int = ${a is Int}")
    println("a2 is Char = ${a2 is Char}")
    println("a3 is Boolean = ${a3 is Boolean}")
    println("a3 is String = ${a3 is String}")
cs




 ▼ 위 코드의 결과 화면




 



'Kotlin' 카테고리의 다른 글

[Kotlin] null가능형, 예외 및 null 안전성  (0) 2018.09.20
[Kotlin] 기본 자료형, 변수와 상수  (0) 2018.07.18

   BASIC TYPES

 ▶ Types : 자료형, 타입 (Java와의 호환성)

 ▶ Basic Types : 기본형에 해당하는 타입들, 클래스들 (Primitives)

 ▶ Value : 값 (수량, 코드값, 부호, 상태, 참거짓 등과 같은 데이터의 표현)

 ▶ Literal : 리터럴, 기호화된 간략식 관용 표현, L, f, F, ., 0x, ob

 ▶ Variable / Constant : 기본형 변수/상수

 ▶ Type Inference : 값에 의한 타입 추론, 명시적 타입 선언

 ▶ Numeric ( Integer / Real number ) : 수치계열(정수,실수) 

 ▶ Boolean : 논리계열, true, false

 ▶ Char, String : 문자계열 (Unicode)


 기본 자료형

1
2
3
4
5
6
7
8
9
10
11
12
    val a: Byte = 127
    val b: Short = 30000
    val c: Int = 2000
    val d: Long = 230300000L // L을 생략할 수도 있지만 명시하는게 좋음
    val f1: Float = 3.14f
    val f2: Float = 3.14F   // 대문자 F도 가능
    val g: Double = 32.3242332323
    val h: Boolean = true // 논리형
    val h2 = false 
    val a2 = 1234
    val i = 'A' // Char Type Inference
    val i2: Char = 'B'
cs


   변수와 상수의 선언

     val 상수명: Type = Value , var 변수명: Type = Value 꼴이며, 

  ※val c: Int = 2000 과 같이 명시적으로 타입을 선언 할 수 있고, val c=2000과 같이 Type을 생략하고 선언 할 수 있다.

 ( 값에 따라 type을 결정해준다)

  


  VARIABLE(변수) VS. CONSTANT(상수)

 ▶ variable: 변수 (저장하는 데이터가 언제든 변할 수 있는, 메모리 공간에 붙인 이름) 

 ▶ constant : 상수 (단 한번 초기화되는 value 값을 갖는, 일종의 네임드 상수); java의 final

  

1
2
3
4
  val a=7
    // a++  <-  a가 상수라서 불가능.
    var b=5
    b++  // <- b가 변수라서 가능.
cs

 ※위와 같이 상수(val 타입)는 읽기 전용 변수로써 수정 불가능



'Kotlin' 카테고리의 다른 글

[Kotlin] null가능형, 예외 및 null 안전성  (0) 2018.09.20
[Kotlin] Any 클래스, 타입 체크  (3) 2018.07.18

+ Recent posts