[C#] 문법 정리

Ceing·2025년 2월 27일

C-Sharp

목록 보기
1/4
post-thumbnail

using

기능 1)

가장 상단에 using을 통해 외부 라이브러리(dll)를 import 가능

기능 2)

  • 익명함수 처럼 영역을 정의할 때만 사용하고 그 영역을 벗어나면 dispose됨
  • file , DB의 경우 리소스를 획득하면 다시 닫아주는 작업이 필요한데 닫는 작업은 using 바운더리를 벗어나면 자동 리소스 종료되므로 코드가 간결해짐
using(SqlConnection con = new SqlConnection(conString))
{
	SqlCommand command = new SqlCommand(queryString , con);
    command.Connection.Open();
    command.ExecuteNonQuery();
}

Java의 try-with-resources와 비슷함, 닫는 작업을 별도로 해주지 않아도 됨

namespace

Java의 패키지처럼 해당 클래스가 어떤 위치에 있는지 지정

for

for(int i=0 ; i<5 ; i++){
	Console.WriteLine(i);
}

foreach

foreach(int i in list){
	Console.WriteLine(i);
}

null 타입 처리

  • Java에서는 Optional이라는 클래스를 통해 null 값을 유연하게 처리하지만 C#에서는 보다 간단한 방법으로 처리
  • 바로 타입 뒤에 ? 만 붙여주면 NullPointerException을 대비하여 null값을 할당할 수 있음
string? name = kim;
int? age = 23;
double? grade = 4.5;

record

  • Java에서는 불변하고 값을 비교하는 객체로 VO를 사용해서 보다 응집성 있는 설계를 할 수 있음.
  • 예를 들어 Address라는 VO를 통해 회원의 주소 관련된 필드들(zipcode, jibunAddress, roadNameAddress 등)을 매핑할 수 있음.
  • C#에서는 record를 통해 쉽게 VO를 만들 수 있음

record 필드 선언(vo 선언)

public record Address(string JibunAddress, string RoadNameAddress, string ZipCode);

record 객체 생성(vo 생성)

var address1 = new Address("행복동 173-3", "행복로 23", "12345");
var address2 = new Address("낭만동 283-3", "낭만로 94", "67891");

string null or 공백 비교

string.IsNullOfEmpty(str1)

internal 접근 제어자

  • Java의 default 접근제어자랑 비슷함, 아무 접근 제어자도 선언 안 하면 default
  • 같은 패키지 내에서만 접근 가능한 접근 제어자

virtual vs abstract

1. virtual

  1. 오버라이딩 가능하지만 필수 아님, 구현이 존재
  2. 객체 생성 가능

Java의 abstract와 비슷하게 해당 키워드가 선언된 메서드를 자식에서 재정의할 수 있는데 필수적으로 재정의할 필요는 없음, 또한 객체 생성도 가능 즉 러프한 추상 메서드

public class Animal{
	public virtual void cry(){
    	Console.WriteLine("crying!!");
    }
}


public class Dog : Animal{
	public override void cry(){
    	Console.WriteLine("bark!!");
    }
}

2. abstract

  1. 오버라이딩 무조건 해야됨, 즉 구현이 없으므로 자식에서 무조건 오버라이딩 해야됨
  2. 객체 생성 불가능
  3. 즉 추상 메서드가 존재하는 것은 구현이 없고 선언만 존재하는 클래스이므로 클래스 단위도 마찬가지로 추상 클래스여야 함! 애초에 객체 생성이 불가능하므로!

Java의 abstract와 동일

public abstract class Animal{
	public abstract void cry();
    	
}


public class Dog : Animal{
	public override void cry(){
    	Console.WriteLine("bark!!");
    }
}

override

  • Java의 @Override와 같음
  • 부모에서 virtual로 선언된 메서드를 자식에서 재정의(Override)할 때 사용

out

profile
이유에 대해 끊임없이 생각하고 고민하는 개발자

0개의 댓글