본문 바로가기

전체 글234

[Kotlin] 타입 연산자(is, as), 널 처리 연산자 타입여러 종류의 데이터를 식별하는 분류로, 어떤 값이 가능한지와 그 타입에 대해 수행할 수 있는 연산의 종류를 결정한다. 타입 체크is와 !is 연산자를 사용하여 런타임에 객체가 주어진 타입인지 확인할 수 있다.스마트 캐스트(Smart Cast) : 컴파일러가 불변 값에 대해 is 검사를 추적하여 필요할 때 자동으로 (안전하게) 캐스팅을 수행하는 기능 타입 캐스팅as 연산자를 사용하여 데이터 타입을 다른 데이터 타입으로 변환할 수 있다.캐스팅은 주로 상속 관계에 있는 클래스들 간에 사용된다.상위 클래스의 객체를 하위 클래스 타입으로 변환하거나, 하위 클래스의 객체를 상위 클래스 타입으로 변환하는 데 활용된다. 업캐스팅하위 클래스의 인스턴스를 상위 클래스 타입으로 변환하는 것항상 안전하며, 명시적으로 캐스.. 2024. 12. 8.
[Kotlin] Kotlin 이란 Kotlin자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어간결하고 실용적이며, 자바 코드와의 *상호운용성을 중시한다.상호운용성 : 하나의 시스템이 동일 또는 이기종의 다른 시스템과 아무런 제약이 없이 서로 호환되어 사용할 수 있는 성질목적 : 현재 자바가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고 생산적이며 안전한 대체 언어를 제공하는 것자바와 마찬가지로 코틀린도 정적 타입 지정 언어다.널이 될 수 있는 타입을 지원함에 따라 *컴파일 시점에 널 포인터 예외(NullPointerException)가 발생할 수 있는지 여부를 검사할 수 있어서 좀 더 프로그램의 신뢰성을 높일 수 있다.컴파일 시점(Compile Time) : 사람이 읽을 수 있는 형태의 소스 코드를 컴퓨터가 읽을 수 있는 형태의 기계.. 2024. 12. 8.
[Kotlin] 객체 지향 프로그래밍(Object-Oriented Programming) 프로그래밍 방식1. 명령형 프로그래밍(Imperative Programming, IP)프로그래밍의 상태와 상태를 변경하는 구문의 관점에서 연산을 설명하는 방식무엇(What)을 ‘어떻게(How)’ 할 것인지에 집중한다.1-1. 절차지향 프로그래밍(Procedural Programming, PP) : 문제를 순차적으로 처리하여 프로그램을 만드는 방식 (C, C++)절차지향 프로그래밍은 함수를 구조화할 뿐 데이터 자체를 구조화하지 못하기 때문에, 소프트웨어의 규모가 커지거나 변화가 생기면 각각의 함수에 의존하는 부분을 매번 고쳐야 하는 등 작업이 복잡해져 스파게티 코드를 유지보수하는 데 어려움을 겪는다.1-2. 객체지향 프로그래밍(Object-Oriented Programming, OOP) : 객체들 간의 상.. 2024. 12. 8.
[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.
[BaekJoon][Kotlin] 10158번 - 개미 https://www.acmicpc.net/problem/10158문제가로 길이가 w이고 세로 길이가 h인 2차원 격자 공간이 있다. 이 격자는 아래 그림처럼 왼쪽 아래가 (0,0)이고 오른쪽 위가 (w,h)이다. 이 공간 안의 좌표 (p,q)에 개미 한 마리가 놓여있다. 개미는 오른쪽 위 45도 방향으로 일정한 속력으로 움직이기 시작한다. 처음에 (p,q)에서 출발한 개미는 1시간 후에는 (p+1,q+1)로 옮겨간다. 단, 이 속력으로 움직이다가 경계면에 부딪치면 같은 속력으로 반사되어 움직인다.위 그림은 6×4 격자에서 처음에 (4,1)에서 출발한 개미가 움직인 길을 보여주고 있다. 처음에 (4,1)에 있는 개미는 2시간 후에 (6,3)에 있으며 8시간 후에 (0,1)에 있다. 만일 그 개미가 처음에.. 2024. 12. 6.
[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.