본문 바로가기
개발언어

자바, 코틀린, 파이썬 개발언어 한눈에 비교하기

by 개발자D 2023. 11. 28.

자바 코틀린 파이썬 개발언어 한눈에 비교하기

 

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단위