Static library

  • 실행 파일 안에 라이브러리가 들어가는 것

Dynamic library

  • 실행 파일에 라이브러리를 가지고 있지 않고, 라이브러리를 공유하는 것
    => 프로그램이 실행할 때(메모리 공간에 올라올 때) 링크를 건다.
  • 라이브러리를 언제든지 교체하여 실행할 수 있다.
  • 라이브러리가 필요할 때 가상 메모리에 매핑 시키는 형태로 동작

 

 

Ref.

https://www.youtube.com/watch?v=JK6U91t7mgY&t=73s

정의

  • 객체(Object) 란? 
    물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른 것을 식별 가능한 것.
  • 객체 모델링? 
    현실 세계 객체의 속성과 동작을 추려내어 소프트웨어 객체의 필드와 메소드로 정의하는 과정
  • 객체지향 프로그래밍? 
    부품에 해당하는 객체를 먼저 만들고, 이것들을 하나씩 조립해서 완성된 프로그램을 만드는 기법

Object Oriented Programming 특징

1. Inheritance (상속)

[1] extends (class 상속)
[2] implementation (interface / class 구현)

 

2. Polymorphism (다형성)

: 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있는 성질 (같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질)
[1] Overloading: 메소드 다중정의
[2] Overriding: 메소드 재정의

[3] Interface : one interface, multiple implementation
하나의 인터페이스를 사용하여 다양한 구현 방법 제공 - 하나의 클래스나 함수가 다양하게 동작

 

3. 캡슐화(Encapsulation)
1) information hiding: 객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것
2) access modifier(접근 제한자) 를 사용하여 노출 여부 결정

목차
1. 간단 용어 정리
2. 
Framework vs. Library 심층 분석



1. 간단 용어 정리

  • API (Application Programming Interface)
    - 개발자가 공개적으로 노출한 멤버들을 사용하여 기능에 접근하고, 해당 기능을 구현하는데 사용된 코드를 숨길 수있는 인터페이스
  • SDK(System Development Kit)
    - 소프트웨어 개발 도구 모음
    - SDK 안에는 개발에 도움이 될 개발 도구 프로그램, 디버깅 프로그램, 문서, API 등이 있다.
  • Software Framework
    - 정의된 API를 제공하는 Software library의 모음
    - 라이브러리와 달리 애플리케이션의 틀과 구조를 결정할 뿐만 아니라, 그 위에 개발된 개발자의 코드를 제어함.
  • Software Library
    - 컴퓨터 프로그램에서 자주 사용되는 부분 프로그램들을 모아 놓은 것.
    - 정적, 동적(링크, 로드) 라이브러리로 나뉨



2. Framework vs. Library 심층 분석

결론: 누가 누구를 호출하느냐의 차이 (who calls who)

프레임워크에서는 프레임워크 코드가 우리 코드를 호출하고, 라이브러리에서는 우리 코드가 라이브러리를 호출한다.

  • Inversion of Control (IOC)
    JavaScript 프레임워크인 jquery를 예로, Document가 준비 상태(document on ready)일 때 우리가 정의했던 콜백을 호출하는 것은 프레임워크이다. 이것은 프레임워크가 담당하는 프레임워크의 통제부분의 흐름이다.

Framework code: 통제 흐름을 정의
Your code: 행동을 정의
Library code: 행동을 정의


  • 프레임워크와 라이브러리의 차이점은 Control에 관한 것. 통제의 흐름(flow of control)이 그 차이이다.
    프레임워크는 당신의 애플리케이션의 흐름을 통제하고, 라이브러리는 그러지 않는다.




Reference.
https://www.youtube.com/watch?v=D_MO9vIRBcA
http://waaan.tistory.com/15


멀티 프로세스와 멀티 스레드는 '동시에 가지 이상의 루틴을 실행 있는 역할'을 하는 것은 동일하다.

그럼 어떠한 차이점이 있을까?




멀티 프로세스(Multi Process)

  • 부모-자식 관계라고 해도 자신만의 메모리 영역을 가지게 된다.
  • 환경변수와 프로세스 핸들 테이블이 상속 가능할 뿐 결국 독립적인 관계이다.
  • fork를 통해 프로세스를 복사한다.
  • 유닉스 계열에서 ps 명령어로 현재 수행되고 있는 프로세스를 확인할 수 있다.
  • 프로세스 간의 통신을 하려면 IPC(Inter Process Communication; 세마포어, 큐, 공유메모리)를 통해야 한다.




멀티 스레드(Multi Thread)

  • 하나의 프로세스가 다수 개의 작업을 각각 스레드를 이용하여 동시에 작동 시킬 수 있다.
  • 스레드는 다음과 같은 공유 메모리를 가진다.






멀티 스레드는 멀티 프로세스에 비해 상당한 이점을 가진다

  1. 컨텍스트 스위칭(Context Switching) 시에 공유 메모리 만큼의 시간(자원) 손실이 줄어든다.
    : 프로세스 간의 컨텍스트 스위칭시 단순히 CPU 레지스터 교체 뿐만이 아니라 RAM과 CPU사이의 캐쉬메모리에 대한 데이터 까지 초기화 되므로 상당한 부담이 발생한다.
  2. Stack을 제외한 모든 메모리를 공유하기 때문에 global(전역), static(정적) 변수 그리고 new, malloc에 의한 모든 자료를 공유할 수가 있다.
    : 이는 프로세스간 통신(ex.pipe)과 같이 복잡한 과정을 거치지 않고 보다 효율적인 일처리가 가능하다는 것을 뜻한다. (핸들 테이블과 환경변수는 덤이다.)


결국 계산기와 메모장 처럼 서로 완전히 별개의 프로그램이라면 

독립적은 프로세스를 구성해야겠지만 서로 관련된 기능들은 멀티 스레드로 구현하는 것이 이득이다!





멀티 스레드의 효율성과 안정성 문제


여러 개의 스레드가 동일한 데이터 공간을 공유하면서 이들을 수정한다는 점에 필연적으로 생기는 문제이다.

멀티 프로세스의 방식의 프로그램에서 하나의 프로세스가 자신의 데이터 공간을 망가뜨린다면 그것은 해당 프로세스의 중단을 낳게 될 것이다. 하지만 멀티 스레드 방식의 프로그램에서는 하나의 스레드가 자신이 사용하던 데이터 공간을 망가뜨린다면 그 결과는 하나의 데이터 공간을 공유하는 모든 스레드를 작동불능 상태로 만들어 버릴 것이다.
이러한 문제에 대비하기 위해 Critical Section 기법이 존재한다.






Ref.

http://divineprocess.tistory.com/entry/Multi-Thread-구축

http://karlsenchoi.blogspot.kr/2011/02/blog-post_23.html

http://m.blog.naver.com/rja1104/220551216367

+ Recent posts