C# static

C# static

작성일 2024.05.03댓글 2건
    게시물 수정 , 삭제는 로그인 필요

C# 함수 보면 static나 public이 있던데 무슨 기능을 하나요?


#c# static #c# static class #c# static 사용 이유 #c# static 변수 #c# static 함수 #c# static const #c# static 생성자 #c# static class 생성자 #c# static constructor #c# static interface

profile_image 익명 작성일 -

안녕하세요..

일단 문의하신 두 키워드는 연관된 키워드를 묶어서 이해하셔야 하는 내용으로

사전에 학습이 필요한 거대한 분량의 내용이 있습니다.

일단... 범위로는

컴파일타임, 과 런타임

그리고

객체 OOP 라는 사전 지식이 필요합니다.

위 내용을 기반으로 요약

답변 드리면 아래와 같습니다.

[ 한줄 요약 ] - static : 인스턴스 생성 없이 런타임시 깍두기 처럼, 할당및 변경이 가능한 전역 필드 또는 클래스 설정 키워드 - const : 컴파일 시점에 필드명에 값이 대체되어 저장되는 컴파일 상수, 프로그램 종료시 까지 변경 불가한 상수를 지칭하는 키워드. - readonly : 객체 생성시 런타임에 저장되는 런타임 상수, 예를 들어 런타임에 방문 고객이 있어 로그인 성공 시 아이디를 저장해 두고 해당 사용자가 떠날때, 객체(클래스) 소멸시 까지 변경 불가능하게 하게 하는 키워드. [ 보충 설명 ] 1. const 값이 컴파일시 컴파일러에 의해 대체되어 프로그램 끝날때 까지 똑같이 유지되는 상수, 하여 값이 변경되어야 한다면 상수 값을 참조하는 라이브러리/어셈블리를 다시 컴파일해야 한다는 것을 의미합니다. 이렇게 상수는 컴파일 타임에 처리되는 반면? 2. static, readonly field 는 런타임에 설정됩니다. 위 요약한 내용과 같이... - const 는 컴파일 타임에 필드자체가 특정 값으로 대체됨으로 값이 변경되면 참조하는 모든 라이브러리/어셈블리를 다시 컴파일해야 합니다. 즉 프로그램을 다시 코딩한 후 껏다 다시 빌드 해야 하나... - static, readonly 는 참조하는 라이브러리는 값이 아닌 필드를 참조하므로 다시 컴파일할 필요 없이 필드의 값을 변경 수정 등이 가능합니다. 또한 static, readonly field 는 reference type 을 보유할 수 있는 반면 const 는 value type, 문자열 및 null만 지원합니다. 또한 static, readonly 는 lazy load 가 가능하므로 계산된 값을 포함할 수 있어서, database data handle 에 유용합니다. 요약하면, 값이 변경될 가능성이 거의 없거나 외부 앱/라이브러리가 고정 값 참조가 필요시 const 상수를 사용해야하며, 런타임시 초기화에 의해 계산이 필요하거나 외부 데이터의 런타임 사용 시 static, readonly 를 사용하면 됩니다. 그외 public 은 결이 약간 다르며!, private, internal protected 등과 같은 부류로서 직관적인 내용과 같이 순서대로 공개용, 해당 클래스전용, 클래스 전용 + , 상속관계에서만 등등 으로 해당 필드, 객체의 사용범위를 지정하는 키워드입니다. 생략하면? private 입니다. OOP 개념에서 빠질 수 없는 키워이므로, 책으로 아무리 봐도, 의문(ex? 다 퍼블릭으로 하면 안되? 이런 창의적?인 의문..)만 생기지... 피부에 크게 와 닫지 않는 추상적 개념이므로 다년간의 날 코딩 경험이 필요하다 그리 보시면 되겠습니다.

profile_image 익명 작성일 -

public 은 "접근 한정자(Access Modifier)" 중 하나인데, 접근 한정자는 객체 지향 프로그래밍의 3대 축 중에 하나인 캡슐화(Encapsulation)와 연관이 있습니다.

캡슐화는 협소한 의미로는 데이터를 무방비로 노출해서 아무나 접근하도록 두지 말고 보호막(캡슐)에 넣어 외부에서 접근하는 것을 제한하라는 것입니다.

그러나, 넓은 의미로는 어떤 것이 되었든 접근 가능성을 일정 범위(Scope) 안으로 한정하라는 것입니다.

접근 한정자에는 아래와 같은 것들이 있습니다.

public : 보호막 바깥으로 공개 (보호를 하지 않음)

internal : 어셈블리 내부만 공개, 외부 비공개

protected : 자손에게만 공개

private : 보호막 바깥으로 공개하지 않음 (가장 강력한 보호)

static 은 "정적인" 이라는 의미로, 동적인(Dynamic) 것과 대비되는 의미입니다.

프로그램의 실행 중에 많은 인스턴스들이 생성되었다가 소멸됩니다.

즉, 인스턴스의 생애는 기본적으로 동적입니다.

