전체 글

전체 글

    [코틀린 완전정복] 여러 종류의 클래스

    보통 클래스 는 속성과 동작을 가지기 때문에 프로퍼티 와 메소드 를 멤버로 가진다. 먄약 특정 동작을 가지지 않고 오로지 데이터 저장을 위해 사용한다면 일반적인 클래스에서의 구현 부분은 필요가 없을 것이다. 구현부를 작성하지 않으면 그만큼 메모리를 덜 사용하게 되고 자원의 낭비를 막을 수 있게 될 것이다. 이처럼 코틀린에서는 데이터 저장을 위한 클래스가 있는데 바로 데이터 클래스 이다. 데이터 클래스 보통 데이터 전달을 위한 객체를 DTO(Data Transfer Object) 라고 부른다. 구현 로직을 가지고 있지 않고 순수한 데이터 객체를 표현하기 때문에 속성과 속성에 접근하고자 하는 게터와 세터 를 가진다. 추가적으로 toString(), equals() 과 같은 데이터를 표현하거나 비교하는 메소드..

    [코틀린 완전정복] 추상 클래스와 인터페이스

    추상 클래스 추상 클래스 VS 인터페이스 추상 클래스 는 대략적인 설계의 명세와 공통의 기능을 구현한 클래스이다. 즉, 구체적이지 않은 것이다. 추상 클래스 를 상속하는 하위 클래스 는 추상 클래스의 내용을 더 구체화 해야 한다. 오잉? 그럼 추상 클래스랑 인터페이스는 같은 거 아냐? 🤔 엄밀히 말하면 다르다. 인터페이스 역시 대략적인 설계 명세를 구현하고 인터페이스 를 상속하는 하위 클래스 에서 이를 구체화하는 것은 동일하다. 하지만 인터페이스에서는 프로퍼티의 상태 정보를 저장할 수 없다. 다시 말하면 인터페이스 에서는 프로퍼티의 초기화 가 불가능하다는 것이다. interface Vehicle { val name : String val color : String val weight : Double } ..

    [TIL] 22.04.20

    공부한 것 정처기 21년 3회차 알게된 것 [1과목] 소프트웨어 설계 1. 람바우 분석 기법 - 객체 모델링 -> 동적 모델링 -> 기능 모델링 순으로 진헹 - 객체 모델링 : 정보 모델링이라고도 부르며 클래스 다이어그램을 작성 - 동적 모델링 : 상태 다이어그램을 작성 - 기능 모델링 : 자료 흐름도(Data Flow Diagram)을 작성 2. 요구사항 개발 프로세스 도출(요구사항 수집) -> 분석 -> 명세 -> 확인(요구사항 검증) 3. 애자일 개발 프로세스 - 익스트림 프로그래밍 : XP, 고객과 함꼐 2주 정도의 반복 개발, TDD - 스크럼 : 30일마다 동작 가능한 제품을 제공하는 스프린트 개발 4. UML 관계 - 일반화 : Generalization, 실선 삼각 화살표, 일반적인 것과 ..

    [TIL] 22.04.18

    공부한 것 정처기 21년 1회차 알게된 것 [1과목] 소프트웨어 설계 1. 디자인 패턴 - 생성 패턴 : 추상 팩토리, 빌더, 팩토리 메소드, 프로토타입, 싱글톤 - 구조 패턴 : 어댑터, 브리지, 컴퍼지트, 데코레이터, 퍼사드, 프록시 - 행위 패턴 : 커맨트, 옵저버, 전략, 상태 2. 객체지향 분석 방법론 - Cord-Yourdon : E-R 다이어그램을 사용하여 객체의 행위를 데이터 모델링 하는데 초점 3. 소프트웨어 시스템 분석 - 플랫폼 기능 분석 - 플랫폼 성능 특성 분석 - 운영체제 분석 - 네트워크 분석 - DBMS 분석 4. UML - 클래스 다이어그램 : 시스템을 구성하는 클래스들 사이의 관계를 표시 - 액티비티 다이어그램 : 시스템 내부에 존재하는 여러 행위와 분기 및 조건을 표시 ..

    [TIL] 22.04.17

    공부한 것 정처기 22년 1회차 알게된 것 [1과목] 소프트웨어 설계 1. 소프트웨어 설계 방법 - 상향식 설계 방법 : 바텀업, 작은 문제를 해결하여 큰 문제로 통합, 객체 지향 프로그래밍 (Java) - 하향식 설계 방법 : 탑다운, 큰 문제를 작은 문제로 분해, 절차 중심 프로그래밍 (C) 2. 데이터 흐름도 - 프로세스 : 원 - 데이터 흐름 : 화살표 - 데이터 저장 : 평행선 - 종료 : 사각형 3. UI 설계 도구 - 와이어 프레임 : 페이지에 대한 대략적인 레이아웃 및 UI 요소 설계 - 목업 : 와이어 프레임에서 디자인, 사용 방법 설명, 평가를 위해 실제 화면과 유사하도록 UI를 변경 (정적) - 스토리보드 : 와이어 프레임에서 콘텐츠 설명, 흐름도 추가 - 프로토타입 : 와이어 프레임..

    [Android] MVVM 패턴 적용기 - 1

    GitHub - k906506/MVVM: 🔨 MVVM이 뭐에요? 🔨 MVVM이 뭐에요? Contribute to k906506/MVVM development by creating an account on GitHub. github.com 요즘 MVVM 에 대해서 공부하고 있다. 지금까지 앱 구현할 때 그냥 액티비티에 다 때려박았었는데 모델이랑 뷰가 너무 강하게 결합되어 있는 느낌이 강했다. 또한 대부분의 로직을 뷰(액티비티)에서 처리하고 하고 있었고 재사용성이 매우 떨어졌었다. 실제로 겨울방학에 진행했던 글로벌인재트랙 때 어플 을 하나 만들었고 나름 분리한다고 분리했는데 진짜 재사용성이 0 이었다. MVC 가 구현하기는 정말 편했지만 이 기회에 패턴 공부도 할겸 MVVM 을 접하게 되었다. 물론 MVC ..

    [백트래킹 / Kotlin] BOJ 14889 - 스타트와 링크

    문제 풀이 언어 Kotlin 코드 import java.lang.Integer.min import java.util.* import kotlin.math.abs import kotlin.system.exitProcess lateinit var board: Array lateinit var visited: Array var min_value = Int.MAX_VALUE var n = 0 fun main() = with(Scanner(System.`in`)) { n = nextInt() board = Array(n) { Array(n) { nextInt() } } visited = Array(n) { 0 } search(0, 0) println(min_value) } fun search(index: Int,..

    [백트래킹 / Kotlin] BOJ 1759 - 암호 만들기

    문제 풀이 언어 Kotlin 코드 import java.util.* var l = 0 var c = 0 lateinit var array: Array lateinit var sortedArray: Array lateinit var visited: Array var stringBuilder = StringBuilder() fun main() = with(Scanner(System.`in`)) { l = nextInt() c = nextInt() array = Array(c) { next() } sortedArray = array.sortedArray() visited = Array(c) { 0 } dfs(0, 0) println(stringBuilder) } fun dfs(index: Int, depth:..

    [백트래킹 / Kotlin] BOJ 1987 - 알파벳

    문제 풀이 언어 Kotiln 코드 import java.lang.Integer.max import java.util.* var n = 0 var m = 0 var max_value = 0 val dx = listOf(-1, 1, 0, 0) val dy = listOf(0, 0, -1, 1) lateinit var board: Array lateinit var check: Array fun main() = with(Scanner(System.`in`)) { n = nextInt() m = nextInt() board = Array(n) { Array(m) { "" } } check = Array(26) { 0 } for (i in 0 until n) { val s = next().chunked(1) for..

    [수학 / Kotlin] BOJ 11050 ~ 11051 이항 계수 (1 ~ 2)

    이항 계수 1 문제 풀이 언어 Kotiln 코드 import java.util.* lateinit var array: Array var n = 0 var k = 0 fun main() = with(Scanner(System.`in`)) { n = nextInt() k = nextInt() // 재귀 대신 DP로 팩토리얼 구현 array = Array(n + 1) { 1 } // 팩토리얼 계산 for (i in 2..n) { array[i] = array[i - 1] * i } // 조합 공식 적용 // nCr = n! / (n-r)! * r! println(array[n] / (array[n - k] * array[k])) } 풀이 방법 고등학교 때 배운 조합 공식 을 적용하면 어렵지 않게 해결할 수 있..