안녕하세요~ 저는 C#환경에서 static keywrod를 사용하면서 그런 부분까진 생각하지 않고 사용했었네요. 메모리가 아주 부족한 환경일땐 한번 쯤 고려해보는 것이 좋을 것 같긴합니다만 static keyword를 사용할 땐 메모리 점유를 고민하시는 것보단 1개의 static 변수를 프로그램 종료시까지 공유해서 사용한다는 측면을 좀 더 생각하시면 좋을 것 같습니다. 다른 질문 사항 있으시면 언제든지 또 질문 주시기 바랍니다!
안녕하세요~ 질문은 언제나 환영입니다! Foo2()는 함수가 new로 메모리에 올라갔을 때만 사용할 수 있는 non static 함수입니다. Solution class도 역시 new를 해서 메모리에 올라갔을 때만 사용할 수 있는 non static 클래스입니다. 제가 드리고 싶은 말은 Foo2()나 Solution이 가지고 있는 _nonStaticVar나 같이 new를 했을 때 메모리에 올라간다는 사실입니다. 결국 Foo2()를 호출했을 땐 _nonStaticVar 역시 메모리에 올라가있는 상태일 수 밖에 없으니 Foo2()함수에서 _nonStaticVar에 접근할 수 있는 것입니다. 스택에 있는 함수에서 static 변수에 값을 넣는 것은 가능합니다~ 하지만 그 반대인 static 함수에서 메모리에 올라가야 사용할 수 있는 _nonStaticVar와 같은 변수엔 접근이 불가능합니다. (이 경우는 Foo1()이 예제가 되겠네요) 왜냐하면 static 함수는 Solution 클래스를 new 하지 않고도 이미 메모리에 올라가있는 상태이기 때문에 new를 해서 메모리에 올려야하는 _nonStaticVar와 같은 변수는 접근할 수 없는 것입니다. 혹시 제 답변이 이해가 가지 않으신다면 다시 질문 주시면 답변드리겠습니다. 감사합니다!
우선 대댓글에 대해서 알람이 오지 않아.. 하나하나 확인 후 이제 발견해서 답변이 많이 늦었습니다 ㅠㅠ 답변 드리겠습니다. _StaticVar가 Foo2()함수에서 접근이 되는 이유가 궁금하셨던 것 같습니다. 그 내용은 영상에도 설명 드렸습니다만 static 변수는 프로그램 실행 시 먼저 모두 메모리에 올라가게 되어서 Foo2()함수안에서 _StaticVar가 이미 메모리에 있기 때문에 아무런 할당연산(new()) 없이 접근이 가능한 것입니다. 질문에 있는 메모리가 스택에 비해 상위 개념은 아니고 new() 연산자로 Foo2()함수가 스택 메모리에 올라가기 전에 이미 static 변수는 메모리에 올라가기 때문에 접근이 가능하다라고 생각하는게 맞으실 것 같습니다~ 혹시 다른 질문 있으시면 또 말씀 주세요. 대댓글이라 알람이 안올 것 같은데 제가 자주 확인해서 답변 드리도록 하겠습니다! 좋은 하루 되세요!
안녕하세요 최일영님!! 좋은 질문 감사드립니다! 처음엔 주신 영상을 보고 의아해서 C#에서도 같은 테스트를 진행해보았습니다 진행된 테스트 코드는 다음과 같습니다. class Test { int c = 0; static int Add(int a, int b) { return a + b + c; // a,b의 사용은 문제 없지만 c의 사용엔 문제가 있었습니다. } } 위와 같은 결과로 인해 static 매서드 안에서 파라미터로 받은 값을 사용하는댄 문제가 없었습니다. 그도 그럴것이 static 매서드를 호출할 때 a와 b를 넣어주므로 메모리 생성에 문제가 없습니다. a와 b가 메모리에 생성되지 않으면 파라미터로 넣어줄 수가 없고 파라미터로 넣어줄 수 없으면 static 함수 호출 자체가 되지 않기 때문입니다. 저도 잘못설명을 한 것 같네요. 좋은 질문 주셔서 감사합니다. 참고로 Test클래스의 c를 static int c = 0; 으로 static 변수로 처리하면 모든 에러는 없어집니다!! 혹시 답변이 되셨나요? 감사합니다.
안녕하세요 해파님. 우선 제 강의를 기다리셨다니 죄송스럽다는 말을 먼저 드립니다. 유튜브 영상 만드는게 생각보다 쉽지가 않네요! 주신 질문도 아주 흥미있는 질문이네요!!! 질문에 답변 드립니다! 우선 속도면에서 Static 함수가 조금 더 빠릅니다. 다만 성능상 크게 이점이 있을 만큼 빠르다고는 볼 수 없어요! 정말 속도 이슈가 있는 프로그램일 경우 private 함수에 대해서 static으로 변경(public 함수도 가능하지만 고려해야할 게 많으실 거 같아요!) 하는 것도 하나의 방법이지만 그정도까지 해야할 상황은 다른 것으로 이슈를 잡아보는게 좋을 것 같아요! 관련된 아주 좋은 링크 드릴게요. 구글 번역기에 돌려서 읽으셔도 이해가 잘 되실 거예요! www.blackwasp.co.uk/SpeedTestStaticInstance.aspx 다른 단점은 아마 너무 많이 만들면 Static Memory 공간이 꽉 차지 않을까요?! ㅋㅋㅋㅋ 또 다른 질문 있으시면 답글 주세요~
@@User_Masuri 답글 감사합니다~~ 궁금증이 해결됬어요~ ^^ 좋은 사이트 링크도 감사합니다. 좋은 내용이 많은 것 같은데, 영어라 이해하기 어렵네요. 그래서 마수리님의 이해시켜주는 강좌가 참 귀합니다~~ 영어로 된 것을 해설해주는 강의도 좋을 것 같습니다. 좋은 하루 되세요~~ ^^
영상 보기전에 댓글 남깁니다 정적으로 만드는 한정자라고 생각하고 스태틱으로 선언하면 인스턴스가 아닌 클래스 자체에 소속되어 인스턴스(실체화) 하지 않아도 사용할 수 있다고 배웠습니다ㅋㅋ 그래서 다른 곳에서 쉽게 접근 할 수 있는 거고.. 간단하게만 알고있는데 맞나요? 일단 댓글 남겼고 영상 재밌게 시청할게요 부족한 부분 배워갈듯!
겉핣기로만 배웠던 건데 이렇게 복습 겸 핵심만 잘 설명해 주시니 이해가 잘 되는군요! 감사합니다.
이해가 잘 되셨다니 제가 다 기쁘네요~ 감사합니다!
와진짜 간결하게 설명해주시네요... 바로 구독했습니다
감사합니다~~
와 진짜 설명 들으면서 이렇게 이해했어야 했구나 하고 충격을 먹었습니다. 좋은 설명 감사합니다!
ㅋㅋㅋ 아이고 칭찬 감사드립니다!! 누군가에게 도움이 된다니 기쁘네요!! 질문 있으시면 언제든지 하세요~
궁금한게 있습니다! static은 프로그램 종료까지 메모리를 사용하는것으로 이해했는데
그럼 성능면에서는 지양하는게 좋은걸까요?
안녕하세요~
저는 C#환경에서 static keywrod를 사용하면서 그런 부분까진 생각하지 않고 사용했었네요.
메모리가 아주 부족한 환경일땐 한번 쯤 고려해보는 것이 좋을 것 같긴합니다만
static keyword를 사용할 땐 메모리 점유를 고민하시는 것보단 1개의 static 변수를 프로그램 종료시까지
공유해서 사용한다는 측면을 좀 더 생각하시면 좋을 것 같습니다.
다른 질문 사항 있으시면 언제든지 또 질문 주시기 바랍니다!
명쾌한 설명 잘 들었습니다!!
도움이 되셨다니 감사합니다!
친절한 설명 감사합니다!
Foo2()함수에서 _nonStarticVar = 1;은 왜 오류가 안되는지 궁금합니다
스택에 있는 함수에 메모리에 있는 static변수를 넣어도 되는지요!
안녕하세요~ 질문은 언제나 환영입니다!
Foo2()는 함수가 new로 메모리에 올라갔을 때만 사용할 수 있는 non static 함수입니다.
Solution class도 역시 new를 해서 메모리에 올라갔을 때만 사용할 수 있는 non static 클래스입니다.
제가 드리고 싶은 말은 Foo2()나 Solution이 가지고 있는 _nonStaticVar나 같이 new를 했을 때 메모리에 올라간다는 사실입니다.
결국 Foo2()를 호출했을 땐 _nonStaticVar 역시 메모리에 올라가있는 상태일 수 밖에 없으니 Foo2()함수에서 _nonStaticVar에 접근할 수 있는 것입니다.
스택에 있는 함수에서 static 변수에 값을 넣는 것은 가능합니다~
하지만 그 반대인 static 함수에서 메모리에 올라가야 사용할 수 있는 _nonStaticVar와 같은 변수엔 접근이 불가능합니다. (이 경우는 Foo1()이 예제가 되겠네요)
왜냐하면 static 함수는 Solution 클래스를 new 하지 않고도 이미 메모리에 올라가있는 상태이기 때문에 new를 해서 메모리에 올려야하는
_nonStaticVar와 같은 변수는 접근할 수 없는 것입니다.
혹시 제 답변이 이해가 가지 않으신다면 다시 질문 주시면 답변드리겠습니다.
감사합니다!
@@User_Masuri 답변 감사합니다!
제가 질문을 _nonStaticVar가 아니라 StaticVar로 써야했는데 오타를 했네요 ㅠ
Foo2()함수에 _StaticVar는 어떻게 가능한 원리인가요? 메모리가 스택에 비해 상위 개념(?)이라서 그런 것인가요?
우선 대댓글에 대해서 알람이 오지 않아.. 하나하나 확인 후 이제 발견해서 답변이 많이 늦었습니다 ㅠㅠ
답변 드리겠습니다. _StaticVar가 Foo2()함수에서 접근이 되는 이유가 궁금하셨던 것 같습니다.
그 내용은 영상에도 설명 드렸습니다만 static 변수는 프로그램 실행 시 먼저 모두 메모리에 올라가게 되어서
Foo2()함수안에서 _StaticVar가 이미 메모리에 있기 때문에 아무런 할당연산(new()) 없이 접근이 가능한 것입니다.
질문에 있는 메모리가 스택에 비해 상위 개념은 아니고 new() 연산자로 Foo2()함수가 스택 메모리에 올라가기 전에
이미 static 변수는 메모리에 올라가기 때문에 접근이 가능하다라고 생각하는게 맞으실 것 같습니다~
혹시 다른 질문 있으시면 또 말씀 주세요. 대댓글이라 알람이 안올 것 같은데 제가 자주 확인해서 답변 드리도록 하겠습니다!
좋은 하루 되세요!
짧지만 강렬한 강의입니다
감사합니다! 짧지만 제 마음을 울리는 댓글이네요!
정말 감사합니다~~~
저도 감사합니다
C# 엊그제 공부하기 시작해서 해당 내용이 뭔지 찾아보다 여기왔는데 저한테는 심화내용이었군요... 나중에 다시 오겠습니다 ㅠㅠ
언제든지 열려있습니다!!! 언제든지 놀러오세요 ㅎㅎ
설명이 정말 귀에 쏙쏙 들어옵니다. Static에 대해서 이렇게 명쾌하게 해석해주는 국내 유튜브도 별로 없을 것 같네요.
댓글 감사드립니다!! 도움이 되었으면 좋겠네요~ ㅋㅋ
그러면 static을 쓰면 클래스를 인스턴스하지않고 모듈같이 사용가능한건가요?
ruclips.net/video/SJx5czHKSy8/видео.html
10분 30초 쯤보시면 이분이 static으로 함수를 정의했을때 안에 있는 클래스 멤버들이 static선언이 되지않아도 오류가 나지 않았는게 영상 설명이랑 상반되네요.
안녕하세요 최일영님!! 좋은 질문 감사드립니다!
처음엔 주신 영상을 보고 의아해서 C#에서도 같은 테스트를 진행해보았습니다
진행된 테스트 코드는 다음과 같습니다.
class Test
{
int c = 0;
static int Add(int a, int b) {
return a + b + c; // a,b의 사용은 문제 없지만 c의 사용엔 문제가 있었습니다.
}
}
위와 같은 결과로 인해 static 매서드 안에서 파라미터로 받은 값을 사용하는댄 문제가 없었습니다. 그도 그럴것이 static 매서드를 호출할 때 a와 b를 넣어주므로 메모리 생성에 문제가 없습니다. a와 b가 메모리에 생성되지 않으면 파라미터로 넣어줄 수가 없고 파라미터로 넣어줄 수 없으면 static 함수 호출 자체가 되지 않기 때문입니다. 저도 잘못설명을 한 것 같네요. 좋은 질문 주셔서 감사합니다.
참고로 Test클래스의 c를 static int c = 0; 으로 static 변수로 처리하면 모든 에러는 없어집니다!!
혹시 답변이 되셨나요? 감사합니다.
@@User_Masuri 오우 감사합니다.. 질문에 대해 이렇게 매너있으신분 처음보네요 제가 더 감사드립니다 .
@@chldlfdud12ify 일영님!! 질문 주신거 수정해서 답변 달았는데 혹시 답변 되셨을까요? 다른 궁금한게 있으면 다시 질문 주세요~~
@@User_Masuri 아 무슨차이인지 알것같습니다 감사드립니다! 매개변수(파미미터)를 할당해서 메모리 생성에 순서상 문제가 없었다는거군요
정확히 이해하게 됬네요 ㅎㅎ 얼굴도 잘생기시고 설명도 잘해주시고!ㅋㅋ 앞으로도 영상 부탁드리겠습니다~~
제네릭도 한번 다뤄주실수있나요? 감사합니다
안녕하세요 Jae Young님~ 제 부족한 영상에 좋은 댓글 달아주셔서 감사드립니다.
제네릭은 다뤄볼 생각이 없었는데 기회가되면 다뤄보도록 하겠습니다!! 감사합니다!
와 설명 진짜 잘해주시네요
이해가 잘 되셨나요? 감사합니다!
static 이 메모리에 올라가는 시점은 선언된 클래스가 호출되는 시점으로 알고 있습니다~ 강의내용은 프로그램 시작시 static이 메모리에 올라가있다고 하셨는데요~ 제가 얼피 듣기론 C# 어느 버전 이후부터는 스태틱이 메모리 차지하는 시점이 변경된걸로 알고 있어요~
안녕하세요 이주원님 정정 댓글 달아주셔서 감사합니다.
댓글 보고 생각해보니 호출되는 시점에 올라가는게 프로그램 관리에 더 효과적인 것 같네요.
관련해선 알아보고 정정하겠습니다. 덕분에 저도 배우고 갑니다.
정말 감사합니다.
멋진 모습 보기 좋습니다. 강의를 많이 기다렸어요~~
질문) 스태틱을 사용해 보지 않아서 낯선데, 객체를 1개 만들어사용한다면 스태틱으로 사용하는게 더 편하겠네요. 객체를 생성해서 사용하는 것에 비해 속도나 기타 다른 부분에서 단점은 없나요?
안녕하세요 해파님. 우선 제 강의를 기다리셨다니 죄송스럽다는 말을 먼저 드립니다. 유튜브 영상 만드는게 생각보다 쉽지가 않네요!
주신 질문도 아주 흥미있는 질문이네요!!! 질문에 답변 드립니다! 우선 속도면에서 Static 함수가 조금 더 빠릅니다. 다만 성능상 크게 이점이 있을 만큼 빠르다고는 볼 수 없어요!
정말 속도 이슈가 있는 프로그램일 경우 private 함수에 대해서 static으로 변경(public 함수도 가능하지만 고려해야할 게 많으실 거 같아요!) 하는 것도 하나의 방법이지만 그정도까지 해야할 상황은 다른 것으로 이슈를 잡아보는게 좋을 것 같아요! 관련된 아주 좋은 링크 드릴게요. 구글 번역기에 돌려서 읽으셔도 이해가 잘 되실 거예요! www.blackwasp.co.uk/SpeedTestStaticInstance.aspx
다른 단점은 아마 너무 많이 만들면 Static Memory 공간이 꽉 차지 않을까요?! ㅋㅋㅋㅋ
또 다른 질문 있으시면 답글 주세요~
@@User_Masuri 답글 감사합니다~~ 궁금증이 해결됬어요~ ^^
좋은 사이트 링크도 감사합니다. 좋은 내용이 많은 것 같은데, 영어라 이해하기 어렵네요.
그래서 마수리님의 이해시켜주는 강좌가 참 귀합니다~~
영어로 된 것을 해설해주는 강의도 좋을 것 같습니다.
좋은 하루 되세요~~ ^^
@@해파-j8y 감사합니다!! 그런 영상도 재미있겠네요! 고려해보겠습니다!!
스태틱과 전역변수는 동의어가 아닌거죠? C#에서는 전역변수를 지원 안한다고 하는데 또 스태틱으로 선언하면 다른 곳에서 참조가 되던데 왜그런지 햇갈리고 어떤 차이가 있는지 궁금합니다! 영상 후속편 만들어주새요오오ㅋㅋㅋ
감사합니다.~!
시청해 주셔서 감사드립니다.
설명 진짜 깔끔하게 잘 하시네요
하하하 ㅋㅋㅋ 좋은 말씀 감사합니다!
영상 보기전에 댓글 남깁니다 정적으로 만드는 한정자라고 생각하고 스태틱으로 선언하면 인스턴스가 아닌 클래스 자체에 소속되어 인스턴스(실체화) 하지 않아도 사용할 수 있다고 배웠습니다ㅋㅋ 그래서 다른 곳에서 쉽게 접근 할 수 있는 거고.. 간단하게만 알고있는데 맞나요? 일단 댓글 남겼고 영상 재밌게 시청할게요 부족한 부분 배워갈듯!
영상속에서 말씀드린 제가 받은 첫 번째 문제를 맞추신 것 같군요!!
아 형님.. 2번 볼 때 더 효과가 극대화되는 영상입니다.. 제가 보는 기본서도 물론훌륭하지만 여기엔 없는 내용이거든요!! 스태틱 메모리영역이라는 게 따로 있었다니~~! 진짜 이런거 많이해주세요 사랑해요ㅋㅋ
@@민수-t7p3f Loader Heap과 Object Heap이라고 검색하시면 좀 더 자세히 보실 수 있을 거예요!
@@User_Masuri 네ㅎㅎㅎ검색해볼게요 감사합니다!@@
혹시 박상효님은 제일 먼저 배운 언어가 C#인가요???
저한테 물어보신건가요~~ ㅋㅋ
저는 C -> C++ -> C# 이렇게 배웠어요!!