본문 바로가기

1:1 개발 공부

병렬처리 정의, 코드와 주석의 관계, 클래스-생성자, 소멸자, 객체 초기화

 

클래스 생성자, 소멸자

 

 

병렬처리의 정의에 대해서 말해볼까 합니다.

메모리는 무한정이지 못합니다. 그래서 발생하는 일들이 있습니다. 예를 들어, 인스턴스 1000(천)개를 만들 건데 객체가 10000(만)개가 필요할 수 있습니다. 그렇게 되면, 메모리가 부족해서 인스턴스를 메모리에 다 올리지 못하게 되겠죠? 그렇다면 어떻게 할까요? 사람 세계에서는 만개라고 치고, 컴퓨터가 10개의 역할을 해주게 됩니다. 동시에 행할 수 없기 때문에 메모리에서 뺐다가 다른 인스턴스에 주었다가 즉, 스와핑을 아주 빠르게 실행 합니다. 

비유하자면 이렇습니다. 책은 10권인데, 100명에게 책을 주어야하는 상황이 옵니다. 그러면 책 10권을 A에게 주었다가, A에게 준 책을 B에게 주었다가 하는 식인 거죠. 우리가 볼땐 줬다 뺐는 상황이지만 컴퓨터는 이 과정을 엄청나게 빠르게 하는 것입니다. 그러니까 내 손엔 항상 책이 있는 것처럼 느껴지는 것이죠. 이것을 바로 병렬처리라고 합니다. 알파고에서 계산할 경우 병렬처리를 합니다. 

 

병렬처리를 할 때도, CPU는 일을 하고 있겠죠? CPU는 보통 프로그램들의 메모리를 이용하여 계산 해줍니다. 계산값을 중간에 저장하기 위해 레지스터를 사용합니다. 그런데 CPU가 할 작업들이 너무 많으면 이 경우, GPU를 이용합니다. GPU를 CPU처럼 범용적인 목적에서 사용한다고 하여, GPGPU 라고 합니다.

 

CPU도 점점 발전하여 CPU에 도움을 주는 것을 MMS가 있었습니다. MMS가 SSE로 발전 하였고 이것은 또 다시 AVX로 발전했습니다. 


코드와 주석의 관계 

-주석은 없어도 되는 존재입니다. 코드와 주석은 아무런 상관이 없습니다. 코드를 잘 짜면 주석을 달 필요가 없다는 의미입니다.


클래스 1) 생성자 2) 소멸자  /  객체 초기화

 

클래스에는 속성과 메서드가 있어야합니다.

여기에 특수한 메서드가 있습니다. 그것을 생성자와 소멸자라고 합니다.

 

객체 A = new A

 

메소드에 값을 넣는 것을 초기화라고 합니다. 생성하면서 자동으로 호출 되는 것이 바로 '생성자'입니다.

객체는 초기 상태라는게 있어야 하죠? 이게 없으면 메모리에 올라갈 때의 값이 알 수도 없는 (쓰레기 값)이 들어갑니다. 요즘 좋은 랭귀지들은 자동으로 '0000' 으로 만들어놓기도 합니다. 

 

인스턴스를 생성하면, 생성자와 소멸자가 동시에 생기는데 생성자를 초기값에 미리 지정해놓을 수 있습니다. 그렇게되면 생성자가 호출되면서 초기값이 세팅됩니다. 이렇게 되고 싶다면 생성자를 개발자가 직접 만들어야합니다. 이러한 작업을 오버로딩이라고 합니다.

 

객체를 초기화하는 방법은 세 가지가 있는 것이죠.

첫째는, 내가 직접 인스턴스(객체)를 만들어 내는 것이고, 객체에 메소드를 호출해서 속성값을 세팅하면 됩니다.

둘째는 아무것도 안하면 컴파일러의 0000와 같은 자동값이 나타납니다. 

셋째는 생성자를 직접 지정합니다. 그렇게 하기 위해선 생성자를 직접 선언해야 합니다.

 

초기화하는 이유는 객체라는 게 처음으로 내 메모리에 올라가는데 아무것도 없고, 이상한 값이 있기 때문에 개발자가 모르기 때문입니다. 생성자를 호출하는 것은 객체가 만들어졌을 때, 초기값이 없으면 혼돈이 생기기 때문에 초기값을 만들기 위해서 생성하는 것이라 보면 되는거죠

 


 

팩토리메서드

- 여러개의 생성될 아이들을 매서드를 하나 만들어놓고 공장에서 호출하면 다양한 객체가 나옵니다. 

 


This

- > 객체를 생성했을 때, 나 자신을 가리키는 포인터 같은게 있는게 그게 this이고 모든 프로그램이 예약해놓은 것입니다. 그래서 변수명이나 클래스명으로 사용하면 안됩니다.