230717 TIL
코틀린 시작하기 전에 알아야할 내용 + 코틀린 시작하기
프로그래밍
프로그램을 제작하는 행위, 컴퓨터와 소통하는 행위, 프로그래밍 방법: 명령어의 조합
컴퓨터 명령어
명령 테이블의 내용을 해석하는 프로그램
프로그래밍 언어
명령어를 사람이 이해하기 쉬운 형태로 만든 언어 (사람과 컴퓨터간 소통을 위한 목적을 가진 언어)
프로그래밍 언어가 많은 이유
특정한 목적에 적절하게 사용하기 위함.
코틀린 소개
앱, 백엔드 데스크톱 프로그램등 다양한 프로그램을 개발할 수 있는 언어
구글에서 공식적으로 안드로이드 앱 개발 언어로 채택
Java의 단점을 개선
JVM 언어와 100% 호환되는 프로그래밍 언어
Null처리에 높은 안정성을 가진다.
직관적이고 간결한 문법 (Java에 비해 더 간결하게 작성할 수 있음)
적은 노력으로 많은 작업을 할 수 있다.
더욱 높은 품질의 프로그램을 제작할 수 있습니다.
간결하고 안전하게 비동기 처리를 수행할 수 있습니다.
java와 달리 kotlin은 변수의 자료를 명시하지 않아도 변수값을 알아서 추론해줍니다.
코틀린 시작하기
1. IDE 세팅
IDE(Intergrated Development Environment)를 통해 코틀린으로 프로그램을 개발할 수 있습니다.
KotlinPlayGround - 미설치 IDE (코틀린 문법을 공부하는 수준)
소스 코드
text가 붙지 않은 .com
프로젝트 저장된 위치 확인
app -> 우클릭 -> find explorer
유용한 단축키
한줄 지우기 컨트롤+y
주석 처리(다시 한번 누르면 풀림) 컨트롤+/
자동 포커싱 esc
전체 찾기 컨트롤 + 쉬프트 + F
문서 저장 컨트롤 + S
복사와 붙여넣기 컨트롤 + C / 컨트롤 + V
라인 드래그 쉬프트+ 방향키
문장 최상단/하단 이동 최상단 컨트롤 + Home, 최하단 컨트롤 + End
개인 과제
전체 드래그 : Ctrl + A
6번째 라인 최상단, 최하단 내용 드래그 : 최상단 Ctrl+Shift+Home, 최하단 Ctrl+Shift+End
단축키 드래그, 복사, 붙여넣기 : 드래그 단축키 Shift, 복사 Ctrl+C, 붙여넣기 Ctrl+V
코틀린 맛보기
코딩 컨벤션 (Cording Convention)
정의 : 다른 사람들도 이해하기 쉽게 코드를 작성하는 규칙
필요성
1. 코드의 가독성이 즐가해서 나중에 봐도 쉽게 이해할 수 있다.
2. 유지 보수가 용이하다.
3. 효율적인 협업이 가능하다.
1) 자주 사용하는 표기법
camelCase : 낙타등과 같이 보이는 표기법 (주로 변수, 메소드의 이름을 지정할 때 사용)
snake_case : 언더바로 묶음 (상수의 이름을 지정할때 사용)
PascalCase 표기법 : 카멜케이스와 비슷하지만 첫 글자 부터 대문자 (주로 클래스의 이름을 지정할 때 사용)
2) 출력(Output)과 입력(Input)
프로그램의 출력 : 프로그램에서 다른 장치로 데이터를 전송하는 행위
프로그램의 입력 : 다른 장치로부터 데이터를 불러와서 프로그램에서 확인하는 행위
3) 자료형
프로그램의 모든 정보를 데이터 또는 자료라고 부릅니다.
자료를 지정할 수 있는 적절한 형태를 자료형이라고 정의합니다.
비트는 컴퓨터 메모리를 구성하는 단위입니다.
1byte=8bit
자료형을 잘 활용하면 데이터 낭비를 줄일 수 있다.
4) 변수(variable)와 상수(value)
변수(var) : 변할 수 있는 값
상수(val) : 바뀌지 않는 값
코틀린 기초
1) 연산자의 종류
변수의 왼쪽 전위 연산자, 변수의 오른쪽 후위 연산자
산술 연산자 (사칙연산 등 기본적인 연산을 다루는 연산자.)
대입 연산자 ("="을 기준으로 오른쪽에 있는 값을 왼쪽의 변수명 또는 상수명에 대입하는 연산자)
복합대입 연산자 (산술연산자와 대입 연산자를 동시에 사용할 수 있는 연산자)
증감 연산자 (피연산자의 값을 증감해주는 연산자 변수명++, 변수명--, ++변수명, --변수명)
비교 연산자 (두 개의 변수 또는 상수의 관계나 값을 비교할 때 사용하는 연산자, 결과는 참 또는 거짓)
2) 조건식의 사용
조건에 따라 프로그램을 실행합니다.
코틀린에서는 if, else, when 키워드를 활용해서 조건을 관리합니다.
else if가 많아질 때는 when을 사용하는 것이 더욱 가독성이 좋습니다.
if는 최악의 경우에 모든 조건을 비교한다는 단점을 고려해야합니다.
3) 반복문의 사용
논리에 맞게 코드를 반복해서 실행합니다.
코틀린에서는 for, while 키워드를 활용해서 반복적인 로직을 관리합니다.
break 가장 가까운 반복문에서 탈출하고 다음 블록으로 넘어가는 기능
continue 이후의 코드를 실행하지 않는 기능
untul ~미만 까지
.. ~이하 까지
객체지향 프로그래밍 기초
1. 메소드 설계
특정한 로직을 가진 소스 코드에 이름을 붙이는 행위, 이름이 붙은 로직은 메소드다.
fun 메소드이름(변수명:자료형, 변수명:자료형 ....) : 반환자료형 {
소스코드 로직
}
메소드의 사용처
1 로직을 추상화해놓고 상황에 맞게 실행할 수 있다.
2 코드의 재사용성을 높일 수 있다.
2. 클래스 설계
객체 지향 프로그래밍을 설명해주는 행위 (프로그램의 각 요소별 설계도)
클래스에는 정보(프로퍼티)와 행위(메소드)를 작성한다.
보통 하나의 파일은 한개의 클래스를 의미하지만, 하나의 파일안에 여러개의 클래스가 존재할 수 있다.
코틀린은 모든 것이 클래스형태이므로 객체화 할 수 있다.
프로그램에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만든다.
클래스 키워드 : 클래스, 추상화, 캡슐화, 상속, 다형성
객체지향 프로그래밍, 절차지향 프로그래밍, 함수형 프로그래밍
3. 생성자 활용
클래스를 실체화 할때 최초로 실행할 로직
기본 생성자와 명시적생성자
주 생성자(init)와 부 생성자(Constructor)
기본 생성자는 이전까지 클래스를 만들던 행위와 차이가 없지만, 명시적 생성자는 주 생성자와 부 생성자로 구분할 수 있다.
한 가지의 형태로 형태를 활용할때는 주 생성자를 활용할 수 있다.
여러 형태로 클래스를 실체화할때는 보조 생성자를 활용할 수 있다.
4. 객채의 활용
객체와 인스턴스
객체 모든 인스턴스를 포함하는 개념, 클래스 타입으로 선언된것들
인스턴스 클래스 형태로 설계된 객체를 실체화한것
클래스를 실체화 과정
- 정보와 행위를 작성한 클래스를 실체화해서 프로그램에 로딩합니다. (메모리에 적재)
- 정보가 행위가 그대로 로딩되는것이 아니라 위치정보를 메모리에 로딩합니다.
- 프로그램은 객체의 위치정보를 변수에 저장해두고, 필요할 때 참조합니다.
5. 상속
클래스(설계도) 간의 관계를 더욱 끈끈하게 만들 수 있다.
공통적인 요소들이 있다면 부모/자식 클래스를 구분해서 상속관계를 만들 수 있다.
final 키워드로 무분별한 상속으로 예상치 못한 흐름을 방지하기 위해 기본적으로 상속을 막아두었다.
open 키워드를 활용해서 상속 관계를 만들 수 있다.
상속의 활용
다형성을 구현할 수 있다.
클래스 내용의 변경해야하는 경우 부모 클래스만 변경하는 것으로 공수를 줄일 수 있다.
6. 오버라이딩 : 부모 클래스의 행위(메소드)를 재설계한다. (단축키 컨트롤+O)
부모 클래스의 정보를 재설계할 수 있다.
설명
상속받은 부모 클래스이 정보나 행위를 재설계할 수 있다.
주로 부모 클래스의 행위(메소드)를 재설계한다.
재설계할 때 상속이나 오버라이딩을 하는 이유
OOP관점에서는 클래스들간의 관계를 만들고, 일관성을 유지하는 목표를 가집니다.
공통적인 내용을 부모 클래스에서 관리하는건 좋지만, 자식 클래스의 개성을 살리기 위해서 사용
만약 필요한 기능이 있을때마다 별도의 이름으로 만들게된다면 일관성을 해칩니다.
프로그램에 문제가 생기지는 않지만 재사용성이 떨어져 유지보수가 어렵다.
7. 오버로딩
동일한 이름의 메소드를 여러 형태로 만들 수 있다.
매개변수의 갯수를 다르게하면 동일한 이름으로 메소드를 만들 수 있다.
매개변수의 자료형을 다르게하면 동일한 이름으로 메소드를 만들 수 있다.
반환자료형은 오버로딩에 영향을 주지 않는다.
오버로드의 활용
- 두 개의 정수를 매개변수로 받아 더하는 메소드를 add라는 이름으로 만들었어요
- 하지만 두 개의 실수(소수)를 매개변수로 받아 더하는 메소드도 만들어야해요
- 더하는거니까 add라는 이름이 적합한데 어떻게 해야할까요?
- addInt, addDouble 이렇게 메소드를 따로 만드는건 나중에 관리하기 힘들어져요
- 이 상황에서는 더해야하는 자료형이 정수,실수로 다르니까 오버로딩으로 해결할 수 있어요
8. 인터페이스
공통적으로 필요한 기능을 외부에서 추가해주는 기능
인터페이스의 구조
- 메소드의 로직이 존재하지않고 이름만 존재할 경우 추상 메소드라 한다.
- 원래 인터페이스는 추상메소드만 허용하지만 최근에는 추상메소드가 아니여도 괜찮아졌다.
- 하지만 인터페이스는 추상메소드를 작성하는 습관을 가지는게 좋다.
interface 인터페이스이름 {
fun 메소드이름()
}