본문 바로가기

Study

(32)
Kotlin / 파일 입출력과 스레드 처리 1. 파일 I/O 처리 파일 처리는 Input과 Output에 대한 데이터 처리 -> 데이터가 계속 처리되어 흐르는 것과 같아서 스트림(Stream)이라고 한다. 바이트나 텍스트 단위로 처리해서 사람이 인식할 수 있게 만들어야 한다. - 버퍼(Buffer) : I/O 처리의 성능을 향상하기 위해 중간에 저장공간을 두고 처리하는 방식 가장 기본으로 파일을 읽고 쓰는 기반 : InputSteram, OutputStream => 이를 기반으로 바이트 단위로 처리하도록 지원 : ByteArrayInputStream, ByteArrayOutputStream 바이트 스트림은 기본적으로 데이터를 읽고 쓰는 것이다. - read 메서드로 바이트 단위 읽기 (순환하면서 모든 바이트 읽음) - write 메서드로 한 바이..
Kotlin / 제네릭 알아보기 1. 제네릭 알아보기 제네릭은 타입 매개변수를 지정해서 임의로 작성하고 호출할 때 타입 인자를 전달해서 처리하는 방식이다. 1. 제네릭 처리 기준 자료형을 특정 문자로 지정 -> 타입 매개변수와 타입 인자로 사용 타입 매개변수(Type Parameter) : 클래스나 함수의 자료형을 임의의 문자로 지정해서 컴파일 타임에 자료형 점검을 할 때 사용 타입 인자(Type Argument) : 객체 생성, 함수 호출할 때 실제 자료형을 지정해서 정해진 임의의 타입을 실제 타입으로 변경 제네릭 구성 가능 여부 함수, 클래스, 추상 클래스, 인터페이스, 확장함수, 확장 속성 하나의 객체만 만드는 object 정의, 동반 객체, object 표현식은 제네릭을 구성할 수 없다. 타입 매개변수와 타입 인자를 지정하는 위..
Kotlin / 위임(delegation) 알아보기 모든 객체지향 프로그래밍 언어에서는 클래스 간의 상속관계를 기본 문법으로 제공한다. 코틀린 역시 위임관계를 문법으로 제공해서 다양한 클래스의 관계를 쉽게 처리할 수 있도록 지원한다. 1. 클래스 위임 알아보기 클래스 위임 : 특정 클래스에 자기 클래스가 할 일을 다른 클래스에게 맡겨 처리하는 것 코틀린에서 위임 관계를 by를 사용해서 쉽게 구성할 수 있다. 보통 하나의 클래스에는 하나의 책임을 부여해서 설계하는 방식을 사용한다. 위임은 2개의 클래스가 동일한 책임을 가지고 나눠서 처리한다. 좋은점 : 다양한 기능을 하나의 클래스를 통해서 받고 처리할 수 있도록 구조화할 수 있다. interface Base { // 인터페이스 정의 fun say() } class BaseImpl(val x: Int) : ..
Kotlin / 함수 추가사항 알아보기 1. 함수형 프로그래밍이란 순수함수와 일급 객체 함수 함수는 참조 투명성(지역변수만 사용)을 갖춰야 항상 동일한 입력에 동일한 결과를 반환하는 순수 함수를 만들 수 있다. 순수 함수(pure function)의 조건 동일한 인자로 실행하면 항상 동일한 값 반환 함수 내부에서 반환값 이외의 결과로 부수효과가 발생하지 않는다 부수효과(side effect) 함수가 실행되는 과정에서 함수 외부의 데이터를 사용 및 수정하거나 외부의 다른 기능을 사용하는 것을 말한다 함수가 전역변수를 사용하거나 수정하는 것 함수가 표준 입출력을 사용해서 키보드 입력과 화면 등에 출력 함수가 파일을 읽고 쓰는 작업을 수행 함수를 사용해서 데이터베이스에 연결 fun purefunc(a:Int, b:Int):Int{ return a+..
Kotlin / 추상클래스, 인터페이스 알아보기 1. 추상클래스 추상클래스는 abstract 예약어로 지정한 클래스이다. 직접 객체를 생성할 수 없고, 항상 다른 클래스에서 상속해서 추상 메서드를 구현해야 한다. abstract class Person { // 추상 클래스 정의 abstract val name: String // 추상 속성 정의 abstract fun displayName() // 추상 메서드 정의 } class Woman : Person() { // 구현 클래스 정의 override val name: String = "은정" // 추상 속성 오버라이딩 override fun displayName() { // 추상 메서드 오버라이딩 println("이름 : $name") } } val woman = Woman() woman.displa..
Kotlin / 컬렉션 알아보기 1. 리스트, 세트, 맵 알아보기 컬렉션의 가변과 불변 가변(mutable) : 보통 컬렉션 객체는 추가, 수정, 삭제를 할 수 있다 불변(immutable) : 컬렉션 객체 중에 한 번 만들어지면 추가, 수정, 삭제를 할 수 없다. 리스트 클래스 ArrayList : 고정 길이로 리스트를 만든다. listOf, mutableListOf로 객체 생성 LinkedList : 가변 길이로 리스트를 만든다. 각 원소가 가지는 주소를 별도로 보관. LinkedList 클래스로 리스트 객체 생성 val list1 = listOf(1,2,3) // 불변 리스트 객체 생성 val list2 = mutableListOf(1,2,3) // 가변 리스트 객체 만들기 list2.add(10) // 원소 추가 list2.re..
compose / Column Scrollable 하게 만들기 (Column + verticalScroll) 항목 목록을 표시하기 위해선 Column에 verticalScroll 보다 LazyColumn 이나 LazyRow가 더 효율적이다. verticalScroll은 스크롤할 수 있는 간단한 방법을 제공한다. scrollState를 사용하면 스크롤 위치를 변경하거나 현재 상태를 가져올 수 있다. @Composable private fun ScrollBoxesSmooth() { // Smoothly scroll 100px on first composition val state = rememberScrollState() LaunchedEffect(Unit) { state.animateScrollTo(100) } Column( modifier = Modifier .background(Color.LightGray) ..
Kotlin / 클래스 관계 등 추가사항 알아보기 1. 클래스 연관관계 알아보기 클래스 관계 상속관계 (is a) : 클래스를 상속해서 하나의 클래스처럼 사용한다. 연관관계 (has a) : 클래스를 상속하지 않고 내부적인 속성에 객체를 만들어서 사용한다. 결합관계 (약한 has a) : 연관관계를 구성하는 방식 중에 클래스 간의 주종관계 없이 단순하게 사용하는 관계를 말한다. 조합관계 (강한 has a) : 연관관계를 구성하는 방식 중에 클래스 간의 주종관계가 있어서 따로 분해해서 사용할 수 없는 관계를 말한다. 의존관계 (사용 has a) : 필요한 클래스를 매개변수 등으로 받아 필요한 시점에 사용하는 관계를 말한다. 결합(Aggregation) 관계 단순하게 사용하는 클래스에서 사용된 클래스의 객체를 속성으로 만들어서 사용 보통 주 생성자에 객체를..

반응형