📖 Contents
-
[CVS, SVN, GIT에 대해서 아는대로 설명해 보시오]
-
[형상 관리를 잘못하면 어떤 문제가 발생하나요?]
-
[객체지향과 절차지향 차이 설명해주세요]
sw공학이란?
- sw의 설계, 개발, 유지보수 등에 대한 체계적인 이론과 기술
필요한 이유?
- 시간이 지날수록 sw의 수요는 늘었지만 sw의 개발은 여전히 어렵고 힘들어 여러 가지 문제점이 나타나기 시작했다
- 유지보수나 확장등의 문제를 해결하기 위해 sw공학이 필요하다.
좋은 설계란?
- 요구사항 명세서의 모든 내용을 포함
- 유지 보수시 변경이 용이
- sw의 변경사항을 체계적으로 추적하고 통제하는 것
- 프로젝트와 관련된 모든 변경사항을 관리한다
- 형상 관리 도구 : CVS, SVN, Git 등이 있다
Singleton 패턴
- 생성자가 여러 차례 호출되더라도 실제 생성되는 객체는 하나이고 최고 생성 이후 호출된 생성자는 최초 생성자가 생성한 객체를 리턴한다
- DBCPC(DataBase Connetcion Pool)과 같은 상황에서 많이 사용된다
- 왜 사용하나요?
구현
- 생성자를 외부에서 호출할수 없게 private으로 선언한다
- 인스턴스 생성을 내부에서 처리하여 외부에서는 그것을 가져다가 쓰기만 하도록한다
- 한 클래스의 인터페이스를 사용하고자 하는 다른 인터페이스로 변환한다.
- 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸수 있다.
Template 패턴
- public final 메소드(HoustTemplate.buildHouse())에서 알고리즘의 골격을 정의한다.
- 알고리즘의 여러 단계 중 일부는 서브 클래스(WoodenHouse.java, GlassHouse.java)에서 구현할 수 있다.
- 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의 할 수 있다.
결합도 모듈간의 연결되어 상호 의존하는 정도 결합도가 약할수록 좋은 설계
응집도 모듈 안의 요소들이 서로 관련되어 있는 정도 응집도가 강할수록 좋은 설계
화이트 박스 검사
- sw 내부 코드를 테스트 하는 기법
- 개발자 관점의 내부 구조와 동작을 테스트 하는 방법
블랙 박스 검사
- sw내부 구조나 작동 원리를 모르는 상태에서 동작을 검사하는 방법
애자일 방법론
일정한 주기를 가지고 끊임없이 프로토 타입을 만들어 내며, 그때그때 필요한 요구를 더하고 수정하여 하나의 커라단 소프트웨어를 만들어 내는 소프트웨어 개발 방법론인 Agile 개발 방법론 채택
일정 주기를 가지고 계속 프로토 타입을 만들면서 요구사항을 필요할때마다 추가하고 수정하면서 큰 프로그램을 만들어 나아가는 겁니다.
12주나 34주 단위로 쪼개서 개발합니다.
이런게 많아지자 이를 지원하는 소프트웨어도 생겨났습니다.
Jira같은 것이 있죠. 하지만 장점만 있는 건 아닙니다. 너무 개발자 중심이고, 수정이 가능하다에서 무한 수정이 될 수 있습니다.
시너지가 있을 수도 있지만 그에 대한 부작용도 많을 수 있습니다.
애자일 방법론의 장점
- 프로젝트 진행 중간 중간에 필요한 요소들을 바꿀 수 있습니다.
- 시작할 때 프로젝트를 정확하게 규정하지 않아도 됩니다.
- 작은 요소들을 출시 할 때 빠르게 만들 수 있습니다.
- 점진적으로 테스트되기 때문에 초기에 버그를 발견할 수 있습니다.
생명 주기 모델 -소프트웨어를 어떻게 개발할 것인가에 대한 추상적 표현
- 프로젝트 비용 산정과 개발 계획 수립의 기본 골격
- 요구사항 분석(정의) -> 개발(설계, 구현, 테스트) -> 유지보수
모델 종류
-
폭포수 모델
- 선형 순차적, 처음부터 사용자들이 요구사항 명확하게 제시해야한다
- 요구사항이 이해하기 쉽고, 시스템 개발 중 급격한 변경이 없는 경우 효과적
-
프로토 타입 모델
- 포르토타입 모델 제시
-
나선형 모델
- 폭포수 개선 + 프로토타입 모델의 반복성 + 위험분석
- 대규모 프로젝트에 적합
- 여러 차례 개발 과정 반복
-
CVS (Concurrent Version System)
- 90년에 출시된 무료 서버-클라이언트 형상관리 시스템.
- 파일 전체를 저장하는 것이 아니라 변경사항만을 저장함 으로 용량을 적게 차지하지만
- 속도가 상대적으로 느리다.
-
SVN (Subversion)
- 형상관리/소스관리 툴의 일종.
- 중앙관리만을 지원.
- 다른 사용자의 커밋과 엉키지 않으며, 커밋 실패 시 롤백 기능을 지원.
- 안정성에 있어 CVS보다 상대적으로 좋지 않다.
-
Git
- 분산형 버전관리 시스템
- Repository의 완전한 복사본을 로컬에 저장할 수 있다.
- 처리속도가 빠르지만 대용량 코드 관리에 부적절하다.
대규모 프로젝트는 수십, 수백명의 인원이 소프트웨어를 함께 개발하는데 그에 맞는 표준이 존재하지 않고 서로의 개발 사항을 확인하지 못한다면 프로젝트의 위험이나 혼란이 발생할 수 있음
대규모 프로젝트에서는 발생 가능한 위험이나 혼란을 줄이고 프로젝트를 체계적으로 관리하기 위해 형상관리가 반드시 필요
<<<<<<< HEAD
절차지향 프로그래밍
-
실행하고자 하는 절차를 정하고, 이 절차대로 프로그래밍하는 방법 목적을 달성하기 위한 일의 흐름에 중점을 둔다.
-
장점 : 객체지향보다 속도가 빠르다
객체지향 프로그래밍
-
실세상의 물체를 객체로 표현하고, 이들 사이의 관계, 상호 작용을 프로그램으로 나타낸다.
-
객체를 추출하고 객체들의 관계를 결정 하고 이들의 상호 작용에 필요한 함수(메서드)와 변수(필드)를 설계 및 구현하다.
-
객체 지향의 행심은 연관되어 있는 변수와 메서드를 하나의 그룹으로 묶어서 그룹핑하는 것이다.
-
사람의 사고와 가장 비슷하게 프로그래밍을 하기 위해서 생성된 기법
-
하나의 클래스를 바탕으로 서로 다른 상태를 가진 인스턴스를 만들면 서로 다른 행동을 하게 된다. 즉, 하나의 클래스가 여러 개의 인스턴스가 될 수 있다는 점이 객체 지향이 제공하는 가장 기본적인 재활용성이라고 할 수 있다.
-
단점 : 설계에 많은 시간
-
장점 : 유지보수에 좋다. 큰 프로젝트에 적합하다
객체지향 프로그래밍과 절차지향 프로그래밍의 차이
- 절차지향 프로그래밍
실행하고자 하는 절차를 정하고, 이 절차대로 프로그래밍하는 방법 목적을 달성하기 위한 일의 흐름에 중점을 둔다.
- 객체지향 프로그래밍
실세상의 물체를 객체로 표현하고, 이들 사이의 관계, 상호 작용을 프로그램으로 나타낸다. 객체를 추출하고 객체들의 관계를 결정하고 이들의 상호 작용에 필요한 함수(메서드)와 변수(필드)를 설계 및 구현하다. 객체 지향의 행심은 연관되어 있는 변수와 메서드를 하나의 그룹으로 묶어서 그룹핑하는 것이다. 사람의 사고와 가장 비슷하게 프로그래밍을 하기 위해서 생성된 기법 하나의 클래스를 바탕으로 서로 다른 상태를 가진 인스턴스를 만들면 서로 다른 행동을 하게 된다. 즉, 하나의 클래스가 여러 개의 인스턴스가 될 수 있다는 점이 객체 지향이 제공하는 가장 기본적인 재활용성이라고 할 수 있다.
모바일과 관련된 controller가 사용자 입력 view가 처리. presenter에게 전달 단점 ; view와 presenter 1:1 대응이여서 코드가많아지고, 의존성이 높아져서
보완하기 위해 나온것이 mvvp
view가 변경되면 변경된 view model을 이용한다 데이터바인딩을 이용해서 view model을 만든다 단점 ; view를만들기 어렵다
- Test Driven Development
- 테스트 주도 개발 : 테스트가 개발을 이끌어 나간다
- 개념
- 테스트를 먼저 만들고 테스트를 통과하기 위한 코드를 작성하는 것.
- 레드 그린 사이클 (TDD사이클)
- RED 항상 실패하는 테스트를 먼저 작성하고
- GREEN 테스트가 통과하는 프로덕션 코드를 작성하고
- Refactor 테스트가 통과하면 프로턱션 코드를 리팩토링한다 (리팩토링 : 작동하는것은 그대로 놓고, 내부구현(코드)만 변경한다)
- TDD를 하는이유 : 테스트와 개발을 같이 진행하여 개발 초기의 오류를 발견하고, 수정하여 좋은 소프트웨어를 개발하기 위한 방법
- 단점 : 개발시간이 오래걸린다
- .builder
- 생성자 매게변수가 많으면 유리
- 느슨한 결합도 제공