[카테고리:] 미분류

  • C# & Java

    C#과 Java는 둘 다 객체 지향 프로그래밍 언어로 많은 유사점을 가지고 있지만, 문법과 기능 면에서 몇 가지 중요한 차이점이 있습니다. 아래는 C#과 Java의 문법 차이를 정리한 내용입니다.


    1. 기본 구조

    • 클래스와 파일 이름
    • Java: 클래스 이름과 파일 이름이 반드시 일치해야 합니다 (예: MyClass.javaMyClass 정의).
    • C#: 클래스 이름과 파일 이름이 일치할 필요가 없습니다.
    • 메인 메소드
    • Java: public static void main(String[] args)로 정의됩니다.
    • C#: static void Main(string[] args)로 정의되며, 대문자 M을 사용합니다.
    • 네임스페이스
    • Java: package 키워드로 패키지를 정의하고, import로 가져옵니다.
    • C#: namespace 키워드로 네임스페이스를 정의하고, using으로 가져옵니다.

    2. 데이터 타입

    • 기본 타입
    • Java: int, double, boolean 등 제공.
    • C#: int, double, bool 등 유사하지만, decimal과 같은 추가 타입도 있습니다.
    • 문자열
    • Java: String (대문자 S).
    • C#: string (소문자, System.String의 별칭).
    • 열거형
    • Java: enum으로 정의하며, 메소드나 필드를 포함한 유연한 정의 가능.
    • C#: enum으로 정의하며, 기본적으로 int 타입 기반.

    3. 변수 및 상수

    • 상수
    • Java: final 키워드로 상수를 정의.
    • C#: const (컴파일 타임 상수)와 readonly (런타임 상수)를 사용.
    • var 키워드
    • Java: JDK 10부터 로컬 변수에 한해 var로 타입 추론 가능.
    • C#: var로 변수 타입을 추론하며, 범위 제한 없이 사용 가능.

    4. 연산자 및 제어문

    • 연산자
    • Java: instanceof로 타입 확인.
    • C#: is로 타입 확인, as로 타입 캐스팅.
    • 제어문
    • Java: for-each 루프 사용 (예: for (Type item : collection)).
    • C#: foreach 사용 (예: foreach (var item in collection)).
    • switch 문
    • Java: JDK 7부터 문자열 지원, goto 사용 불가.
    • C#: 문자열, 열거형 등 지원, goto로 제어 흐름 이동 가능.

    5. 객체 지향 프로그래밍

    • 상속
    • Java: extends로 클래스 상속, implements로 인터페이스 구현.
    • C#: :로 클래스 상속과 인터페이스 구현 모두 처리.
    • 추상 클래스
    • Java: abstract 키워드 사용.
    • C#: abstract 사용, 추상 프로퍼티와 이벤트 정의 가능.
    • 인터페이스
    • Java: interface로 정의, JDK 8부터 기본 구현 가능.
    • C#: interface로 정의, C# 8.0부터 기본 구현 가능.
    • 다중 상속
    • 둘 다 클래스 다중 상속은 불가하지만, 인터페이스를 통해 다중 구현 가능.

    6. 예외 처리

    • try-catch
    • Java: try, catch, finally 사용, checked 예외 강제.
    • C#: try, catch, finally 사용, 모든 예외가 unchecked.
    • 예외 던지기
    • 둘 다 throw 키워드 사용.

    7. 컬렉션 및 제네릭

    • 컬렉션
    • Java: java.util 패키지의 List, Set, Map 등.
    • C#: System.Collections.GenericList<T>, Dictionary<K,V> 등.
    • 제네릭
    • Java: 런타임에 타입 소거(type erasure) 발생.
    • C#: 컴파일 타임에 타입 검사.

    8. 델리게이트 및 람다

    • 델리게이트
    • Java: 함수형 인터페이스와 람다로 대체.
    • C#: delegate 키워드로 함수 포인터 기능 제공.
    • 람다 표현식
    • Java: JDK 8부터 지원 (예: x -> x * 2).
    • C#: 더 일찍 도입, 문법 유사 (예: x => x * 2).

    9. 속성 및 인덱서

    • 속성
    • Java: getter와 setter 메소드를 수동으로 작성.
    • C#: getset으로 속성 정의 (예: public int MyProp { get; set; }).
    • 인덱서
    • Java: 직접 지원 안 함.
    • C#: 인덱서를 통해 객체를 배열처럼 사용 (예: this[int index]).

    10. 비동기 프로그래밍

    • Java: CompletableFuture나 서드파티 라이브러리 사용.
    • C#: asyncawait 키워드로 비동기 프로그래밍 지원.

    11. LINQ

    • Java: 스트림 API로 유사 기능 제공.
    • C#: LINQ(Language Integrated Query)로 SQL-like 쿼리 작성 가능.

    12. 가비지 컬렉션

    • Java: JVM에서 자동 관리.
    • C#: .NET에서 관리, IDisposableusing으로 리소스 명시적 해제 가능.

    13. 플랫폼 의존성

    • Java: JVM에서 실행, 플랫폼 독립적.
    • C#: .NET Framework 또는 .NET Core에서 실행 (.NET Core는 크로스 플랫폼 지원).

    14. IDE 및 도구

    • Java: Eclipse, IntelliJ IDEA 등 사용.
    • C#: Visual Studio 주로 사용.

    15. 기타

    • 연산자 오버로딩
    • Java: 지원하지 않음.
    • C#: 지원 (예: public static MyClass operator +(...)).
    • goto 문
    • Java: 지원하지 않음.
    • C#: 지원.
    • unsafe 코드
    • Java: 포인터 직접 사용 불가.
    • C#: unsafe 블록으로 포인터 사용 가능.

    요약

    C#과 Java는 객체 지향 언어로서 유사하지만, 세부 문법과 기능에서 차이가 있습니다. C#은 .NET 생태계에 최적화되어 비동기 프로그래밍(async/await), LINQ, 속성 등 강력한 기능을 제공합니다. 반면, Java는 플랫폼 독립성, checked 예외, 제네릭 타입 소거 등으로 차별화됩니다. 이 차이점을 이해하면 두 언어를 효과적으로 비교하고 활용할 수 있습니다.