Java, Kotlin, Python 언어를 한눈에 비교할 수 있도록 표로 정리해 보았습니다.
JAVA | KOTLIN | PYTHON | |
클래스명 | PascalCase | PascalCase | PascalCase |
변수, 함수명 | camelCase | camelCase | snake_case |
주석 | //, /* */ | //, /* */ | # |
주요 문법 | 문장 끝에 ; {} |
{} | 띄어쓰기 중요 : 와 띄어쓰기로 {} 대체 pass 로 추후에 구현할 부분 대체 가능 |
규칙 | 클래스 밖에서 변수와 함수를 선언할 수 없습니다. | 클래스 밖에서 변수와 함수를 선언할 수 있습니다. | 클래스 밖에서 변수와 함수를 선언할 수 있습니다. |
기본형 | byte char int long float double boolean (true, false) |
||
참조형 | 기본형을 제외한 모든 자료형 | Byte Char Int Long Float Double Boolean (true, false) … |
string number bool (True, False) … |
널 허용 자료형 구분 | ?를 붙여 구분함 | ||
문자열 | “” | “” | “” , ‘’ 구분 없음 |
부호없는 자료형 | UByte Ushort UInt ULong |
||
자료형 확인 | 참조변수 instanceof 확인할 클래스 | 참조변수 is 자료형 참조변수 as 자료형 |
type(참조변수) isinstance(참조변수, 클래스) |
지연초기화 | lateinit var val … by lazy {} |
||
연산자 | ?: | ?. : 세이프콜 !!. : 단정기호 ?: : 엘비스 연산자 is, !is : 자료형 검사 as, as? : 형변환 in : 범위 연산 .. : 범위 연산 |
** : 제곱 연산 in : 범위 연산 [] : 슬라이싱 가능 // : 정수형으로 나눗셈 계산 |
다른 형식의 연산자 | 1. |, &, ^ 2. ||, && 3. ! |
1. or, and, xor 2. ||, && 3. ! |
1. |, &, ^ 2. and, or 3. not |
다른 결과의 연산자 | / : 소수점값을 버리고 int형으로 계산 | / : 소수점값을 버리고 int형으로 계산 +, - : 컬렉션 연산에도 사용 가능 |
/ : 실수형으로 계산 * : 문자열 반복으로도 사용 가능 +, * : 리스트 연산에도 사용 가능 * : 전개 연산에도 사용 가능 |
형변환 | (타입)~ 문자열 → 기본형 : 기본형.pase기본형(문자열) 기본형 → 문자열 : String.valueOf(기본형) |
~.to타입() | 타입(~) |
자주 사용하는 문자열 함수 | 대소문자 바꾸기 : toUpperCase(), toLowerCase() 공백 제거 : trim() 문자 찾기 : indexOf() lastIndexOf() |
대소문자 바꾸기 : uppercase() lowercase() 공백 제거 : trim() 문자 찾기 : indexOf() lastIndexOf() |
대소문자 바꾸기 : upper() lower() 공백 제거 : strip() 문자 찾기 : index(), rindex(), find(), rfind() |
format 문자열 | String.format() | “${}” | f”…{표현식}…” ”{} {}”.format() |
~ 이상(초과) ~ 이하(미만) 조건식 | 3 ≤ a && a ≤ 5 | a in 3..5 | 3 ≤ a ≤ 5 a in range(3, 5 + 1) |
if 문 | if (조건식) { ... } else if (조건식) { ... } else { ... } |
if (조건식) { ... } else if (조건식) { ... } else { ... } |
if 조건식: … elif: … else: … |
분기 조건문 | switch - case 문 swtich (조건식) { case 값: 문장 break; default: 문장 } |
when 문 when (인자) { 값, 표현식 → 문장 } when { 조건, 표현식 → 문장 } |
|
반복문 | for 문 while 문 do - while 문 |
for 문 while 문 do - while 문 repeat 함수 |
for 문 while 문 |
반복문 기본형식 | for (초기화; 조건식; 증감식) { 문장 } |
for (요소변수 in 반복할 수 있는 것) { 문장 } |
for 반복자 in 반복할 수 있는 것: 문장 |
반복문 이름 붙히기 | LOOP1 : break LOOP1; |
LOOP1@ break@LOOP1 |
|
입력 | Scanner sc = new Scanner(System.in); int N = sc.nextInt(); |
val sc = Scanner(System.`in`) var N= sc.nextInt() var N = readLine() |
N = int(input()) |
출력 | System.out.println() System.out.print() System.out.printf() |
println() print() printf() 문자열 안에 $기호를 사용하여 변수값이나 표현식값을 출력할 수 있음 ”${a}” |
print() print(end=’’) 여러개의 요소를 ,로 구분하여 나열 가능 ( 공백으로 구분하여 출력 ) |
배열 출력 | Arrays.toString(배열) | 배열.contentToString() Arrays.toString(배열) |
그냥 출력 |
컨테이너 자료형의 길이 | 문자열 : length() 배열 : length 컬렉션 : size() |
문자열 : length 배열 : size 컬렉션: size |
len() |
배열 | int[] array = {1, 2, 3}; | val array = arrayOf(1, 2, 3) val array = intArrayOf(1, 2, 3) val array = Array(3, {i → i + 1}) |
array = [1, 2, 3] |
배열 오름차순 정렬 | Arrays.sort(array) | array.sort() Arrays.sort(array) | array.sort() |
배열 내림차순 정렬 | Arrays.sort(array, Collections.reverseOrder()); | array.sortDescending() | array.sort(reverse=True) |
리스트 | ArrayList arrayList = new ArrayList<>(); | val arrayList = arrayListOf(1, 2, 3) | list = [1, 2, 3] |
리스트 정렬 | Collections.sort(arrayList) | arrayList.sort() | list.sort() |
리스트 뒤집기 | Collections.reverse(arrayList); | arrayList.reverse() | list.reverse() |
세트 | HashSet hashSet = new HashSet<>(); | val hashSet = HashSet<Any>() | set = {} |
맵, 딕셔너리 | HashMap hashMap = new HashMap<>(); | al hashMap = java.util.HashMap<Any, Any>() | dic = { ”name” : “hi” } |
튜플 | tuple = () 한 번 결정된 요소는 바꿀 수 없음 괄호 생략 가능 | ||
불변형 / 가변형 컬렉션 구분 | List / MutableList Set / MutableSet Map / MutableMap |
||
함수 문법 | 제어자 반환타입 함수명(타입 매개변수, … ) { 문장 } |
fun 함수명(매개변수: 매개변수 타입, ... ): 반환타입 { 문장 } |
def 함수명 (매개변수명, … ): 문장 |
반환값이 없을 때 반환타입 | void 아무것도 반환하지 않음 |
Unit Unit 객체를 반환함 |
None None 객체를 반환함 |
가변 매개변수 | 타입... 매개변수명 | vararg 매개변수명: 타입 | *매개변수명 |
람다식 | (반환타입 매개변수) -> { 문장 } | val(var) 변수명 : (매개변수 타입) -> 반환타입 = {매개변수: 매개변수타입 -> 문장 } | lambda 매개변수 : 리턴값 - 반드시 리턴 - 한 줄만 가능 |
다양한 함수 | 익명 함수 : 람다식과 유사하나 제어문등을 사용하기 위함 인라인 함수 : 람다식 매개변수가 있을 때 사용, 함수 본문의 내용을 함수 호출 장소에 붙여 넣어 자원 사용량을 줄임 확장 함수 : 필요로 하는 대상(클래스 등)에 함수 추가 중위 함수 : 함수를 연산자처럼 사용할 수 있게 함 | ||
표준 함수 | 스코프 함수 let() also() apply() run() with() use() |
||
다양한 클래스 | abstract class instance class static class enum : instance class 와 static class는 키워드 없이 클래스 안에 클래스 선언 |
abstract class inner class nested class enum class data class sealed class : nested class 는 키워드 없이 클래스 안에 클래스 선언 |
|
상속 | class 클래스 extends 상위클래스 {} class 클래스 implements 인터페이스 {} |
class 클래스 : 상위클래스() {} class 클래스 : 인터페이스 {} |
class 클래스(상위클래스): |
생성자 | class 클래스명 { 클래스명() {} } |
class 클래스명 (매개변수) { // 주 생성자 constructor(매개변수) { // 부 생성자 } } |
def __init__(self, 매개변수): |
초기화 블록 | {} static{} |
init{} | |
다양한 객체 | <익명 객체> new 상위클래스명() {...} new 인터페이스명() {...} |
<컴패니언 객체(이름 x, 싱글톤 o)> companion object { 프로퍼티 메서드 } : 자바의 static 멤버 <object 선언(이름 o, 싱글톤 o)> object 객체이름 { } <object 표현식(이름 x, 싱글톤 x)> object: 상위클래스명(){…} object: 인터페이스명 {…} object {} : 자바의 익명 객체 |
|
제어자 | 클래스) 기본 상속 가능 제한 : final 변수) default : 같은 패키지 내에서 사용 가능 private default pretected public |
클래스) 기본 상속 불가 제한 해제 : open 변수) public : 어디에서나 사용 가능 private protected internal public |
|
예외 처리 | try { … } catch (예외클래스 참조변수) { … } finally { … } |
try { … } catch (예외클래스 참조변수) { … } finally { … } |
try: … except: … else: … finally: … |
코드 실행 시간 | long start = System.currentTimeMillis(); // 측정하고 싶은 코드 long end = System.currentTimeMillis(); long duration = end - start; ms단위 |
import kotlin.system.measureTimeMillis val time = measureTimeMillis { // 측정하고 싶은 코드 } ms단위 |
import time start = time.time() # 측정하고 싶은 코드 end = time.time() duration = end - start s단위 |