본문 바로가기

Software Engineering

OOAD - 진정한 캡슐화 (잘못된 캡슐화 예제) 진정한 캡슐화 진정한 캡슐화에 대해 알아보도록 하겠습니다. 진정한 캡슐화제목이 조금 이상한듯 싶지만, 우리가 알고 있는 이전의 캡슐화는 진짜 캡슐화가 아닐 확률이 높습니다. 때문에 진정한 캡슐화를 알아보자는 취지에서 이런 제목을 붙혔습니다. 우선 보통의 경우 캡슐화의 의미에 대해서 알아보겠습니다. 1. 캡슐화란 ? 캡슐화란 내부의 구현을 인터페이스를 통해 숨기는것을 말합니다. 설계중에서 변경될 가능성이 높은 부분을 구현 이라고하며, 상대적으로 안정적인 부분을 인터페이스라고 부릅니다. 캡슐화는 이런 변경가능성이 높은 구현을 숨기고 상대적으로 안정적인 부분을 공개함으로써 변경을 최소화하도록 합니다. 2. 캡슐화가 필요한 이유?상태와, 행동을 객체라는 하나의 단위로 묶는 이유는, 객체 스스로 자신의 상태를 처..
작성일: 2020. 1. 27. 18:18
OOAD - 데이터 주도 설계의 문제점(결합도와 응집도) 데이터 주도 설계의 문제점 이번 포스팅에서는 지난 포스팅에서 다루었던 책임주도 설계와 대비하여 소개되는 데이터 주도 설계 방식을 알아보고 결합도와 응집도에 대해 알아보도록 하겠습니다. 이 포스팅은 OBJECTS(코드로 이해하는 객체지향 설계)라는 책을 토대로 작성되었습니다. 지난 포스팅 ( https://galid1.tistory.com/681 )과 이어 보시는것이 도움이 더 많이 될것입니다. 데이터 주도 설계데이터 주도설계란 간단히 말씀드려 객체가 가져야할 데이터에 초점을 두고 설계를 하게되는 방식을 일컫습니다. 데이터 주도 설계에서는 객체 자신이 포함하고 있는 데이터를 조작하는 데 필요한 행동을 정의하게 됩니다. 반면 책임주도 설계에서는 다른 객체로부터 자신에게 요청할 수 있는 요청을 수행하기 위해 ..
작성일: 2020. 1. 27. 15:09
OOAD - 책임, 역할, 협력을 이용한 객체지향 설계 역할, 책임, 협력을 이용한 유연한 설계 이번 시간에는 OOP 설계 방법 (역할, 책임, 협력)에 대해 알아보도록 하겠습니다. 이 포스팅은 오브젝트 (코드로 이해하는 객체지향 설계)라는 책을 토대로 작성되었습니다. 코드 https://github.com/galid1/oop_study 아래의 설명들은 위의 코드를 토대로 설명을 하고 있습니다. 1. 시나리오2. 에서 앞으로 설명드릴 역할, 책임, 협력이라는 단어들에 대한 효율적인 이해를 돕기 위해, 간단한 영화 예메 시스템시나리오를 살펴보도록 하겠습니다. 1.1 요구사항 분석우선, 영화 예매 시스템에서 빠질 수 없는 영화에 대한 요구사항을 분석하도록 하겠습니다. 영화영화는 제목, 상영시간(running time), 가격 정보 등의 영화의 기본적인 정보를 가..
작성일: 2020. 1. 26. 22:51
BuildTool - Gradle Script 파일과 Gradle 도메인 객체(Task 객체) Gradle Script 파일 Gradle의 스크립트 파일에 대해 알아보도록 하겠습니다. 이번 포스팅은 Gradle 철저 입문이라는 서적을 참고하여 작성되었습니다. Gradle Script 파일gradle 스크립트 파일에 기술된 내용은 실행시 Gradle의 도메인 객체들에게 적절히 위임됩니다. 따라서 작성한 내용이 어떤 도메인 객체에 위임되어 어떻게 실행되는지 파악하면, 스크립트 파일을 쉽게 이해할 수 있습니다. 1. Script 파일 구조Gradle의 Script 파일은 처리문 과 스크립트 블록으로 구성됩니다. 1.1 처리문 xxxxxxxxxxdef message = 'hi'hello()...우선, 처리문의 경우 지역변수, 속성 설정 및 메소드 실행등 일반적인 언어들의 처리문과 같습니다. java의 경..
작성일: 2019. 10. 7. 23:28
BuildTool - Groovy란? (Groovy 문법과, 초간단 build.gradle 작성 예제) Gradle의 스크립트 파일 구조 Groovy란JVM에서 실행되는 스크립트 언어문법이 Java와 아주 가깝다Java와 호환이 되며 Java 클래스 파일을 그대로 Groovy 클래스로 사용할 수 있다 1. Gradle 설치https://galid1.tistory.com/467?category=761537gradle은 설치가 되어있다는 가정하에 진행하도록 하겠습니다. 아직 설치가 되어있지 않다면 위의 (Linux - CentOS7를 기준으로 간단한 설치방법을 정리해놓은 링크입니다.) 링크를 참고하여 설치를 해주세요. 2. Groovy 문법 (Gradle Script 작성을 위한)gradle 스크립트는 현재, Groovy 또는 Kotlin으로 작성이 가능합니다만, 저는 우선 Groovy문법으로 작성을 하도록 ..
작성일: 2019. 10. 6. 14:18
BuildTool - Gradle 구성 파일 요약(init.gradle, settings.gradle, build.gradle) gradle의 설정파일들2 gradle의 설정파일들1. init.gradle초기화 스크립트라고 하며, build시에 가장 먼저 실행되는 스크립트 파일입니다. 주로 사용자 정보 및 실행환경 초기화 등에 사용됩니다. 2. settings.gradle빌드 대상 프로젝트를 설정하는 스크립트입니다. 예를 들어 프로젝트 하위에 여러개의 프로젝트가 담겨있는 멀티 프로젝트의 형태인 경우, build의 대상이 되는 프로젝트를 지정하는 스크립트 파일입니다. 3. gradle.properties환경에 따라 값이 달라지는 파라미터들을 스크립트 밖에 기술할 때 사용합니다. 4. build.gradle프로젝트의 의존관계나, 테스크를 정의할때 사용합니다. 일반적으로 gradle 프로젝트에서는 이파일만 있더라도 build가 가능합니다.
작성일: 2019. 10. 5. 12:07
BuildTool - Build란? gradle의 설정파일들 build란?1. 일반적인 의미에서의 Build일반적으로 빌드란 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 그 결과를 말한다고 합니다. 예를들어 간단히 자바프로젝트를 만들어 진행하게 된다면, 그안에는 우리가 작성한 소스코드.java와 여러가지 정적 파일등에 해당하는 resource가 존재합니다. 빌드를 진행한다면, 소스코드를 compile하여 .class로 변환하고, resource를 .class에서 참조할 수 있는 적절한 위치로 옮기고, 추가적으로 META-INF와 MANIFEST.MF 들을 하나로 묶는(압축) 과정을 의미합니다. 컴파일이란? - 컴파일이란 컴퓨터가 이해할 수 있는 언어로 바꾸어주는 과정을 의미한다. 결과물로 목적파일이 생겨난다 ..
작성일: 2019. 10. 5. 12:04
Jenkins - AmazonLinux2 에서 Jenkins 구축 및 gitlab 연동 (push 시 자동 빌드) 이번 시간에는 AWS의 EC2에 jenkins를 설치하고 Gitlab의 hook시 자동으로 테스트 후 빌드를 하도록 CICD 환경을 구축해보도록 하겠습니다 이번 시간에는 AWS의 EC2에 jenkins를 설치하고 Gitlab의 hook시 자동으로 테스트 후 빌드를 하도록 CICD 환경을 구축해보도록 하겠습니다. 1. EC2 생성1.1 AMI와 인스턴스 유형AMI는 AMAZON Linux 2를 사용했습니다. 중요한점은 적절한 instance 유형을 선택하는 것입니다. 당연한 얘기이지만, t2.nano의 경우에는 jenkins설치는 가능하나, build시에 java의 memory부족으로 실패가 됩니다. t2.micro의 경우에는 build 및 deployment 까지는 가능하나 종종 메모리가 꽉차서 거의 운..
작성일: 2019. 7. 12. 09:23