반응형

2737

C++ : 가변 인자 템플릿 : 장점, 사용법, 예제, 개념

가변인자 템플릿 printf() 함수는 몇개의 매개 변수든 받을 수 있습니다. 템플릿 프로그램ㅇ에서도 똑같이 할 수 있습니다. 이것을 가변 인자 템플릿이라고 합니다. 다양한 매개변수 개수와 자료형을 지원하는 클래스 또는 함수 템플릿을 의미합니다. 매개 변수 목록에서 생략 부호(...)를 씁니다. 가변 인자 템플릿 클래스 template (Arguments... args) { } std::make_unique() 가변 인자 템플릿을 사용하는 대표적인 클래스는 바로 make_unique() 함수입니다. 매개변수가 얼마나 많이 나오는 지에 대해 알 수 없기 때문에, 활용되다는 것을 알 수 있습니다. 또 추가적으로 share_ptr에서도 활용되고 있다는 것을 알 수 있습니다. 가변 인자 템플릿 활용 활용법을 생..

SW/C++ 2020.04.19

품질 속성 관련 : 개념, 정의, 개요

품질 속성의 개념 먼저 요구사항 그룹을 지칭하는 명칭인 품질속성의 개념에 대해 알아보겠습니다. 품질에 대하여 말할 때 우리는 시스템의 품질에 대하여 말하기도 하고 개발 과정의 품질에 대하여 말하기도 합니다. 그래서 품질속성들은 성능, 수정 용이성, 개발시간, 개발팀의 협력수준 등 시스템과 개발에 관련된 많은 품질속성들이 존재합니다. 품질속성을 개발에 관련된 개발 품질속성과 시스템이 실행될 때 드러나는 시스템 품질속성으로 나누어 대표적인 품질속성들을 보여줍니다. 품질속성 중에는 요구사항으로부터 명시적으로 잘 언급되지 않는 것들도 있습니다. 그럴 경우에 아키텍트는 그런 품질속성들이 시스템과 시스템 개발에 영향을 미치고 있다는 것을 인식해야 합니다. 품질 요구사항은 검증 가능해야 합니다. 이 말은 품질 요구사..

C++ : module : 모듈 시스템 개요, 사용 방법, 장단점

모듈 시스템 C++17 까지도 여전히 표준으로 들어오지 않았습니다. 허나 비주얼 스튜디오에서 experimental:module 플래그를 활성화해서 사용할 수 있습니다. 표준이 된다면 컴파일이 엄청나게 빨라진다고 합니다. cpp와 h 파일로 나눌 필요가 없어지며, 이것은 컴파일 속도를 높이기 위한 것이었습니다. 마치 Java의 패키지 처럼 동작합니다. 여전히 앞에 시련이 있습니다. cpp와 h가 둘 다 있는 레거시 코드들은 앞으로 어떻게 처리를 해야할까요. 또한, #define을 활용한 코드들이 많이 있는 경우에는 어려움이 있을 수 있습니다. module Math; export int Add(int a, int b) { return a+b; } export int Multiply(int a, int b)..

SW/C++ 2020.04.18

소프트웨어 아키텍처 드라이버 : 개념, 개요, 정의

아키텍처 드라이버 아키텍처적으로 중요한 요구사항을 아키텍처 드라이버라고 합니다. 또한 시스템의 아키텍처 드라이버를 모두 다 아키텍처 설계의 출발점으로 이용하지 않습니다. 그 이유는 너무 많은 요구사항을 설계의 출발점으로 이용하려 하면, 아키텍처 설계에 들어가는 노력이 크게 늘어나기 때문입니다. 아키텍처 설계의 출발점으로 쓰기 위하여 선택한 아키텍처 드라이버들을 선정된 아키텍처 드라이버라고 부릅니다. 흥미로운 점은 항상 품질 요구사항이나 제약사항으로부터 나온다는 것입니다. 시스템이 어떤 서비스를 제공하는지는 시스템의 아키텍처에 영향을 주지 않고, 오히려 그 서비스가 어떤 수준, 성능으로 제공되어야 하는지가 아키텍처를 결정하기 때문입니다. 예를 들어 아키텍처가 기능 중심으로 시스템을 나누기로 할 때 그 이점..

