본문 바로가기

일기

2023-02-24

면접 스터디를 시작하고 매주 받는 과제들로부터 조사한 내용들의 정리

 

 

 

 

Parameter와 Argument의 차이

매개변수**(Parameter)** 와 인수**(Argument)** 는 프로그래밍에서 자주 사용되는 용어입니다. Parameter 는 메서드에서 나열되는 변수 명을 의미합니다.
Argument 는 함수 혹은 메서드를 호출할 때, 전달 되는 값 또는 입력 값입니다.

변수 명 번역 의미

Parameter 매개변수 함수와 메서드 입력 변수(Variable) 명
Argument 전달인자, 인자 함수와 메서드의 입력 값(Value)
public class introTest {
    public String introduce(String name, int x) {
        return String.format("안녕하세요 저는 " + name + " 이고 나이는 " + x + "살 입니다.");
    }

    public static void main(String[] args) {
        introTest newInfo = new introTest();
        String result = newInfo.introduce("서혁수", 29);
        System.out.println(result);
    }
}

위처럼 코드를 작성해서 보면…

introduce 의 매개변수는 String name 과 int x 입니다. 해당 메서드를 호출할 때, 반드시 두 개의 값을 인자로 전달해야 합니다.

newInfo.introduce("서혁수", 29); 에서 처럼 메서드를 호출할 때 전달하는 인자가 “서혁수” 와 29 입니다. 이 인자가 String name 과 int x 의 매개변수에 각각 전달됩니다.

이후 메서드가 실행될 때 name 은 “서혁수” 로, x 는 29 로 초기화 되며 결과는… ”안녕하세요 저는 서혁수 이고 나이는 29살 입니다.” 이 반환됩니다.

정리하자면…

즉, 전달인자(Argument) 는 메소드 호출시에 전달되는 값을 말하고, 매개변수(Parameter) 는 메소드에서 전달 받은 값을 말합니다.

 

 

프로세스와 스레드의 차이

프로세스

Process 는 동적인 개념으로 실행중인 프로그램을 말합니다. 운영 체제(OS) 에 의해 할당된 자원(메모리, CPU 등) 을 사용하며, 각각의 프로세스는 독립된 메모리 공간에서 실행됩니다.
기본적으로는 타 프로세스의 자원에 접근하는것이 불가능 하지만, IPC 를 사용하면 가능합니다.
  • IPC 란?
    Inter Process Communication
    프로세스 간의 통신 이라는 의미입니다.
    말 그대로 프로세스들간 서로 데이터를 주고 받는 행위 또는 그에 대한 방법을 의미합니다.
    이를 위해서 커널 영역에서 IPC 라는 내부 프로세스간 통신을 제공하고, 프로세스는 커널이 제공하는 IPC 설비를 이용해서 프로세스간 통신을 수행합니다.
    • 커널 (Kernel)
      즉, 커널은 메모리에 상주하는 부분으로써 OS 의 핵심적인 부분을 의미합니다.
      운영체제 또한 소프트웨어이기 때문에 메모리를 사용합니다.
      다만, 메모리 공간의 제약으로 OS 중 항상 필요한 부분만을 메모리에 올려놓고, 그렇지 않은 부분을 필요할 때 메모리에 올려서 사용합니다. 이 때, 메모리에 상주하는 운영체제 부분을 커널이라고 합니다.

IPC 에는 여러 종류가 있습니다. (Pipe, Message Queue, Shared Memory 등…)

아래에서 두가지 예시를 들어 보겠습니다.

 

메시지 교환 (Message Passing)

커널의 중계를 통해 메시지를 전달하면 큐를 사용해 안전한 방법입니다.
이렇게 하면 OS 에서 스스로 동기화 처리를 해주기 때문에 동기화 문제가 발생하지 않습니다.
하지만, 이로 인해서 성능이 떨어지는 단점이 있습니다.

메모리 공유 (Shared Memory)

두 프로세스간의 공유된 메모리를 생성하고 이용하는 것을 말합니다.
데이터 자체를 공유하도록 지원하며, 한 프로세스에서 변경한 메모리 공간의 내용을 다른 프로세스에 접근할 수 있습니다.
하지만 APP 에서 직접 동기화를 해줘야 하기 때문에 위의 방식 보다 성능은 좋지만 동기화 문제가 발생할 수도 있습니다.

 