그러나, 정정인 것들은 한 번 생성이 되면, 프로그램이 종료될 때 까지 소멸되지 않습니다.

엄밀하게 말하면, 프로그램 실행 중에 처음 접근할 때 생성되고, 프로그램이 종료될 때 함께 사라집니다.

인스턴스는 아무리 많이 생성되었어도 쓰임이 다하면 즉시 사라지기에, 프로그램 입장에서는 메모리를 효율적으로 이용할 수 있습니다. 그러나, 생성과 소멸이라는 비용을 중복적으로 지불해야 합니다.

그러나 정적인 것들은 한번 생성되면 소멸되지 않고, 특정 메모리를 계속 차지하고 있기 때문에 메모리 운영이 비효율적입니다.

그러나, 생성 비용을 한번만 지불하면 됩니다.

static 은 프로그램 입장에서 "유일한 존재"에게 붙이는 경우가 많습니다.

대표적인 것이 Console 클래스입니다.

C#의 콘솔앱은 태어날 때부터 하나의 콘솔을 보유한가고 가정하기에, 콘솔 객체를 생성했다 소멸했다 할 필요가 없는 것이죠.

또 다른 예로 Environment 클래스가 있습니다.

프로그램 입장에서는 자신이 실행되는 환경(Environment)이 두 개 일리가 없죠.

static 의 또 다른 의미는 인스턴스 멤버에 접근하지 않는 멤버를 가리키기도 합니다.

class Calculator { public int Add(int a, int b) => a + b; }

Add 는 자신의 책임을 수행함에 있어, Calculator 의 다른 인스턴스 멤버를 사용하지 않습니다.

이 경우, Add를 인스턴스 멤버로 두기 보다는 아래와 같이 static 멤버로 두는 것이 좋습니다.

class Calculator { public static int Add(int a, int b) => a + b; }

static 멤버와 인스턴스 멤버는 출생 시점이 다르다는 점을 기억해야 합니다.

앞서, static 멤버는 프로그램 실행 중에 처음 접근할 때 생성된다고 말씀드렸는데, 그 처음 접근하는 시점이 생성된 시점입니다.

그러나 인스턴스 멤버는 인스턴스가 생성되는 시점에 생성됩니다.

둘의 생성 시점이 다른데, 이로 인해 서로에 대한 접근 가능성이 달라집니다.

static 멤버는 자신이 태어날 때, 인스턴스 멤버가 태어났는 지 안 났는지 모릅니다.

만약 아직 태어나지 않은 인스턴스 멤버에 접근한다면, 문제가 생길 것입니다.

C#에서는 이러한 문제 때문에 static 멤버가 인스턴스 멤버에 접근하는 것을 금지합니다.

반대로 인스턴스 멤버(혹은 그 어떤 것이라도)가 static 멤버에 접근을 할 때도 static 멤버가 태어났는 지 아닌지 확실하지 않습니다. 그러나, 태어나지 않은 경우라도, 접근하는 시점에 즉시 태어나기 때문에 언제나 접근해도 문제가 되지 않습니다.

마지막으로 static 이 "전역 변수"와 같다고 설명하는 글들이 있는데, 이는 잘 못된 것입니다.

static 멤버라도 특정 보호막 내부에 있기 때문에, 언제나 전역적으로 접근할 수 있는 것은 아닙니다.

C# static

C# 함수 보면 static나 public이 있던데 무슨 기능을 하나요? 안녕하세요.. 일단 문의하신 두 키워드는 연관된 키워드를 묶어서 이해하셔야 하는 내용으로 사전에 학습이...

C# static 필드 개체 참조..ㅠㅠ

... 찾아봐도 무슨 말인지 전혀 이해가 안돼서 질문 올립니다 참고로 C# 입니다. class Program { public int gSum = 0; static void Accumulate(int num) { gSum += num; } 여기서...

C#에서 static은 메서드나 필드

C#에서 static은 메서드나 필드가 클래스의 인스턴스가 아닌 클래스 자체에 소속되도록 지정하는 한정자이다. 이 말이 무슨뜻인지 잘 모르겠어요...플밍 쌩초보...

C# static 질문

C#에서 static 가 붙은 함수랑 안붙은 함수랑 무슨차이가있는거죠? 거의 모든함수가 다 static가 있던데 C언어 공부할땐 static가 선언된 함수 내에서만 접근을 허용하고...

C# static

static사용하면 해당메소드를 인스턴스 없이 사용할수 있잖아요 그러면 static사용하지 않는버전을 보여주세요.. 어떤느낌인지 잘 모르겠어서요...

c# java static

... C#에서는 클래스명으로 접근하는 방법 뿐인가요? 인스턴스 변수명으로는 접근이 불가능한가요? 네, 그렇습니다. static class 이든...

C# 에서 static이 의미하는 것?

C#에서 static이 붙은 변수/함수와 그렇지 않은 변수/함수의 차이는 뭐죠? 저 C#한지 얼마 안되어서 조금 쉽게 설명해 주세요 변수나 함수에 static이...