✏️ 2022-11-18 Today I Learn

@mitoconcrete · November 18, 2022 · 12 min read

[객체지향] 객체지향개론

1. 객체지향이란?

  • 객체는 현실의 사물을 지칭하는 말이다. 이것이 상호작용하며, 우리는 살아간다.
  • 객체지향의 첫 등장은 시뮬레이션 이었다. 현실의 사물을 가상세계로 이동시켜 시뮬레이션함으로서 시/공간적 리소스를 절약하기 위함이었다.
  • 따라서, 객체지향이 지향하는 것은 객체와 객체간 상호작용으로 구성된 현실을 모방한 새로운 세계를 탄생시키는 것 이다.

2. 객체의 의인화

  • 현실의 존재는 객체화가 되며, 추상적인 것들 조차도 구체적인 모습으로 변화한다.
  • 즉, 조금은 능동적으로 움직일 수 있는 상태가 된다.
  • 클래스 안에 존재하는 속성들은 실제세계의 속성들로 구성되어야 한다. 이런 속성들은 또 다른 객체(유/무형의 개념도 포함)로 이뤄져 있고, 따라서 객체는 객체로 이뤄진다고 말할 수 있다.

3. 객체지향 설계 핵심

  • 메시지를 전송/전달 :

    • 객체들의 상호작용은 어떠한 요청을 전달하고 전달받으며 이뤄진다.
  • 객체 간 협력 :

    • 객체마다 특정한 역할책임이 부여되고, 서로에게 메시지를 전달-전송하며 협력하며 목표를 달성한다. 이런 상호협력이 잘 이뤄지지 않는다면, 프로그램의 신뢰도가 저하되고 이는 즉 프로그램의 품질저하로 이어진다.

4. 핵심 키워드

  • 객체지향은 역할, 책임을 가진 객체들이 메시지를 주고 받으며 협력하는 관계로 프로그램을 구성한다. 따라서, 클래스보단 객체에 집중을하는 게 중요하다.

5.[CS] 프로세스와 스레드

프로그램이 RAM(주 기억장치)에 올려져 실행될 때는, 단독으로 실행되는 것이 아니라 CPU로부터 자원을 할당받아 실행된다. 이 때 자원을 할당받는 단위를 프로세스 라고 칭하며, 프로세스 내에서 일을 수행하는 단위를 스레드라고 한다.

1. 프로세스

  • CPU로 부터 독립된 메모리공간을 할당 받는다. 이때 할당받은 공간을 다시 여러공간으로 나누어 관리하는데 이를 프로세스 공간이라고 한다. 구성은 아래와 같다.

    1. Code
    2. Data
    3. Heap
    4. Stack
  • 멀티 프로세스는 이런 프로세스를 여러개를 사용하여 프로그램의 연산을 수행하는 것을 의미한다. 프로세스는 각기 독립적이기 때문에 멀티프로세스 환경에서는 1개의 프로세스 다운이 프로그램에 큰 영향을 미치지 않는다. 다만, 프로세스가 변경될 때마다 Context Switching으로 인해 많은 리소스를 사용하게되며, IPC통신을 사용하여 서로의 자원을 공유하는데 이는 연산이 복잡하여, 많은 부하를 주게된다.

2. 스레드

  • 프로세스 공간에서 Code, Data, Heap 영역을 공유하고, 각 스레드 마다의 Stack을 가지게 된다.
  • 공간을 공유하기 때문에, Context Switching이나 IPC 통신같이 오버헤드를 주는 상황이 없다. 따라서, 자원공유가 매우 빠른 속도로 가능하다. 또한 가까운 위치에 있는 자원을 공유하기 때문에 비용이 적게 소모된다.
  • 단, 같은 공간을 공유하기 때문에 데이터의 무결성을 저하시키기도한다. 같은 데이터에 접근했을경우 해당 데이터에 대한 신뢰를 보장하지 못한다. 이는 프로세스 내의 모든 스레드에 영향을 준다.

[회고] 221118

어제 그렇게 다짐을 했지만, 오늘은 12시 30분에 일어나는 미친짓을 해버렸다. 심지어 어젠 정말 일찍잠들었는데.. 상황은 벌어졌기에, 팀원들과 매니저님들께 연락드리고 죄송하단 말씀을 드렸다. 의도치않게 신뢰를 깨고 있는 것만 같아 정말 죄인이 된 것만 같았다. 남은 기간은 절대 늦지 말아야지..