위에서 말한 동기화 문제란?

예로 프로세스 A에서 쓰고 B에서 읽는다고 가정합시다. 이 때, A가 쓰기도 전에 B가 읽어버리면 문제가 발생합니다.

즉, A가 썼는지 B가 확인하는 기법이 추가적으로 필요한 문제가 발생합니다. 이런 것을 보고 동기화 문제라고 합니다.

 

 

 

멀티 프로세스

하나의 컴퓨터에서 여러 개의 프로세스를 실행하는 것을 말합니다.

이 덕분에 다수의 작업을 동시에 처리하는 것과 같은 효과를 볼 수 있습니다.

멀티 프로세스도 각각의 프로세스가 독립적으로 실행되기에 하나의 프로세스에서 문제가 발생해도 다른 프로세스에 영향으 미치지 않습니다.

 

용어 정리

  • 실행 단위
    cpu core 에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념
  • (부연 설명이 없는) 프로세스
    하나의 스레드만 가지고 있는 단일 스레드 프로세스
  • 동시성
    한 순간에 여러가지 일이 아니라, 짧은 시간 내에 여러가지 일을 처리하기에 동시에 처리하는 것 처럼 보인는 것을 말합니다.

 

스레드

Thread 는 프로세스 내에서 실행되는 작은 실행 단위를 말합니다.
같은 프로세스 내에 있는 다른 스레드와 메모리를 공유하며, 한 번에 여러개의 스레드가 동시에 실행하는것도 가능합니다. 스레드는 이러한 특징을 활용해 멀티 스레드 프로그래밍으로 프로그램의 성능을 높일 수 있습니다.

추가로 JAM 에서는 프로세스가 존재하지 않고 스레드만 존재합니다.

자바 스레드는 JVM 에 의해 스케줄 되는 실행 단위 코드 블록을 말합니다.

  • 멀티 스레드
    하나의 프로세스 내에서 여러 개의 스레드를 동시에 실행하는 것을 말합니다.
    멀티 프로세스와 달리, 하나의 프로세스 내에서 스레드 간 메모리를 공유하기 때문에, 각각의 스레드가 독립적으로 실행되는 멀티 프로세스보다 훨씬 효율적입니다.
    다만, 여러개의 스레드가 동시에 같은 자원을 사용할 때, 충돌이 발생하지 않도록 스레드가 공유하는 자원에 대한 동기화가 중요합니다.
    1. 동시성
      여러 개의 스레드가 동시에 실행될 수 있습니다.
    2. 공유 메모리
      스레드 간에 메모리를 공유할 수 있습니다.
    3. 경제성
      멀티 프로세스보다 시스템 자원을 덜 사용합니다.

 

정리하자면…

  • 자원을 공유하는 점에서 차이가 있습니다.
    프로세스는 자원을 공유하기 위해서 IPC 기법을 사용해야 하는 반면, 스레드는 같은 프로세스 내에서 실행되며, 메모리 등의 자원을 공유 가능합니다.
  • 생성 속도에서 차이가 있습니다.
    프로세스는 새로운 주소 공간을 할당받고 초기화하는 과정이 있기 때문에 스레드에 비해서 생성속도가 느립니다.
  • Context Switching 오버헤드에 차이가 있습니다.
    프로세스는 각각 독립된 주소 공간을 가직 때문에, 문맥 교환 시 오버헤드가 큽니다. 하지만, 스레드는 같은 주소 공간을 공유하기에 오버헤드가 작습니다.
  • 안정성에서 차이가 있습니다.
    각각의 프로세스는 독립된 메모리 공간에서 실행되기에 문제 발생시 다른 프로세스 영향이 없습니다.
    하지만, 스레드는 같은 메모리 공간을 공유하기에 하나의 스레드에서 오류가 발생하면, 다른 스레드에도 영향이 갈 수 있습니다.

'일기' 카테고리의 다른 글

2023-02-26  (0) 2023.02.25
2023-02-25  (0) 2023.02.25
2023-02-23  (0) 2023.02.23
2023-02-22  (0) 2023.02.22
2023-02-21  (0) 2023.02.21