소프트웨어 아키텍처 설계 : 개념, 정의, 개요

소프트웨어 아키텍처 설계 커다란 건축물을 만들기 위하여 사람들은 먼저 설계도를 그립니다. 설계도를 그리는 이유는 건축물을 만들 때 설계도에 맞추어 만들려는 의도가 있고, 원하는 모습과 기능, 특징, 속성을 건축물을 만들기 전에 확인해보기 위함입니다. 크고 복잡한 소프트웨어 시스템을 만들 때에도 마찬가지로 먼저 설계를 해야 합니다. 그 이유는 만드는 소프트웨어 시스템이 원하는 기능을 갖고 원하는 품질을 갖도록 하기 위해서 입니다. 건축물의 경우도 마찬가지지만 설계와 설계의 검증 없이 시스템을 만들었을 경우 기능이 잘못되었거나 품질이 원하는 수준에 미달하여 시스템을 다시 만들거나 고쳐야 하는 경우 큰 비용과 시간이 소요되게 됩니다. 더구나 시스템 개발은 보통 완료된 후에도 오랜 시간 지속적으로 업그레이드되면..

C++ : filesystem : 파일 복사, 디렉터리 이동, 바꾸기, 삭제, 목록, 권한 : 예제

파일 복사하기 namespace fs = std::experimental::filesystem::v1; int main () { fs::path originalTextPath = "C:\\examples\\myRank.txt"; fs::path copiedTextPath = "C:\\examples\\copiedMyRank.txt"; fs::path originalDirPath = "C:\\examples\\folder"; fs::path copiedDirPath1 = "C:\\examples\\copiedFolder1"; fs::path copiedDirPath2 = "C:\\examples\\copiedFolder2"; fs::copy(originalTextPath , copiedTextPath); ..

SW/C++ 2020.04.16

Java : Spring : BeanPostProcessor : 개념, 방법, 예제, 구현

BeanPostProcessor Bean 객체를 정의할 떄 init-method 속성을 설정하면 객체가 생성될 떄 자동으로 호출될 메서드를 지정할 수 있습니다. 이 때 BeanPostProcessor 인터페이스를 구현한 클래스를 정의하면 Bean 객체를 생성할 때 호출될 init 메서드 호출을 가로채 다른 메서드를 호출할 수 있도록 할 수 있습니다. postProcessBeforInitialization : init-method에 지정된 메서드가 호출되기 전에 호출됩니다. postProcessAfterInitialization : init-method에 지정된 메서드가 호출된 후에 호출됩니다. init-method가 지정되어 있지 않더라도 자동으로 호출됩니다. pom.xml 4.0.0 kr.co.soft..

SW/Java 2020.04.15

C++ : filesystem : 라이브러리 개요, 사용법, 예제, 특징

파일시스템 C++17의 새로운 라이브러리입니다. C++14나 그 전에는 파일 시스템과 같은 구성 요소에 대해 연산할 방법이 존재하지 않았습니다. 이 라이브러리는 파일 읽기와 쓰기에 관한 라이브러리가 아닙니다. 파일 속성 변경, 디렉터리 순회, 파일 복사 등에 관한 라이브러리라고 생각하면 됩니다. 이 모든 걸 이 라이브러리에서 활용할 수 있습니다. 파일시스템 연산 플랫폼 공통적인 방법으로 경로를 합쳐야 합니다. 또 파일과 디렉터리를 복사, 이름 바꾸기, 삭제 등을 할 수 있어야 합니다. 디렉터리에서 파일, 디렉터리 목록을 가져와야 합니다. 파일 권한 읽기 및 설정, 파일 상태 읽기 및 설정이 가능합니다. #include namespace fs = std::experimental::filesystem::v1..

SW/C++ 2020.04.15

Java : Spring: Bean 생성, 소멸 시 메소드 호출 방법 : 예제, 구현

Bean 객체의 생명주기 spring의 bean은 다음과 같은 상황일 떄 객체가 생성됩니다. 싱글톤인 경우 xml 파일을 로딩할 떄 객체가 생성됩니다. 싱글톤이고 lazy-init 속성이 true인 경우 getBean 메서드를 사용할 떄 객체가 생성됩니다. 또 prototype일 경우 getBean 메서드를 사용할 때 객체가 생성됩니다. spring bean은 다음과 같은 상황 일 떄 객체가 소멸됩니다. 즉, IoC 컨테이너가 소멸될 때, bean의 객체가 소멸이 됩니다. 객체 생성과 소멸 시 호출될 메서드 등록 객체가 생성되면 가장 먼저 생성자가 호출됩니다. init-method : 생성자 호출 이후 자동으로 호출됩니다. destroy-method : 객체가 소멸될 떄 자동으로 호출됩니다. defaul..

SW/Java 2020.04.14

C++ : 헤더파일 초기화 : 정적 변수, 정적 상수 : 사용법, 활용법, 팁

class Vector { // ... private: int mX = 0; // not error int mY = 0; // not error const static int mDimension = 2; // not error static int mCount = 0; // error } 클래스 멤버 변수를 선언할 떄, 위와 같이 선언이 가능합니다. 다만, 정적 변수를 선언하는 것은 아직 지원하지 않는다고 합니다. class Vector { // ... private: static int mCount; }; int Vector::mCount = 0; 따라서 정적 변수를 만족시키기 위해서는 위와 같이 선언하고 활용해야 합니다. 그렇다면 이러한 클래스 변수 선언 방식들을 적극적으로 활용해도 괜찮을까요? 선별적..

SW/C++ 2020.04.14

Java : Spring: bean : 객체 생성, 태그 : 개념, 예제, 구현

spring bean 객체 생성 spring에서는 사용할 bean 객체를 bean configuration file에 정의를 하고 필요할 때 객체를 가져와 사용하는 방법을 이용합니다. bean 태그 class : 객체를 생성하기 위해 사용할 클래스를 지정합니다. id : bean 객체를 가져오기 위해 사용하는 이름을 지정합니다. lazy-init : 싱글톤인 경우 xml을 로딩할 때 객체 생성 여부를 설정합니다. true일 때 xml 로딩 시 객체를 생성하지 않고 객체를 가져올 때 생성합니다. scope : 객체의 범위를 설정합니다. singleton은 객체를 하나만 생성해서 사용합니다. prototype은 객체를 가져올 때 마다 객체를 생성합니다. TestBean.java package kr.co.so..

SW/Java 2020.04.13

C++ : enum class : enum과 차이점, 장점, 사용법, 반복문 예제

Enum C에서도 Enum을 다루기도 합니다. 좋은 점이 많지만, C에서는 타입을 비교할 때, 정수형태로 비교를 하기 떄문에 문제가 있었습니다. enum class enum class를 활용하면, 다른 enum 끼리 타입을 비교하거나, 정수 형태로 초기화하는 것을 방지해줍니다. 즉, C++11에서 제대로 지원되는 것입니다. 정수형으로의 암시적 캐스팅이 존재하지 않습니다. 자료형 검사를 진행하며, 또한, enum에 할당할 바이트 양을 정할 수 도 있습니다. #include enum class eScoreType : uint8_t { Assignment1, Assignment2, Assignment3, Midterm, Final = 0x100, }; // 경고를 알림 enum class로 정수형을 명시하는 ..

SW/C++ 2020.04.13

Java: Spring : IoC 개념 : ApplicationContext, BeanFactory : 예제, 구현

IoC 컨테이너 Inversion of Control의 약자로 제어 역전을 의미합니다. 일반적으로 프로그래밍을 할 때 프로그램이 흘러가는 흐름이나 생성되는 객체에 대한 제어권을 개발자가 가지는 것과 달리 프레임워크가 가지는 것을 의미합니다. 개발자가 코드의 흐름이나 객체 생성에 관련된 코드를 프로그래밍 코드에 직접 작성하는 것이 아닌 프레임워크가 사용하는 파일에 작성하면 이를 토대로 프레임워크가 객체를 생성하여 반환하고 코드가 동작하는 순서를 결정하게 된다는 의미입니다. POJO Class POJO는 Plain Old Java Object의 약자입니다. 자바 모델이나 기능, 프레임워크 등에 따르지 않고 홀로 독립적이며 단순한 기능만을 가진 객체들을 의미합니다. 자바에서는 이러한 객체들을 Bean이라고 부..

SW/Java 2020.04.12

C++ : 고정폭 정수형 : 기본 자료형과 차이, 필요성

기본 자료형과 바이트 크기 기본 자료형들의 바이트 크기는 얼마일까요? 사실 이러한 바이트의 크기는 표준으로 제공되지 않습니다. 따라서 컴파일러마다 개발자들마다 상이한 의견들이 존재하였습니다. 고정 폭 정수형 C++11에서는 이제 지원되게 되었습니다. int8_t / uint8_t int16_t / uint16_t int32_t / uint32_t intptr_t / uintptr_t 이 외에도 많이 존재합니다. 가독성 향상을 위해 낡은 기존 자료형보다 이러한 자료형들을 활용해야 합니다. 특정 플랫폼에 국한되지 않고 고정폭으로 작업할 수 있어 오류의 여지를 줄일 수 있습니다.

SW/C++ 2020.04.12

마이크로서비스 : 특징 두번째 이야기

분권 데이터 관리 모노리스의 시스템을 살펴보면 단일 통합 데이터베이스를 사용하고 있습니다. 이러한 단일 데이터베이스를 유지하는 방식은 벤더의 라이센서 모델과 데이터베이스의 기능 확장에 그 뿌리를 두고 있습니다. 마이크로서비스는 Polyglot Persistence 접근 방법을 선택하며, 서비스별로 데이터베이스를 갖도록 설계를 합니다. 즉, 이 말은 각각의 저장소가 분산되어 있어야 하며, 다른 서비스의 저장소를 직접 호출할 수가 없고 API를 통해서만 접근해야 함을 의미합니다. 그런데 이런 케이스에는 반드시 등장하는 문제가 있습니다. 데이터 일관성 문제입니다. 주문 서비스와 배송 서비스가 있다고 생각을 해겠습니다. 상품이 1건 주문되면 배송도 1건 발생해야 합니다. 보통 이러한 처리는 동시적인 트랜잭션으로..

마이크로서비스 : 특징 첫번쨰 이야기

Biz 역량 기반팀 멜빈 콘웨이의 콘웨이 법칙이라는 것이 있습니다. 이는 시스템 개발 시 항상 시스템의 모양이 팀의 구조를 반영한다는 것을 말합니다. 하나의 어플리케이션을 만들기 위해서는 UI팀, 서버개발팀, DB팀과 같은 기능적으로 같은 기술을 가진 팀이 관여하게 됩니다. 따라서 시스템도 같은 모양이 되고, 이런 방식의 팀 구조에서는 아무래도 팀이 다르기 때문에 의사소통의 시간이 오래 걸리게 됩니다. 마이크로서비스를 만드는 팀은 Biz 역량 기반 팀입니다. 이는 역할 또는 기술별로 팀이 별도로 존재하는 것이 아니라 업무 중심으로 보여 기술이 다양한 사람들이 같은 팀을 이루어 서비스를 만드는 것을 의미합니다. 이러한 Biz 역량 기반 팀은 다양한 역할을 가진 기획자, 디자이너, Frontend 개발자, ..

마이크로서비스 : SOA, 모노리스와 차이점, 정의, 장점

마이크로서비스 아키텍처 우선 마이크로서비스 아키텍처는 하나의 어플리케이션을 여러 개의 서비스 집합으로 구성하는 것을 말합니다. 어디서 많이 보았던 개념인 서비스 지향 아키텍처 SOA가 있습니다. 1990년대 후반부터 발전한 객체 지향 분석 설계, 컴포넌트 기반 개발, Service Oriented Architecture, 즉 SOA의 연장선에 있습니다. SOA와 마이크로서비스 아키텍처의 공통점은 둘 다 소프트웨어 설계 시 서비스 중심을 설계를 지향하는 것입니다. 마이크로서비스와 SOA 서비스 오너십을 보면 마이크로서비스는 하나의 독립된 팀에서 개발하고 관리합니다. 반면 SOA 서비스는 중앙에 관련된 서비스를 공유하기 위한 공유 미들웨어 중심으로 개발하기 때문에 여러 팀, 즉 기획팀, 공통기능개발팀, 개발..

반응형