오늘은 객체지향이 무엇인지에 대한 세션이 마련되었다. 하루종일 자바의 정석 객체지향파트를 읽으면서, 객체지향의 세계에 매료되고 있었는데, 튜터님의 세션은 약간 세계관 설명과 같은 느낌이 있었다. 그래서 더욱더 몰입이 잘되었다.

좋은 징조라고 느껴졌다. 일 경험이 많다고는 할 수 없지만, 내가 잘한다고 평가받았던 대부분의 일은 그 회사의 세계관 즉 미션에 깊이 공감하는 것 들이었다. 맥도날드알바를 과거에 꽤 오래했었다. 알바생들을 관리하는 크루트레이너라는 자리에 올랐었는데, 맥도날드는 해본사람은 알겠지만 업무분담이 꽤 정확하게 구분되어 있다. 포지션이 구분되어있고, 포지션마다 맡은 역할이 있다. 나는 이렇게 포지션을 지켜 각자 업무를 하는 것 만으로도 음식의 퀄리티가 보장되는 것에 큰 흥미를 느꼈고, 이런 시스템을 갖추고 있는 맥도날드의 시스템에 매료되었다. 어떻게 해야 동선을 더 줄일 수 있을까, 어떻게 해야 더 빨리 만들 수 있을까? 하는 고민을 항상했고, 그 결과 매장 내에서 손이 빠른 사람 중 한명으로 등극(?)하게 되었다.

두번째로는 군대에서의 경험인데, 나는 공군을 나왔고 공군에 간 목적이 확실히 있었다. 청주에 친한 친구들 2명이 근무를 하고 있었고, 거기에 가야만 했다. 공군은 시험성적 순으로 자대를 배치하기 때문에, 내가 원하는 자대에 가기 위해선 높은 성적을 받아야만 했다. 공부만 잘해선 안되고, 태도점수가 크게 반영이 되고 그 비중이 꽤 높았다. 따라서, 의도치 않게(?) 모범생이 되버렸는데, 제식이나 생활측면에서 높은점수를 받고 수료했다. 군대에 대해 계속 공부하다보니, 세계관에 매료되어 재미를 느껴버렸고, 이게 좋은결과로 이어진 것이다. 이런 나를 좋게봤던 빨간모자 조교님이 '넌 내 후임이 되었으면 좋겠어'라며 따로 불러 말씀해주신 덕에, 조교 면접까지 보았지만, 결국은 조교가 되지 않았다는것은 여담이다.

마지막으로는 라이프가드 일을 할 때 였는데, 내가 일하던 라이프가드는 퀄리티를 위해 미국에서 라이프가드 교육업체를 불러 관리를 하고 있었다. 따라서, 주기적으로 불심검문이나 실상황시뮬레이션같은게 많이 진행되었다. 또한, 이는 내 평가점수와 직결되었다. 일단 공부는 열심히 했는데, 마냥 걸어다는 것은 정말 지루했다. 그러던 찰나에, 눈앞에서 어떤 아이가 빠져 허우적대는것을 보았고, 부모님들은 수심이 얕은 곳이라 방심했는지 보지 못하였다. 내가 그 아이를 구했을 땐 물을 너무많이 먹어서, 구토를 할 정도로 좋은 상태는 아니었다. 그 아이의 얼굴을 보고 난 이후로 부턴, 더더욱 라이프가드 세계관에 빠져들었다. 하루종일 누군가를 구하는 시뮬레이션을 돌리고, 어느구역에서 익수자가 발생한다면 어떻게 할지 프로토콜도 모두 세워놓았다. 어느새 나는 신뢰받는 동료가 되어있었다.

길게 옛날 이야기를 했지만, 내가 객체지향에 대한 세계관을 들으면서 생각이 들었던 것은 매트릭스의 세계관이었다. 나는 매트릭스라는 영화를 매우 재미있게 봤고 아직도 돌려본다. 객체가 지향하는것은 현실의 모방이기 때문에, 학습하면서 점점 흥미를 느끼게 되었고, 이런 세상을 만드는 방법에 공감이 되자마자 한순간에 몰입이 되었다. 그 이후로, 어떤 개념을 학습하고 설명하는 것이 재미있게 느껴지고 있다. 계속 이 몰입을 유지하면서 튼튼하고 빈틈없게 누구보다 객체지향 세계를 만들 수 있는 사람이 되고싶다는 생각을 하게 되었다.

@mitoconcrete
어제보다 조금 더 성장하기 위해 기록합니다.