[OOP]
[1] 객체지향프로그래밍(OOP)란 현실 세계의 사물들을 하나의 객체로 보고 그 객체로부터 개발하고자 하는 특징과 기능을 뽑아 프로그래밍 하는 기법
[OOP의 5가지 설계 원칙]
[1] 단일책임원칙 : 클래스는 단 하나의 목적을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유여야 한다.
[2] 개방폐쇄원칙 : 클래스는 확장에는 열려있고 변경에는 닫혀있어야 한다.
[3] 리스코프 치환 원칙 : 상위타입 객체를 하위타입으로 바꿔도 프로그램은 일관되게 동작해야 한다.
[4] 인터페이스 분리 원칙 : 클라이언트는 이용하지 않는 메소드에 의존하지 않도록 인터페이스를 분리해야 한다.
[5] 의존 역전 법칙 : 클라이언트는 인터페이스에 의존해야 하며 구현된 클래스에 의존해선 안된다.
[OOP의 특징]
[1] 추상화 : 객체들의 공통적인 기능을 도출하는 방법
[2] 캡슐화 : 실제로 구현되는 부분을 외부에 드러나지 않게 하고 데이터와 기능을 하나로 묶어 관리함
[3] 상속성 : 하나의 클래스가 가진 특징을 다른 클래스가 물려 받을 수 있음, 기존 코드를 재활용할 수 있음
[4] 다형성 : 동일한 이름을 가진 함수를 여러 방법으로 동작하는 것. 오버라이딩, 오버로딩 존재
- 오버로딩 : 같은 이름을 가진 함수에 파라미터를 다르게 하여 여러가지 기능을 구현하는 것
- 오버라이딩 : 상위 클래스의 함수를 하위 클래스에서 재정의 하여 사용하는 것
[5] 동적 바인딩 : 가상 함수를 호출하는 코드를 컴파일할 때, 바인딩을 실행시간에 결정하는 것
- 함수를 호출하면 동적 바인딩을 통해 파생 클래스에 오버라이딩 된 함수가 실행된다.
- 동적 바인딩은 프로그래밍의 유연성을 높여주며 다형성의 개념을 실제로 실행할 수 있다.
[절차지향 vs 객체지향]
절차지향 프로그래밍
- 프로그램을 기능 중심으로 바라보는 방식
- 순차적인 처리를 중요시하는 프로그래밍 기법, 대표적으로 C언어, 컴퓨터의 처리구조와 유사해서 실행속도가 빠름
- 코드의 순서가 바뀌면 동일한 결과를 보장하기 어렵다
객체지향 프로그래밍
- 캡슐화, 상속, 다형성과 같은 기법을 이용할 수 있다.
- 다형성이란 동일한 키보드의 키가 다른역할을 하는 것처럼 하나의 메소드나 클래스가 다양한 방법으로 동작하는 것을 의미함
- 절차지향 언어보다 실행속도가 느리다.
[RESTful API]
- HTTP 통신에서 어떤 자원에 대한 CRUD 요청을 자원과 메소드로 표현하여 특정한 형태로 전달하는 방식
RESTful API의 구성요소
- Resource(자원, URI)
- Method(요청방식, GET or POST 등)
- JSON, XML과 같은 자원의 형태
[함수형 프로그래밍]
- 부수효과가 없는 순수 함수를 이용하여 프로그램을 만드는 것.
- 부수효과가 없는 순수 함수란 데이터의 값을 변경시키지 않으며 객체의 필드를 설정하는 등의 작업을 하지 않는 함수.
[메모리 구조]
-
메모리는 낮은 주소부터 높은 주소 순으로 코드, 데이터, 힙, 스택영역으로 구성된다.
-
코드영역 : 실행할 프로그램의 코드가 저장되는 영역. 프로그램을 실행하면 OS가 HDD에서 실행코드를 메모리로 올리게 되고 CPU가 코드 영역에 저장된 명령어를 하나씩 처리하게 된다.
-
데이터 영역 : 프로그램의 전역변수, 정적변수가 저장되는 영역. 데이터영역은 프로그램의 시작과 함께 할당되며 프로그램이 종료되면 소멸함.
-
힙 영역 : 프로그래머가 직접 관리할 수 있는 메모리 영역으로 이 공간에 메모리를 할당하는 것을 동적 할당이라고 부름. 자바에서는 사용하지 않는 동적 메모리를 가비지 컬렉터가 자동으로 해체해 주며 힙 영역은 낮은주소에서부터 높은 주소로 메모리가 할당됨
-
스택 영역 : 함수의 호출과 함께 할당되며 지역변수, 매개변수가 저장되는 영역. 스택 영역에 저장되는 함수의 호출 정보를 스택프레임이라고 한다.
-
스택영역은 함수의 호출이 완료되면 소멸함. 높은주소에서 낮은주소로 메모리가 할당됨.
[Parameter, Argument의 차이]
- Parameter란 함수를 선언할 때 사용된 변수이며 Argument는 실제 함수가 호출되었을 때 함수의 파라미터로 전달된 값이다.
[Call by Value., Call by reference 차이]
[1] Call by value
- 인자로 받은 값을 복사하여 처리함
- 함수 내부에서 값을 변경하여도 복사된 값이 변경되기 때문에 실제 값은 변하지 않음
- 값을 복사하여 넘기기 때문에 메모리 사용량이 증가함
[2] Call by reference
- 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 줌
- 값을 복사하지 않고 직접 참조하여 속도가 빠름.
- 원래 값이 변경되기 때문에 사용 시 주의해야 함.
[프레임워크와 라이브러리 차이]
프레임워크를 사용하면 사용자가 관리해야 하는 부분을 프레임워크에 넘김으로써 신경써야 할 것을 줄이는 제어의 역전 현상이 적용된다.
[병렬처리 프레임워크의 종류와 특징]
[1] Hadoop
- HDFS를 활용해 데이터를 주고 받는다.
- 데이터가 여러 노드에 분산되어 저장되기 때문에 손실의 우려가 없다.
- 하지만 파일 인풋/아웃풋을 기반으로 작동하기 때문에 처리속도가 느리다.
[2] Spark
- In-Memory 상에서 데이터를 주고받고 연산을 수행한다.
- 메모리를 직접 사용해 데이터를 처리하기 때문에 하둡보다 100배정도 속도가 빠르다.
- 메모리상에서 처리하기 때문에 장애가 발생한 경우 응용 프로그램의 재시작이 필요하다.
[동기, 비동기의 차이]
[1] 동기방식
- 요청을 보내고 실행이 끝나면 다음 동작을 처리함
- 순서에 맞춰서 진행되기 때문에 제어하기가 쉬움
- 여러가지 요청을 동시에 처리할 수 없어 효율이 낮음
- 콜센터 종업원
[2] 비동기방식
- 요청을 보내고 해당 동작의 처리 여부와 관계없이 다음 요청이 동작함
- 작업이 완료되는 시간을 기다릴 필요가 없기 때문에 자원을 효율적으로 관리할 수 있음
- 작업의 결과를 제어하기 어려움
- 이메일