1. 객체 지향 프로그래밍
- 클래스와 객체
- 클래스는 객체를 만들기 위한 설계도이며, 객체는 그 설계도를 기반으로 생성된 인스턴스이다.
- 속성(데이터)과 메서드(행동)로 구성된다.
- 속성의 종류
- 인스턴스 변수: 객체마다 별도의 값을 가짐.
- 정적 변수(static): 클래스 자체에 속해 모든 객체가 공유.
- this 키워드로 현재 객체를 참조할 수 있다.
- 생성자
- 기본 생성자, 매개변수 생성자, 네임드 생성자 등 다양한 방식으로 객체 초기화를 지원한다.
- 상속과 다형성
- 자식 클래스는 부모 클래스의 속성과 메서드를 물려받아 사용할 수 있으며, 필요에 따라 재정의(override)할 수 있다.
- super 키워드를 통해 부모의 기능을 활용하면서 새로운 동작을 추가할 수 있다.
- final class를 선언하면 더 이상 상속이 불가능하다.
- 이를 통해 코드의 재사용성과 확장성을 높일 수 있다.
2. 예외 처리
- 예외의 개념
- 프로그램 실행 중 발생하는 오류 상황을 의미하며, 처리하지 않으면 프로그램이 중단된다.
- 예외 처리 방법
- try-catch-finally 구문을 통해 예외를 안전하게 처리하고, 프로그램의 흐름이 끊기지 않도록 유지할 수 있다.
- on 키워드로 특정 예외 타입만 처리할 수 있고, catch로 예외 정보를 받아 활용할 수 있다.
- finally 블록은 예외 발생 여부와 상관없이 반드시 실행된다.
- 예외의 종류
- Dart에서 제공하는 기본 예외(예: FormatException, IOException)
- 개발자가 정의하는 사용자 예외 (Exception 클래스를 상속하여 구현)
- throw 키워드
- 의도적으로 예외를 발생시켜 잘못된 상황을 제어할 수 있다.
3. 라이브러리와 비동기 프로그래밍
라이브러리
- 라이브러리의 개념
- 자주 사용하는 기능을 모아둔 코드 집합으로, 코드 재사용성과 가독성을 높여준다.
- 종류
- Dart SDK 기본 라이브러리: dart:core, dart:math, dart:async, dart:io 등
- 외부 라이브러리: pub.dev에서 제공되는 다양한 패키지(http, intl, shared_preferences 등)
- 사용 방식
- import 키워드로 가져올 수 있으며, show, hide, deferred를 사용해 필요한 기능만 선택적으로 불러올 수 있다.
- 지연 로딩(deferred as)은 프로그램 실행 시점에 필요한 라이브러리만 불러와 효율성을 높여준다.
비동기 프로그래밍
- 동기와 비동기의 차이
- 동기 방식: 작업이 완료될 때까지 기다린 후 다음 작업 실행 → 긴 작업에서는 비효율적.
- 비동기 방식: 작업 완료를 기다리지 않고 다른 작업을 수행, 결과는 나중에 반환.
- Dart의 비동기 처리 도구
- Future: 시간이 걸린 후 한 번만 결과를 반환하는 비동기 연산을 표현.
- Stream: 여러 차례 결과나 이벤트를 비동기적으로 전달받을 수 있는 데이터 흐름.
- 활용 예시
- 파일 I/O, 데이터베이스 접근, 네트워크 통신처럼 시간이 오래 걸리는 작업에서 비동기 처리를 사용해 프로그램 효율을 높인다.
객체 지향 프로그래밍을 통해 구조적이고 재사용 가능한 코드를 작성하는 방법을 익혔다. 예외 처리를 배우면서 프로그램이 안전하고 견고하게 동작하도록 만들 수 있다는 점을 확인했다. 라이브러리를 활용하면 생산성을 높이고 중복 코드를 줄일 수 있음을 알게 되었고,비동기 프로그래밍은 시간이 오래 걸리는 작업을 효율적으로 처리하는 핵심 개념임을 이해했다.