본문 바로가기

프로그래밍 놀이터/C, C++, C#, VB44

[Java 개발자가 공부해본 C#] Stack Memory, Heap Memory, Variable, Reference 의 관계 안녕하세요 돼지왕왕돼지입니다. C# 을 공부하면서 그동안 뭔가 깔끔히 정리되지 않았던 Stack Memory, Heap Memory, Variable, Reference 의 관계에 정리가 잘 되는 그림 및 글을 발견하여 함께 공유하고자 합니다. 이를 이해하는 것은 Garbage Collection 을 운영하는 Java 와 C# 에 매우 중요합니다. void test(){ object a = 10; object b = 20; } 이런식으로 Stack 에 Heap 주소를 참조하는 a, b 각각의 variable 이 assign 됩니다. integer 이긴 하지만, object 에 값을 할당하였기 때문에 그 값은 Heap memory 에 assign 됩니다. 함수가 끝나면 기본적으로 local variable.. 2012. 4. 15.
[Java 개발자가 공부해본 C#] 변수 초기화 ( Initialize ) 에 대하여. 안녕하세요 돼지왕왕돼지입니다. 이번에는 변수 초기화 ( Initialize ) 에 대해 알아보겠습니다. 기본적으로 C#의 변수 초기화는 Java 와 같은 맥락입니다. ( C# 이 Java 를 흉내낸 언어라는 말이 많은데, 사실여부를 떠나 닮은 점은 매우 많습니다. ) Local 변수를 initialize 를 하지 않은 상태에서 사용하려고 하면, Initialize 되지 않았다는 이유로 compile 자체가 되지 않습니다. 그럼 Global Variable 의 경우는 어떨까요? Global Variable 의 경우는 default 초기값이 assign 이 됩니다. 예를 들어 0 이 들어가는 것이겠죠. 다음 코드들을 통해서 개념을 잡아봅시다. using System; namespace BrainCSharp .. 2012. 4. 15.
[Java 개발자가 공부해본 C#] CLR ( Common Language Runtime ) 에 대하여. 안녕하세요 돼지왕 왕돼지입니다. 오늘은 CLR ( Common Language Runtime ) 에 뭐하는 녀석인지 한번 알아보겠습니다. 이 CLR ( Common Language Runtime ) 은 자바의 JVM ( Java Virtual Machine ) 과 거의 같은 녀석이라고 보시면 되겠습니다. 계층도를 보았을 때 Class Libraries( .NET Framework ) 와 Application 을 연결하는 역할을 하고 있습니다. 요 CLR 은 말 그대로 .Net Framework 가 지원하는 Common Language ( C, C++, C#, Visual Basic 등 ) 이 돌아가는 가상머신 이라고 보시면 되겠습니다. 네이티브 코드로 작성되어 있는 프로그램들은 운영체제가 직접 실행할 수.. 2012. 4. 15.
[Java 개발자가 공부해본 C#] C#에서 Exception 이 발생하면.. 안녕하세요 돼지왕 왕돼지입니다. 오늘은 C#에서 Exception 이 발생했을 때의 상황에 대해 알아보겠습니다. 위의 스크린샷이 C#에서의 Exception 발생 상황입니다. 어디서 자주 본 화면이지요? "OO의 작동이 중지되었습니다." 와 "문제에 대한 해결 방법을 확인하는 중입니다." 라는 DIalog 가 나옵니다. 이 녀석의 정체가 바로 Exception 이라는 것을 C# 을 공부해보며 알았습니다. 사실 이것은 Console program 에 대한 exception 으로 System.IndexOutOfRangeException 이 발생했다는 것을 알 수 있지만, ( Java 에서는 IndexOutOfBoundException 이죠. ) 우리가 주로 마딱뜨리는 Exception 은 보통 MFC 의 E.. 2012. 4. 15.
[Java 개발자가 공부해본 C#] HelloWorld. 안녕하세요 돼지왕왕돼지입니다. 오늘은 C# 으로 HelloWorld 를 한번 만들어보죠. // HelloWorld.cs using System; namespace BrainCSharp { class HelloWorld { static void Main( string[] args ) { Console.WriteLine( "Hello, World!" ); Constole.WriteLine( "Hello, {0}!", args[ 0 ] ); } } } // HelloWorld.java import java.lang.System; package BrainCSharp; class HelloWorld{ public static void main( String[] args ){ out.println( "Hello. .. 2012. 4. 12.
[Java 개발자가 공부해본 C#] C# 개발을 위한 프로그램. ( Visual Studio, Visual C# 2010 Express, Dream Spark 무료 다운 ) 안녕하세요 돼지왕 왕돼지입니다. C# 개발을 위한 프로그램 ( IDE ) - Visual Studio, Visual C# 2010 Express, Dream Spark ( Visual Studio Professional ) 에 대해 알아보겠습니다. Visual Studio MS 사에서 상업용으로 정식발매한 C, C++, C#, Visual Basic 등의 개발을 지원하는 IDE ( Integrated Development Environment ) 입니다. 이 녀석은 무료판이 없으며, 라이센스가 필요합니다. 이 녀석은 아래 명시한 녀석들에 비해 모든 프로그램 언어를 지원한다는 면에서 매우 편리합니다. 하지만, 가격이 비쌉니다. 에디션에 따라 가격은 천차만별이며 비싼 녀석은 몇백만원까지도 합니다. 개인 개발.. 2012. 4. 12.
[Java 개발자가 공부해본 C#] 더 나은 세상을 위한 C# ( C#의 등장배경, C#은 왜 필요한가?, 닷넷은 무엇인가? ) 안녕하세요 돼지왕 왕돼지입니다. "뇌를 자극하는 C# 4.0 프로그래밍" 이라는 책을 구입하여 오늘부터 공부를 시작해보았습니다. 오늘부터 쓰는 대부분의 글은 Java 언어를 main 으로 개발하고 있는 제가, 즉 Java 개발자가 공부해본 C# 에 대해 정리하는 글이 될 것입니다. 이번 글에서는 C# 의 등장배경과 C, C++ 도 있는데 C# 은 왜 필요한지, 닷넷은 무엇인지에 대해 간단히 정리해보겠습니다. C# 넌 누구니? C++ 이 C 언어에 + 1을 했다는 의미, 즉 C + 1 을 프로그래밍적으로 표현한 C++ 이라는 것은 알고 계시죠? 자 이제 이 C++ 에 ++ 를 한번 더 붙여보겠습니다. C++++ 이냐구요? 새로 더하는 ++ 을 기존에 있던 ++ 의 아래에 붙이면 바로 C# 이 됩니다. 이 .. 2012. 4. 12.
[C/C++] extern "C" 에 대해 알아봅니다. 안녕하세요 돼지왕왕돼지입니다. JNI 에 대해 학습하면서 extern "C" 라는 녀석을 보게 되었습니다. 그래서 오늘은 extern "C" 가 뭐하는 녀석인지에 대해 알아보겠습니다. extern "C" 넌 뭐 하는 녀석이냐? 컴파일러는 링커가 링킹작업을 하도록 합니다. 이 링킹에서는 함수들에 관련된 정보를 오브젝트 파일에 기록하여 상호 호출이 가능하도록 하며, 이러한 정보를 linkage 라고 합니다. 이 링킹작업은 C와 C++ 을 혼합하여 사용했을 때 문제가 생길 수 있습니다. C와 C++의 링킹방식이 다르기 때문입니다. 링킹작업을 할 때, 함수명, 변수명 등의 앞뒤에 _ 등의 추가적인 symbol 을 붙이거나, 추가정보를 덧붙여 표시하는데, 이런 추가작업의 방식이 다릅니다. C는 함수의 이름이 유일.. 2012. 4. 5.