공통/기타

    함수형 프로그래밍이란?

    프로그래밍 패러다임 명령형 프로그래밍은 무엇을 어떻게 할 것인가에 가깝고, 선언형 프로그래밍은 무엇을 할 것인가와 가깝다. 명령형 프로그래밍 절차지향 프로그래밍: 수행되어야 하는 순차적인 처리과정을 포함하는 방식. 객체지향 프로그래밍: 객체들의 집합과 상호작용으로 애플리케이션을 구성. 선언형 프로그래밍 함수형 프로그래밍: 순수 함수를 조합하고 소프트웨어를 만드는 방식 명령형 프로그래밍에서는 상태를 바꾸는 것을 강조하는 것과는 달리, 함수형 프로그래밍은 함수의 응용을 강조한다. (위키피디아) 함수형 프로그래밍의 개념 일급 시민인 함수 (first-class) 함수를 일반 값처럼 다룰 수 있다. 함수를 변수에 저장할 수 있고, 함수를 인자로 다른 함수에 전달할 수 있으며, 함수에서 새로운 함수를 만들어서 반..

    객체 지향? 객체 지향의 특성

    1. OOP 개념에 대해서 설명하세요. OOP의 배경 OOP 개념이 유행하기 전에, 개발자들은 절차 지향적인 프로그래밍으로 코드를 개발하고 있었습니다. 하지만 점점 프로그램의 규모가 커질수록 유지보수에 어려움이 있는 문제점이 있었는데요. 이러한 문제점을 해결하고자 OOP 패러다임이 탄생하였습니다. (탄생은 아닐지라도 유행..?) 객체란? 먼저 객체란, 실 세계에 존재하는 사물 또는 생명체를 의미합니다. 객체 지향, OOP OOP란, 객체 지향 프로그램으로, 말 그대로 "객체"를 지향하는 프로그램인데요. 객체지향에서 애플리케이션은 객체들의 집합으로 구성되며, 그 애플리케이션의 기능들은 각 객체들 간의 상호작용을 통해서 구현됩니다. 그리고 각 객체들 사이의 상호작용은 객체들 사이에 주고받는 메시지로 표현된다..

    링커와 로더

    컴포넌트 컴포넌트란 배포 단위 (자바의 경우 jar 파일) 여러 컴포넌트를 서로 링크하여 실행 가능한 단일 파일로 생성할 수 있음. 컴포넌트 역사 구시대 절대적 로드 방식으로, 프로그래머가 로드할 메모리의 위치를 직접 정해야 하고, 프로그램 위치가 한번 결정되면 재배치가 불가능. 라이브러리의 경우 라이브러리 함수의 소스 코드를 애플리케이션 코드에 직접 포함시켜 단일 프로그램으로 컴파일 라이브러리는 바이너리가 아니라 소스 코드 형태로 유지 ⇒ 매우 느린 컴파일 속도 애플리케이션과 라이브러리의 분리 컴파일 시간을 단축시키기 위해서, 라이브러리의 소스코드를 애플리케이션 코드로 부터 분리. 함수 라이브러리를 개별적으로 컴파일하고, 컴파일된 바이너리를 메모리의 특정 위치에 로드. 링킹 로더의 등장 위의 문제를 해..

    SOLID 원칙이란?

    SOLID 원칙의 목적은? 변경에 유연하다. 이해하기 쉽다. 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 된다. SRP: 단일 책임 원칙 (Single Responsibility Principle) 모든 클래스 혹은 메소드는 각각 하나의 책임만 가져야 한다.. 그러기 위해서는 각 클래스 혹은 메소드는 응집도는 높고, 결합도는 낮아야 한다. 이를 위해서 각 모듈을 변경 해야하는 이유는 오직 하나 뿐 이어야 한다. 만약, 클래스, 메소드를 변경하는 데 다른 여러가지 이유가 있다면 리팩토링 해보자. OCP: 개방-폐쇄 원칙 (Open-Closed Principle) 소프트웨어 개체는 확장에는 열려 있어야하고, 변경에는 닫혀 있어야 한다. 기능이 확장될 때, 기존의 코드를 변경하지 않으면서 기능을..

    AOP란? 횡단 관심사? 흩어진 관심사?

    AOP가 뭐지? AOP는 Aspect Oriented Programming, 즉 관점 지향 프로그래밍이란, 횡단 관심사(흩어진 관심사)(cross-cutting concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임이다. 횡단 관심사 (흩어진 관심사)가 뭐지? 여기서 먼저 횡단 관심사란 무엇일까요? 이를 이해하기 위해서 두 가지 helloA(), helloB() 샘플 메소드를 봅시다. public void helloA() { System.out.println("Start......"); AAA(); System.out.println("End......"); } public void helloB() { System.out.println("Start......"); BBB(..