본문 바로가기

Kotlin147

[CS] 응집도(Cohesion)와 결합도(Coupling) 모듈(Module)크기와 상관없이 클래스나 패키지, 라이브러리 등 프로그램을 구성하는 임의의 요소프로그램을 구성하는 시스템을 기능 단위로 독립적인 부분으로 분리한 것단순히 규모가 큰 것을 작게 여러 개로 나눈 조각이 아니라, 하나 이상의 논리적인 기능을 수행하기 위한 명령어들의 집합 응집도(Cohesion)모듈에 포함된 내부 요소들이 하나의 책임/ 목적을 위해 연결되어 있는 연관된 정도응집도가 높으면, 변경 대상과 범위가 명확해지는 장점이 있어서 코드를 수정하기 쉬워진다.높은 응집도 : A 모듈 안에 a 라는 기능을 위해 모여있고 긴밀하게 연결되어 협력하고 있다.낮은 응집도 : A 모듈이 아닌 곳에 a 기능들이 흩어져 있다던가 또는 A 모듈에 a 기능 외에 b, c, d 기능들도 섞여서 복잡하게 구현되어.. 2024. 12. 8.
[Kotlin] 추상 클래스(abstract class), 인터페이스(interface) 추상 클래스(abstract class)클래스 : 구체적으로 데이터를 담아 인스턴스화하여 직접 다루는 클래스구체적이지 않은 추상적인 데이터를 담고 있는 클래스하위 클래스들의 공통점을 모아 추상화하여 만든 클래스자바에서는 extends 키워드를 사용해서 자신의 기능을 하위 클래스로 확장시키는 느낌을 준다.클래스 간의 연관 관계를 구축하는 것에 초점을 둔다. 하나 이상의 추상 메소드를 포함할 수 있는 클래스로, 일반 클래스와 같이 필드, 메서드, 생성자를 가질 수 있다.이러한 특징으로, 추상 클래스는 추상화(추상 메서드)를 하면서 중복되는 클래스 멤버들을 통합 및 확장할 수 있다.인스턴스를 생성할 수 없으며, 구현부를 만들어주는 클래스에 구현(상속) 되어야 한다.단일 상속만 허용한다.public 이외의 접근.. 2024. 12. 8.
[Kotlin] 함수형 프로그래밍(Functional Programming), 람다(lambda) 프로그래밍 방식1. 명령형 프로그래밍(Imperative Programming, IP)프로그래밍의 상태와 상태를 변경하는 구문의 관점에서 연산을 설명하는 방식무엇(What)을 ‘어떻게(How)’ 할 것인지에 집중한다.1-1. 절차지향 프로그래밍(Procedural Programming, PP) : 문제를 순차적으로 처리하여 프로그램을 만드는 방식 (C, C++)절차지향 프로그래밍은 함수를 구조화할 뿐 데이터 자체를 구조화하지 못하기 때문에, 소프트웨어의 규모가 커지거나 변화가 생기면 각각의 함수에 의존하는 부분을 매번 고쳐야 하는 등 작업이 복잡해져 스파게티 코드를 유지보수하는 데 어려움을 겪는다.1-2. 객체지향 프로그래밍(Object-Oriented Programming, OOP) : 객체들 간의 상.. 2024. 12. 6.
[Kotlin] 데이터 클래스(Data Class) Java 에서 클래스는 Object Class 를 상속받고, Object Class 에 정의된 toString(), hashCode(), equals(other: Object) 메서드를 재정의 할 수 있다. Kotlin 에서도 Java 와 마찬가지로 Any Class 를 상속받으며 Any Class 에 정의된 toString(), hashCode, equals 를 재정의 할 수 있다.이 세가지 메서드를 재정의 하지 않으면 문제가 생기게 된다.equals() 메서드를 재정의 하지 않는 경우, 동등성 연산을 할 때 문제가 생기게 된다.hashCode() 메서드를 재정의 하지 않는 경우, hashMap 혹은 hashSet 과 같은 해시 기반 컬렉션 프레임워크를 사용할 때 문제가 생기게 된다.toString().. 2024. 12. 6.
[Java] 읽기 전용 컬렉션(List, Set, Map), ArrayList, LinkedList, Array List 인터페이스순서가 있는 데이터의 집합저장 순서가 유지되는 컬렉션을 구현하는 데 사용한다.같은 요소의 중복 저장을 허용한다.배열과 마찬가지로 index 로 요소를 접근하다.리스트는 데이터 양에 따라 동적으로 크기가 조정될 수 있는 가변적인 구조인 반면, 배열은 고정된 크기를 가진다.요소 사이에 빈공간을 허용하지 않아 삽입/삭제할 때마다 배열 이동이 일어난다. ArrayList 클래스배열을 이용하여 만든 리스트(배열 기반의 리스트 구현체)데이터가 메모리 상에서 연속적인 공간에 데이터를 저장되는 자료구조데이터의 저장순서가 유지되고 중복을 허용한다.데이터량에 따라 공간이 자동으로 늘어나거나 줄어든다.단방향 포인터 구조로 자료에 대한 순차적인 접근에 강점이 있어 조회가 빠르다.삽입/삭제가 느리다. 단, 순.. 2024. 12. 5.
[Kotlin] 변수 선언(val, var, const val) val (value 의 약자)변경 불가능한 참조를 저장하는 변수일단 초기화하고 나면 재대입이 불가능하다. 자바로 말하자면 final 변수에 해당한다. val 변수는 블록을 실행할 때 정확히 한 번만 초기화돼야 한다.하지만, 어떤 블록이 실행될 때 오직 한 초기화 문장만 실행됨을 컴파일러가 확인할 수 있다면 조건에 따라 val 값을 다른 여러 값으로 초기화할 수도 있다.val 참조 자체는 불변일지라도 그 참조가 가리키는 객체의 내부 값은 변경될 수 있다. var (variable 의 약자)변경 가능한 참조변수의 값이 바뀔 수 있다. 자바의 일반 변수에 해당한다. constjava 의 static final 특성읽기 전용 변수인 val 앞에 const 키워드를 붙여서 만든다.초기화 이후 내부의 값을 사용할 .. 2024. 12. 5.
[Kotlin] 자료형(기본형, 참조형), Call by Value, Call by Reference 자료형자바의 자료형은 크게 기본 자료형과 참조 자료형으로 나뉜다. 하지만 코틀린에서는 자바와 달리 null 값을 가질 수 있기 때문에 기본 자료형을 지원하지 않는다.코틀린은 기본 자료형을 지원하지 않고, 대신 *boxed type 을 사용하여 참조한다.boxed type : 기본 자료형을 객체로 다루기 위한 개념으로, 기본 자료형의 값을 갖는 객체를 의미한다.자료형키워드크기기본값(전역변수 한정)표현범위논리형Boolean1bitfalsetrue, false문자형Char2byte\u00000~65535 (유니코드)정수형Byte1byte0-128 ~ 127Short2byte0-32,768 ~ 32,767Int4byte0-2,147,483,648 ~ 2,147,483,647Long8byte0L-9,223,372.. 2024. 12. 5.