cs 메모장

2024-06-06 면접질문/ 절차지향과 객체지향/ Call By Value Call By Referrence/ 프레임워크와 라이브러리 / DDD

nakgopsae 2024. 6. 6. 21:08

절차지향과 객체지향

 

절차지향

절차지향 프로그래밍은 프로그램이 절차나 함수들의 순서에 따라 수행되도록 설계하는 프로그래밍 패러다임입니다.
프로그램의 순서와 흐름을 먼저 계획하고, 필요에 따라 자료구조와 함수들을 설계하여 구현합니다

- 특징 
- 프로그램은 함수의 집합으로 구성되며 각 함수는 특정 작업을 수행합니다
- 코드의 재사용이 어렵고 유지보수가 어려울 수 있습니다
- 순차적으로 구조적인 문제해결에 적합합니다
- 실행 속도가 빠릅니다

 

객체지향

프로그램을 객체(Object)들의 집합으로 간주하여, 
객체 간의 상호작용을 통해 프로그램을 구성하는 프로그래밍 패러다임입니다

- 특징
- 캡슐화: 데이터와 메소드를 하나의 단위인 객체로 묶습니다
- 상속: 새로운 클래스가 기존의 부모클래스의 속성과 메소드를 물려받습니다
- 다형성: 동일한 인터페이스를 통해 서로 다른 구현을 사용할 수 있습니다
- 추상화: 복잡한 현실 세계의 문제를 단순화하여 모델링합니다

 


Call By Value / Call By Reference 

 

Call By Value

함수에 전달된 값의 복사본을 사용하므로, 함수 내에서 변경해도 원래 변수는 변하지 않습니다

함수 내부에서 매개변수 값을 변경해도 원래 변수에 영향을 미치지 않습니다

기본데이터타입(int, float) 등에서 사용됩니다

 

 

거의 모든 언어가 이 방식을 채택한다 

Call By Reference 

함수를 호출할때 전달된 객체의 참조를 사용하므로 함수 내에서 객체를 변경하면 원래 객체도 변합니다

함수 내부에서 매개변수의 값을 변경하면 원래 변수에도 영향을 미칩니다

주로 객체나 배열과 같은 복합 데이터 타입에서 사용됩니다

 

 


프레임워크와 라이브러리의 차이

프레임워크(Framework)

애플리케이션의 구조를 제공하며 특정한 작업을 수행하는데 필요한 여러가지 라이브러리와
규칙을 포함한 일종의 골격/틀입니다

- 특징
- 제어의 역전(Inversion of Control, IoC)/ 프레임워크가 애플리케이션 전체의 흐름을 제어합니다
- 개발자는 프레임워크가 제공하는 규칙과 구조를 따릅니다

예시: Spring, Django,Angular

 

라이브러리(Library)

특정기능을 수행하는데 필요한 코드/도구의 집합입니다

- 특징 
- 개발자가 직접 호출하여 사용합니다
- 제어 흐름은 개발자에게 있습니다

예시: jQuery,NumPy,React

 

둘의 차이는?

둘의 차이는 제어흐름에 대한 주도성이 누구에게 있는가에 있습니다
어플리케이션의 흐름을 누가 쥐고있느냐에 따라 라이브러리와 프레임워크가 다릅니다

프레임워크는 전체적인 흐름을 프레임워크가 쥐고 있으며 사용자는 그 안에 필요한 코드를 짜 넣으면 되고,
라이브러리는 사용자가 전체적인 흐름을 직접 만들고 필요에 따라 라이브러리를 가져다가 쓰는 것 이라고 할 수 있습니다

 


DDD(Domain-Driven Design) 이란?

도메인 주도 설계는 복잡한 소프트웨어 시스템을 개발할 때 
시스템의 주요 비즈니스 개념과 논리를 중심으로 비즈니스 도메인을 나누어 설계하는 방식입니다

 

도메인이란?

사전적의미로 영역 또는 집합을 이야기한다

DDD에서 말하는 도메인을 비즈니스 도메인이다

비즈니스 도메인은 유사한 업무의 집합입니다

 

특징 추가하기

도메인 모델링: 비즈니스 도메인을 정확하게 모델링하여, 해당 도메인의 개념과 규칙을 코드로 표현합니다.
유비쿼터스 언어(Ubiquitous Language): 개발자와 도메인 전문가가 공유하는 통일된 언어를 사용하여 의사소통을 원활하게 합니다.
엔티티(Entity): 고유한 식별자를 가진 객체입니다.
밸류 오브젝트(Value Object): 식별자가 없으며, 값으로 비교됩니다.
애그리게이트(Aggregate): 관련 객체들을 하나의 단위로 묶어 일관성을 유지합니다.
리포지토리(Repository): 엔티티 및 애그리게이트의 영속성을 관리합니다.
서비스(Service): 특정 비즈니스 로직을 수행하는 도메인 객체입니다.