Java, Kotlin, Python, C++ 언어를 한눈에 비교할 수 있도록 표로 정리해 보았습니다.
JAVA | KOTLIN | PYTHON | C++ | |
클래스명 | PascalCase | PascalCase | PascalCase | PascalCase |
변수, 함수명 | camelCase | camelCase | snake_case | camelCase snake_case |
주석 | //, /* */ | //, /* */ | # | //, /* */ |
주요 문법 | 문장 끝에 ; {} |
{} | 띄어쓰기 중요 : 와 띄어쓰기로 {} 대체 pass 로 추후에 구현할 부분 대체 가능 |
문장 끝에; {} |
불러오기 | import | import | import | #include |
선언 규칙 | 클래스 밖에서 변수와 함수를 선언할 수 없습니다. | 클래스 밖에서 변수와 함수를 선언할 수 있습니다. | 클래스 밖에서 변수와 함수를 선언할 수 있습니다. | 클래스 밖에서 변수와 함수를 선언할 수 있습니다. |
기본형 | boolean (true, false) char byte short int long float double |
bool (True, False) string number … |
bool char signed char /unsigned char char8_t char16_t char32_t wchar_t short / unsigned short int / unsigned int long / unsigned long long long / unsigned long long float double long double |
|
참조형 | 기본형을 제외한 모든 자료형 | Boolean (true, false) … Char Byte / UByte Short / UShort Int / UInt Long / ULong Float Double String |
기본형을 제외한 모든 자료형 | 기본형을 제외한 모든 자료형 |
널 허용 자료형 구분 | ?를 붙여 구분함 | |||
문자 | 'A' | 'A' | 'A', "A" 구분 없음 | 'A' |
문자열 | "String" 불변함 |
"String" """ Multi Line """ 불변함 |
'String', "String" 구분 없음 ''' Multi Line ''' """ Multi Line """ |
"String" R"( Multi Line )" 1. C언어 방식 char* str = "String"; char str[] = "String"; 2. C++ 방식 std::string str = "String"; |
자료형 확인 | 참조변수 instanceof 확인할 클래스 | 참조변수 is 자료형 참조변수 as 자료형 |
type(참조변수) isinstance(참조변수, 클래스) |
#include <typeinfo> typeid(참조변수).name() |
지연초기화 | lateinit var val … by lazy {} |
|||
연산자 | a?b:c : a조건이 참이면 b 반환 거짓이면 c 반환 | ?. : 세이프콜 !!. : 단정기호 ?: : 엘비스 연산자 is, !is : 자료형 검사 as, as? : 형변환 in : 범위 연산 .. : 범위 연산 |
** : 제곱 연산 in : 범위 연산 [] : 슬라이싱 가능 // : 정수형으로 나눗셈 계산 |
:: : 범위 지정 연산 *(단항) : 역참조 &(단항) : 주소 a?b:c : a조건이 참이면 b 반환 거짓이면 c 반환 <=> : 3방향 비교연산자 |
다른 형식의 연산자 | 1. |, &, ^ 2. ||, && 3. ! |
1. or, and, xor 2. ||, && 3. ! |
1. |, &, ^ 2. and, or 3. not |
1. |, &, ^ 2. ||, && 3. ! |
다른 결과의 연산자 | / : (정수만) 소수점값을 버리고 int형으로 계산 (실수 포함) 실수형으로 계산 |
/ : (정수만) 소수점값을 버리고 int형으로 계산 (실수 포함) 실수형으로 계산 +, - : 컬렉션 연산에도 사용 가능 * : 전개 연산에도 사용 가능 |
/ : 실수형으로 계산 * : 문자열 반복으로도 사용 가능 +, * : 리스트 연산에도 사용 가능 * : 전개 연산에도 사용 가능 |
/ : (정수만) 소수점값을 버리고 int형으로 계산 (실수 포함) 실수형으로 계산 |
형변환 | (타입)대상 1. 문자열 → 기본형 기본형.parse기본형(문자열) 2. 기본형 → 문자열 String.valueOf(기본형) |
대상.to타입() | 타입(대상) | 타입(대상) (타입)대상 |
자주 사용하는 문자열 함수 | 대소문자 바꾸기 : toUpperCase(), toLowerCase() 공백 제거 : trim() 문자 찾기 : indexOf() lastIndexOf() |
대소문자 바꾸기 : uppercase(), lowercase() 공백 제거 : trim() 문자 찾기 : indexOf() lastIndexOf() |
대소문자 바꾸기 : upper(), lower() 공백 제거 : strip() 문자 찾기 : index(), rindex(), find(), rfind() |
대소문자 바꾸기 : std::toupper, std::tolower() 문자 찾기 : std::string::find |
format 문자열, StringTemplate | String.format("포맷 문자열", 값1, 값2, ...) | "${}" | f"…{표현식}…" "{} {}".format(값1, 값2) |
std::format("포맷 문자열", 값1, 값2, ...); |
~ 이상(초과) ~ 이하(미만) 조건식 | 3 ≤ a && a ≤ 5 | a in 3..5 | 3 ≤ a ≤ 5 a in range(3, 5 + 1) |
3 ≤ a && a ≤ 5 |
if 문 | if (조건식) { ... } else if (조건식) { ... } else { ... } |
if (조건식) { ... } else if (조건식) { ... } else { ... } |
if 조건식: … elif: … else: … |
if (조건식) { ... } else if (조건식) { ... } else { ... } |
분기 조건문 | switch - case 문 swtich (표현식) { case 값: 문장 break; default: 문장 } |
when 문 when (인자) { 값, 표현식 → 문장 } when { 조건, 표현식 → 문장 } |
switch - case 문 swtich (표현식) { case 값: 문장 break; default: 문장 } |
|
반복문 | for 문 while 문 do - while 문 |
for 문 while 문 do - while 문 repeat 함수 |
for 문 while 문 |
for 문 while 문 do - while 문 |
반복문 기본형식 | for (초기화; 조건식; 증감식) { 문장 } |
for (요소변수 in 반복할 수 있는 것) { 문장 } |
for 반복자 in 반복할 수 있는 것: 문장 |
for (초기화; 조건식; 증감식) { 문장 } |
반복문 이름 붙히기 | LOOP1 : break LOOP1; |
LOOP1@ break@LOOP1 |
LOOP1 : break LOOP1; |
|
입력 | Scanner sc = new Scanner(System.in); int N = sc.nextInt(); String S = sc.nextLine(); |
val sc = Scanner(System.`in`) var N = sc.nextInt() var S = readLine() |
N = int(input()) 기본 자료형 : String |
int N std::cin >> N 기본 자료형 : 연결된 변수의 타입에 의해 결정 |
출력 | System.out.println() System.out.print() System.out.printf() |
println() print() printf() |
print() print(end='') 여러개의 요소를 ,로 구분하여 나열 가능 ( 공백으로 구분하여 출력됨) |
std::cout << "" |
배열 출력 | Arrays.toString(배열) | 배열.contentToString() Arrays.toString(배열) |
그냥 출력 | 반복문으로 출력 |
컨테이너 자료형의 길이 | 문자열 : .length() 배열 : length 컬렉션 : .size() |
문자열 : length 배열 : size 컬렉션: size |
len() | 문자열(char[]) : strlen() 문자열(std::string) : .length(), .size() 배열(정적 배열) : sizeof(arr) / sizeof(arr[0]) STL 컨테이너 : .size() |
배열 | int[] array = {1, 2, 3}; 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] | 1. 정적 배열 int array[크기] = {}; 2. 동적 배열 int* array = new int[크기]; |
배열 오름차순 정렬 | Arrays.sort(array) | array.sort() Arrays.sort(array) |
array.sort() | std::sort(array, array + 크기); |
배열 내림차순 정렬 | Arrays.sort(array, Collections.reverseOrder()); | array.sortDescending() | array.sort(reverse=True) | std::sort(array, array + 크기, greater<자료형>()); |
리스트 | ArrayList arrayList = new ArrayList<>(); | val arrayList = arrayListOf(1, 2, 3) | list = [1, 2, 3] | #include <vector> std::vector<int> vec; |
리스트 정렬 | Collections.sort(arrayList) | arrayList.sort() | list.sort() | #include <vector> #include <algorithm> std::sort(vec.begin(), vec.end()); |
리스트 뒤집기 | Collections.reverse(arrayList); | arrayList.reverse() | list.reverse() | #include <vector> #include <algorithm> std::reverse(vec.begin(), vec.end()); |
세트 | HashSet hashSet = new HashSet<>(); | val hashSet = HashSet<Any>() | set = {} | #include <set> std::set<int> mySet; std::multiset<int> myMultiset; // multi : 중복된 값 포함 |
맵, 딕셔너리 | HashMap hashMap = new HashMap<>(); | al hashMap = java.util.HashMap<Any, Any>() | dic = { ”name” : “hi” } | #include <map> std::map<stirng, int> myMap; std::multimap<stirng, int> myMultiMap // multi : 같은 키에 다른 값 저장 가능 |
튜플 | Pair와 Triple이 존재하긴 하지만, 일반적으로 데이터 클래스를 대신 사용하는 편임. |
tuple = () // 한 번 결정된 요소는 바꿀 수 없음 괄호 생략 가능 |
tuple<자료형1, ..., 자료형n> 튜플_이름; // 크기가 고정되어 있으며, 여러가지 데이터 형식을 담을 수 있음. |
|
불변형 / 가변형 컬렉션 구분 | List / MutableList Set / MutableSet Map / MutableMap |
|||
함수 문법 | 제어자 반환타입 함수명(매개변수타입 매개변수명, … ) { 문장 } |
fun 함수명(매개변수명: 매개변수 타입, ... ): 반환타입 { 문장 } |
def 함수명 (매개변수명, … ): 문장 |
1. 선언 반환타입 함수명( 매개변수 타입 매개변수명, ...) 2. 정의 반환타입 네임스페이스or클래스::함수명( 매개변수 타입 매개변수명, ...) { 문장 } |
함수 선언, 정의와 호출 순서 | 무관 | 무관 | 호출 전에 정의되어야 함 | 호출 전에 선언되거나 정의되어야 함 |
반환값이 없을 때 반환타입 | void 아무것도 반환하지 않음 |
Unit Unit 객체를 반환함 |
None None 객체를 반환함 |
void 아무것도 반환하지 않음 |
가변 매개변수 | 타입... 매개변수명 (타입[] 으로 처리됨) |
vararg 매개변수명: 타입 (타입Array 로 처리됨) |
*매개변수명 | #include <cstdarg> ... (va_list 로 처리됨) |
람다식 | ( 매개변수타입 매개변수) -> { 문장 } | 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 는 키워드 없이 클래스 안에 클래스 선언한 것을 지칭함 |
friend class | |
상속 | class 클래스 extends 상위클래스 {} class 클래스 implements 인터페이스 {} |
class 클래스 : 상위클래스() {} class 클래스 : 인터페이스 {} |
class 클래스(상위클래스): | class 클래스 : 접근제어자 상위클래스 {}; |
다중 상속 가능 여부 | X | X | O | O |
생성자 | class 클래스명 { 클래스명() {} } |
class 클래스명 (매개변수) { // 주 생성자 constructor(매개변수) { // 부 생성자 } } |
class 클래스명: def __init__(self, 매개변수): |
class 클래스 { 접근제어자: 클래스명(매개변수) : 초기화목록 { } }; |
초기화 블록 | {} 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 |
private protected public |
|
예외 처리 | try { … } catch (예외클래스 참조변수) { … } finally { … } |
try { … } catch (예외클래스 참조변수) { … } finally { … } |
try: … except: … else: … finally: … |
try { ... } catch (예외형식 예외이름) { ... } |
코드 실행 시간 | 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단위 |
#include <chrono> using namespace chrono; auto start = high_resolution_clock::now(); // 측정하고 싶은 코드 auto end = high_resolution_clock::now(); auto duration = duration_cast<milliseconds>(end - start); ms단위 |
'개발공부 > 한눈에 보기 👀' 카테고리의 다른 글
객체지향 프로그래밍 공부내용 정리 (0) | 2025.01.11 |
---|---|
프로그래밍 관련 용어 정리 (2) | 2024.12.26 |