2022. 1. 31. 19:58ㆍAndroid/깨알 개념 정리
SOLID 원칙
컴퓨터 프로그래밍에서 SOLID란 로버트 마틴이 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 두문자어 기억술로 소개한 것이다. 프로그래머가 시간이 지나도 유지 보수와 확장이 쉬운 시스템을 만들고자 할 때 이 원칙들을 함께 적용할 수 있다. SOLID 원칙들은 소프트웨어 작업에서 프로그래머가 소스 코드가 읽기 쉽고 확장하기 쉽게 될 때까지 소프트웨어 소스 코드를 리팩터링 하여 코드 냄새를 제거하기 위해 적용할 수 있는 지침이다.
SRP(Single Responsibility Principle): 단일 책임 원칙
소프트웨어 모듈은 변경의 이유가 단 하나여야만 한다.
OCP(Open Closed Principle): 개방 폐쇄 원칙
모듈은 확장에 열려있고, 변경에는 닫혀있어야 한다.
LSP(Listov Substitution Principle): 리스코프 치환 원칙
서브 타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 한다
ISP(Interface Segregation Principle): 인터페이스 분리 원칙
사용자가 필요하지 않은 것들에 의존하게 되지 않도록, 인터페이스를 작게 유지하라.
DIP(Dependency Inversion Principle): 의존 역전 원칙
고수준 정책을 구현하는 코드는 저수준 세부사항을 구현하는 코드에 절대 의존해서는 안 된다.
객체 지향 프로그래밍(OOP : Object-Oriented Programming)
개념
- 컴퓨터 프로그래밍 중 하나로 프로그래밍에서 필요한 데이터를 객체화시켜 상태와 행위를 가질 객체를 만들고 그 객체 간의 유기적인 상호작용을 통해 조직을 구성하는 프로그래밍 방법
- 객체지향 프로그래밍의 경우, 클래스 디자인과 객체들의 관계를 중심으로 코드 작성이 이루어진다. 따러서 상태, 멤버변수, 메서드 등이 긴밀한 관계를 가지고 있다. 특히 멤버변수가 어떤 상태를 가지고 있는가에 따라 결과가 달라짐
장점
- 코드 재사용성에 용이, 유지보수에 용이, 대형 프로젝트에 적합(모듈화 개발)
함수형 프로그래밍 (Functional Programming)
개념
- 순수 함수를 작성하여 프로그램으로 가독성을 높이고 유지보수를 용이하게 하여 부작용을 줄이는 프로그래밍 기법
- 순수 함수 : 함수의 입력이 주어지면, 항상 일관된 출력이 나오며 프로그램 실행에 영향을 미치지 않는 함수
장점
- 코드에서 프로그램의 실행에 영향을 미치는 영역과 순수한 영역을 최대한 분리함으로써, 코드 가독성 상승, 유지보수에 용이, side effect 없는 안전한 코드 구현 가능
스레드 세이프(Thread safe)
테스크(task)
- 프로그램에서 작업의 단위. 프로그래밍 언어 관점에서는 어떤 작업을 수행하기 위해 순차적으로 진행되는 코드들의 묶음
스레드(thread)
- 하나의 프로세서(CPU)에서 태스크의 실행
프로세스(process)
- 실행중인 하나의 어플리케이션, 다중 프로세스 구현 가능
개념
- Multi Thread 프로그래밍에서 여러 Thread 로부터 어떤 method, variable, object에 동시 접근이 이뤄져도 프로그램 실행에 문제가 없는 것
- 하나의 동작이 한 thread로 부터 호출되어 실행 중일 때, 다른 thread가 동일한 함수를 호출하여 동시에 실행되더라도 각 thread에서 함수의 수행 결과가 바르게 나오는 것
효과
- mvi 에서 model 이 불변성을 가지므로 다른 스레드로부터 수정하는 사이드 이펙트를 방지할 수 있음
보장 방법
- immutable 불변하는 객체는 무조건 Thread safety 하다. ex) String
- only-read 읽기만 하면 Thread safety 하다.
- 자바
- Collections의 synchronizedXXX 사 - kotlin
- val 키워드 사용하여 변수나 클래스 멤버 선언
- immutable collections ex) List
- data class 선언 후 copy() 메소드 사용
TDD (Test Driven Development)
개념
- 테스트 주도 개발 즉, 반복 테스트를 이용한 소프트 웨어 방법론으로 코드의 재사용성을 보장함
- 작은 단위의 테스트 케이스 작성 -> 테스트 진행 -> 이를 통과하는 코드 추가하는 과정을 반복하여 구현
장점
- 코드 재사용 보장을 명시하므로 철저한 모듈화가 이러진다 따라서 보다 튼튼한 객체 지향적인 코드 생산
- 개발의 목표를 명확히 하고 설계 과정에서 다양한 예외를 미리 생각 후 예방하므로 재설계 시간의 단축
- TDD의 경우 자동화 된 유닛 테스팅을 전재하므로 어느 영역에서의 버그인지 명확해 지므로 디버깅 시간의 단축
- 테스트 문서의 대체 가능
- TDD의 경우 자동화된 유닛 테스팅을 전재하므로 추가 구현의 용이함
단점
- 생산성 저하
'Android > 깨알 개념 정리' 카테고리의 다른 글
Android lifecycle 정리 (activity lifecycle, fragment lifecycle, view lifecycle) (0) | 2022.01.31 |
---|---|
Android 개념 정리 - 1 (객체, 클래스, 자바 컬렉션, 추상 클래스, 인터페이스, 자료구조) (0) | 2022.01.31 |
[Firebase PUSH] Android 앱에서 background(백그라운드), foreground(포그라운드) 메시지 수신 정리 (0) | 2020.06.11 |
[Android/안드로이드] kotlin , intent 로 객체 전달 (0) | 2020.05.29 |
[Android/안드로이드] ConstraintLayout 에 대하여 (1) | 2020.05.29 |