본문 바로가기

전체 글

(137)
[Kotlin] 객체지향 프로그래밍 - Companion Object 개요 오늘은 코틀린의 Companion Object에 대해서 알아보도록 하겠습니다. Java와 같은 언어로 개발된 프로그램은 운영체제로부터 메모리(RAM)의 공간을 할당받아야 합니다. 이러한 메모리의 할당 및 관리는 운영체제의 역할이자 중요한 작업 중 하나입니다. 하지만, 이러한 메모리는 무제한으로 쓸 수 없고 한정된 공간을 가지고 있습니다. 그러므로 프로그램을 개발할 때는 메모리를 최대한 효율적으로 사용하도록 프로그램을 설계해야 합니다. 만약 그렇지 않고 프로그램을 잘못 만들게 되면, 프로그램의 성능 저하와 때에 따라 프로그램이 비정상 종료되는 문제를 마주할 수 있습니다. 자바 메모리 구조 코틀린의 Companion Object를 살펴보기 전, 잠시 자바의 메모리 구조를 살펴보도록 하겠습니다. 코틀린의..
[Kotlin] 객체지향 프로그래밍 - 제네릭(Generic), in, out, where 개요 오늘은 코틀린의 제네릭(Generic)에 대해서 알아보도록 하겠습니다. 코틀린 제네릭(Generic) 개인적으로 객체지향 프로그래밍에서 정수는 제네릭(Generic)이라고 생각합니다. 지금까지 코틀린을 통한 객체지향 프로그래밍 기술에 대해 살펴보았는데요. 객체지향 프로그래밍(Object-Oriented Programming), 줄여서 OOP는 수많은 객체가 서로 얽히고설켜서 복잡한 프로그램을 동작하게 합니다. 특히, 상속(Inheritance)을 통해 객체 간의 상호 관계를 설정할 수 있으므로 최소한의 단위로 최대 경우의 수만큼 코드를 재사용할 수 있다는 점은 OOP의 가장 큰 매력이라고 생각합니다. 객체지향 언어를 사용하는 개발자는 이러한 OOP의 고유한 특성을 잘 활용하여, 중복되는 코드를 하나..
[Kotlin] 객체지향 프로그래밍 - 추상클래스와 인터페이스 개요 오늘은 코틀린의 추상 클래스(Abstract Class)와 인터페이스(Interface)에 대해서 알아보도록 하겠습니다. 코틀린의 추상 클래스(Abstract Class) 지난 포스팅에서는 코틀린의 상속에 대해서 알아보았습니다. 객체지향 프로그래밍에서 상속은 반복되는 코드의 작성을 줄여주고 유지 보수성을 편리하게 하는 이점이 있습니다. 그런데, 다음의 상황을 한 번 생각해보도록 하겠습니다. 코틀린 개발자가 자동차 시뮬레이션 프로그램을 만들기 위해 멋진 객체를 설계해보려고 합니다. 시뮬레이션 프로그램에서는 일반 자동차뿐만 아니라 이륜 오토바이도 함께 주행 테스트를 해야 한다고 합니다. 이때 자동차와 오토바이는 모두 엔진을 가지고 있으므로 공통점이 있지만, 자동차는 4기통 엔진이 들어가고, 오토바이는 ..
[Kotlin] 객체지향 프로그래밍 - 상속, this, super, 오버라이딩, 오버로딩 개요 오늘은 지난 포스팅에 이어서 객체지향 프로그래밍에 대해 더 자세히 알아보겠습니다. 객체지향 프로그래밍에서 프로그램 전체의 흐름을 결정하고 주관하는 것은 `객체`입니다. 객체지향 프로그래밍에서 프로그램을 구성하는 `객체(Object)`는 매우 중요한 역할을 담당합니다. 특히 이 `객체(Object)`들은 현실 세계에서 사람이 상호 간에 관계를 맺고 살아가는 것처럼 프로그램 내에서도 상호 관계를 맺어서 상호 작용하며 아무리 복잡한 작업이라도 수행할 수 있도록 임무를 수행합니다. 그러므로 오늘은 객체지향 프로그래밍에서 어떻게 객체(Object)가 서로 관계를 맺고 상호작용하는지 그 방법론에 대해 알아보도록 하겠습니다. 코틀린의 상속 코틀린에서 객체는 class 키워드를 통해 아래와 같이 선언할 수 있습니..
[Kotlin] 객체지향 프로그래밍 - 클래스, 생성자, init, 접근 제한자 개요 오늘은 코틀린의 클래스에 대해서 알아보도록 하겠습니다. 코틀린은 객체지향 프로그래밍 언어(Object-Oriented Programming Language)입니다. 오늘날 존재하는 모든 객체지향 프로그래밍 언어는 객체(Object)를 중심으로 프로그램이 설계됩니다. 프로그램을 실행하는 주체가 객체(Object)라는 개념은, 절차지향 프로그래밍 언어와 객체지향 프로그래밍 언어의 차이를 구분하는 중요한 기준점이 됩니다. 더 자세한 내용은 아래의 포스트를 참고하시면 좋을 것 같습니다. https://1-hee.tistory.com/94 [CS BASIC] 프로그램과 프로그래밍 그리고 프로그램 패러다임 오늘은 프로그램과 프로그래밍, 그리고 프로그래밍 패러다임에 대해서 다뤄보도록 하겠습니다. 요즈음에는 다양..
[Kotlin] Null-Safety와 형 변환(Type Cast), 타입 체크(Type Check), 예외(Exception) 처리 개요 오늘은 코틀린의 Null-Safety와 타입 체크(Type Check), 예외 처리(Exception)에 대해서 알아보도록 하겠습니다. null이란? 프로그래밍에서 "null"은 값이 존재하지 않음을 나타내는 특별한 상태를 가리키는 데 사용됩니다. 이는 일반적으로 변수나 참조가 아직 초기화되지 않았거나, 값이 할당되지 않았을 때 발생합니다. null 값은 다음과 같은 상황에서 사용될 수 있습니다. ① 초기화되지 않은 변수 변수가 선언되었지만, 아직 값을 가지고 있지 않을 때, 이 변수는 일반적으로 null로 설정됩니다. ② 객체의 빈 참조 객체를 가리키는 참조가 없을 때 해당 참조는 null로 설정됩니다. ③ 메모리 할당 실패 동적으로 메모리를 할당하려고 시도했지만 실패한 경우, 변수는 null을 ..
[운영체제] 디스크 스케줄링 개요오늘은 디스크 스케줄링에 대해서 알아보도록 하겠습니다.요즘 컴퓨터에서 사용하는 저장장치의 종류는 정말 다양해졌습니다.과거에는 플로피 디스크라고 해서 오늘날의 ‘저장’ 버튼에 해당하는 저장장치부터 시작해서 하드 디스크, 그리고 SSD까지 시간이 지날수록 저장소의 저장 속도는 빨라졌고, 용량은 많아졌습니다. 이러한 눈부신 저장장치의 하드웨어적 발전 속에서,디스크 스케줄링은 다소 생소한 개념이 된 것 같습니다. 디스크 스케줄링은 컴퓨터 디스크에서 정보를 빠르고 효율적으로 입출력하기 위해 고안된 스케줄링 전략입니다. 지금까지 운영체제는 주로 CPU와 같이 비교적 비싼 자원에 대해서 어떻게 관리하고 있는지 소개했는데요. 오늘은 운영체제가 플로피 디스크부터 하드 디스크, SSD까지 외부 저..
[Dart] Dart 기본 문법4 [비동기, async, await, Future, Stream] 개요 오늘은 프로그래밍에서 중요한 동기(synchronous), 비동기(asynchronous) 에 대해서 알아보도록 하겠습니다. 우선, 동기와 비동기가 무엇인지 알아보고 dart에서는 어떻게 비동기 프로그래밍을 할 수 있는지 살펴보겠습니다. 오늘의 포스팅에서 소개할 내용은 아래와 같습니다. 동기, 비동기 Future Async Await Stream BroadCastStream 비동기 함수의 Starem 변환 동기(synchronous) vs 비동기(asynchronous) 기본적으로 대부분의 프로그래밍 언어는 코드를 작성한 '순서'대로 작업을 수행합니다. 지난 포스팅에서 지금까지 dart를 통해 작성한 프로그램도 엄밀히 구분하자면 '동기'적으로 실행되었습니다. 동기, 비동기 프로그램의 동작 흐름을 그..