2008. 12. 18. 16:59

WPF, Silverlight 에 대해서...

WPF 를 간단히 말하자면, 기존의 Windows Forms  을 넘어선 차세대 윈도우 개발 플랫폼을 지향하는 프레임워크로서, 사운드, 동영상, 애니메이션, 그래픽, 2-D, 3-D, 데이터 출력 등등 를 모두 통합한 가히 혁명적인 사용자 인터페이스를 만들 수 있다. 

기술적으로 말하자면...
WPF 에 와서는 기반 되는 기술이 변했다는 거다. 
기존의 WinForms 응용프로그램은 GDI/GDI++ 라는 그래픽 기술을 이용했서 느리다. 하드웨어 가속 기능을 사용할 수 없기 때문에.실제 그래픽 카드와는 별도로 추상화 된 개념이므로 한계가 있었다.
하지만,  WPF는 DirectX 를 기반 기술로 사용한다. 그러므로, 하드웨어 가속 기능을 이용할 수 있다. 앞으로 소프트웨어는, 사용자들에게 멋진 경험(UX)을 제공하려는 추세이므로 마이크로소프트도 이에 뒤질새라 멋진 프레임워크를 만든다.
 
WinForms 으로 응용프로그램을  개발할 때는 동영상 기능을 구현하려면, DirectShow 같은 기술을 이용해야 하며, 사운드 기능을 구현하려면, 이에 대한 별도의 라이브러리를 사용해야 하며, 등등의 통합되지 않은 프레임워크 였다. 각 기능 별로 따로따로 기능을 얻어써야 한다. 
이에 비해, WPF는 모든 것이 프레임워크 자체에서 제공한다는 말이다. 그리고, XAML 기술의 도입으로, 디자인과 코드의 완벽한 분리를 제공한다는 점이 특징이다. 물론, 윈폼에서도 디자인과 코드를 나름 분리하려고 시도는 했으나 완벽한 분리는 아니다. 원폼에서 디자인 뷰에서 컨트롤 집어넣고 하는 등의 작업을 쉽게 할 수는 있다. 그러면, 이에 대한 코드는 숨겨진다. 하지만, 이게 문제다. 모든 디자인 관련 내용은 윈폼에서 c# 코드로 작성된다는 거다. 따라서, 디자이너들과의 협업이 상당히 제한적일 수 밖에 없다. 디자이너들도 c# 코드를 조금은 알고 있어야 하니깐. 
반면에, WPF = XAML + C# 이라고 보면 되는데 XAML 을 사용자 인터페이스 외형을 정의하는 마크업이라고 보면 된다. XAML 은 XML 과 유사한 문법을 갖고 있으므로, 널리 통용될 수 있다. Expression Blend 같은 프로그램을 보면, 결과물을 XAML 파일로 내보낸다. 즉, 디자이너는 Expression Blend 같은 프로그램을 사용해서, XAML 파일을 만들고, 프로그래머는 이 XAML 을 받아서, 코드를 작성해서 기능만 추가하면 된다. 이론상으로는... 하지만, 거의 디자인과 코드가 분리된다는 크나큰 장점은 새로운 협업의 세계 [[ 디자이너+프로그래머 ]] 를 열어준다. 그 외, 기술적으로 라우티트 이벤트, 의존 프로퍼티 등등의 새로운 개념도 도입되었다.


Silverlight 는 일종의 WPF 의 경량화된 버전이라고 보면 된다. 인터넷에서 RIA (Rich Internel Application) 을 목표로 구현된 프레임워크다. 특히, 기존의 웹을 점령한 어도비 사의 Flash 의 아성을 무너뜨리고자 나온 마이크로소프트의 무기라고 보면 된다. 이제 정식 2.0 버전이 나오는데.. 1.0 보다 좋은 점은 .NET 언어(C# 이나 VB.NET) 을 이용해서 실버라이트 응용프로그램을 개발할 수 있다는 거다. 아직 실버라이트로는 WPF의 3-D 같은 미디어 기능이 제한되어 있는데, 조만간 버전에서는 해결 되리라 본다.

2008. 12. 16. 14:54

C#과 .NET Framework

1. C# 의 개요
    1) C#이란?
         a. C#은 Microsoft에서 C++를 기반으로 자바의 장점을 혼합하여
             닷넷이라는 새로운 개념을 도입해서 만든언어이다.
         b. 특징.
             -> 보면서 빨리 개발할 수 있다.
                 (Visual Studio 컨트옹 배치등. C#에서는 그것이 쉽게 이루어진다.)
             -> 윈도우 API를 사용할 수 있다.
             -> COM을 쉽게 사용할 수 있다.
             -> 닷넷 프레임워크 프로그래밍 모델을 가장 잘 반영한다.
             -> 발빠른 표준화 작업
             -> 다른 언어의 장점만을 가지고 있다.


    2) C# 과 .NET
         a. 프로그래밍이란 어떤 목적을 가지고 컴퓨터를 이용해서
             프로그램을 설계하고 만드는 과정을 의미한다.
             (컴퓨터와 프로그램을 만드는 프로그래머간의 의사
                       소통하는 도구를 프로그래밍 언어라 한다.)

         b. 전세계적으로 사용하는 컴퓨터 언어는 C , C++ , 
             Java(자바) , VisualBasic(비쥬얼베이직) , C# 등이있음.

         c.  C# (소스코드) -> C#컴파일 (CLR) -> 결과
        
         
         
         d. Java ,Perl , COBOL , C++ 등 다른 언어로 작성되었어도 컴파일을
                할때에는
 무엇이되었든  공통언어런타임(CLR) 동작시킬 있다.

    2) 구성
         a. MicroSoft 에서 개발하여 파생된 C언어에서 부터  발전한것이 C++ 이고
             기존의 C++의 여러부분이 된것이 C#이다.(허나 기반은 다르다)
             Java의 JVM과 같은 환경 구현 -> .NET Framework

         b. 운영체제 : 기존 운영체제의 API를 사용해 종속적 이였다.
             (즉, 다른 운영체제에서는 구동 불가능)

         c. 언어간의 차별을 극복

    3) 특징
         a. 운영체제에서 실행되는 것이 아니라 운영체제위의 가상의 
             운영체제(.NET Framework에서 실행됨) -> 독립적

         b. .NET Framework 어떤 언어로 짜도 필터로 매핑이 되어 
             실행이 가능하게 함.
             (C/C++ , VB , C# 등) -> VC++.NET은 유일하게 
              .NET Framework없이 실행 가능.

         c. 단점은 속도가 느림. 그러나 하드웨어는 성능이 좋아 극복이가능.

         d. .NET Framework (1.1~3.5 or Silverlight , WPF , WCF , AJAX) 에 사용.

    4) 사용 가능 (Tool & Program)
         a. Visual Studio 2002~2008까지 현재 사용가능함.
             허나 3.0(VisualStudio 2005 에서는 SDK를 따로받아사용하여야함.)
2008. 11. 20. 16:25

c# 도형그리기

        private void button1_Click(object sender, EventArgs e)
        {
            Graphics g = Graphics.FromHwnd(this.Handle);
            g.DrawEllipse(new Pen(Color.Red), 10, 10, 50, 50);     //원
        } 

        아니면 

        int i;
        public Form1()
        {
            InitializeComponent();
            i = 0;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Invalidate();
            i = 1;      //사각형
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Invalidate();
            i = 2;      //원
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Pen pen = new Pen(Color.Red);
           switch (i)
            {
                case 1:
                    g.DrawRectangle(pen, 10, 10, 50, 50);
                    break;
                case 2:
                    g.DrawEllipse(pen, 20, 20, 50, 50);
                    break;
            }

        }

2008. 11. 14. 17:47

깡통 개발자의 C# 익히기 -제 3강- (CLASS에 대해서...)

이번 강좌는 CLASS에 대해서 알아보겠습니다. 어제 강의에서 잠깐 언급한 적이 있는데 원낙 중요하고, 광범위한 내용이라 3강에서 이렇게 알아보는 것입니다. 필이 중요한 부분이므로 필독하시기 바랍니다. 만약 이해가 안되는 부분이 있다면 그냥 읽어만 두고 넘어가자. 

클래스의 정의


객체를 생성하는 데이타원본 

  •     Abstraction(추상화)
  •     Encapsulation(은닉)
  •     Inheritance(상속)
  •     Polymorphism(다형성)  

클래스의 특이사항


▷ Nested Class

    - Public : Aⓒ.bⓒ 로 외부에서 접근 가능

    - Private : Aⓒ에서만 사용하는 개인적 서브클래스 

▷ Static method

    - Static 변수를 조작

    - 인스턴스변수 & this 연산자 & 일반멤버메서드 사용 불가 

new 연산자의 내부동작

    - 지정된 자료형의크기만큼 heap 으로부터 메모리 할당

    - 힙영역에는 메모리의 할당을 위한 특별한 포인터 존재

    - 포인터를 중심으로 한쪽은 할당된 메모리, 다른쪽은 할당가능한 메모리

    - 요청된 크기의 충분한 메모리있는지 논리검사

    - 크기만큼의 메모리할당하고 포인터 조정

    - 불충분시 가비지 컬렉터의 메모리수거시까지 기다림

    - 이 역시 불가시 메모리할당 오류 

▷ readonly member

    - 한번 값을 초기화하면 값의 변화 불가능

    - 생성자함수를 사용하여 초기화 수행    

▷ static 생성자 함수

    - static 키워드로 지정된 클래스 레벨의 생성자 함수

    - 클래스가 메모리로 로딩될때 호출

    - static 별수를 초기화할때 사용

    - 접근지정자 지정 & 인자호출 & this 사용 불가능

    - 오직 한번만 호출 가능 

▷ Finalize

    - Garbage Collector 에게 반환 알림 -> 두번 호출가능성

    - ~Class(); 과 동시선언 불가능 

▷ 기타사항(중요함)

    - 단일상속만을 지원 -> interface 사용

    - public 접근자만 상속으로 지원함

    - 상속되는 순간 실제 메모리가 따로 생성됨

    - protected 지정자의 멤버는 후손클래스에게만 제공됨 

인터페이스(Interface)


클래스가 제공하는 서비스를 명시하는데 사용되는 행위의 집합. 특징으로는 메소드,속성, 인덱서,이벤트는 포함할 수 있으나, 상수, 필드멤버, 생성자, 소멸자, 공유멤버는 포함할 수 없다.

구문

interface 인터페이스명 {

//    인터페이스 멤버선언

}

 ▷Sealed

    - class가 sealed로 접근권한이 설정된 이 클래스는 다른 클래스의 기본 클래스가 될수 없다. 

▷Abstract

    - class의 멤버를 모두 정의내리지 못한 기본 클래스

    - interface -> 다중상속

 

abstract class A
{
   public abstract void F();
}
abstract class B: A
{
   public void G() {}
}
class C: B
{
   public override void F() {
      // actual implementation of F
   }
}

 예상대로 내용이 점점 많아 지고 있습니다. 오늘은 주말이고 하니 여기까지 하겠습니다. 즐거운 주말보내십시오.

<<출처>> 데브피아

2008. 11. 14. 17:44

깡통 개발자의 C# 익히기 -제 2강- (.NET FRAMEWORK)


이번 강좌는 간단하게 나마  .NET FRAMEWORK에 대해서 알아보겠습니다.  2강 내용이 많아서 정리하는라고  좀 늦었습니다. 이해바랍니다. 4강까지는 거의 기본환경이나 기초지식에 대한 강좌입니다. 지루하시더라도 많은 성원바랍니다.

■ .NET FRAMEWORK의 객체지향
  클래스(CLASS) : 객체를 생성하는 데이터 원본
                            Abstraction(추상화)
                            Encapsulation(은닉)
                            Inheritance(상속)
                            Polymorphism(다형성) 

※ 객체 지향에 대한 더 자세한 내용은 Visual C++ Lecture 에 제가 게제한 "[특강]깡통 개발자의 객체지향 개념" 이란 제목의 강좌가 있습니다. 이 강좌를 참고하시기 바랍니다. 

<참고>

언어/구분  

속성(Attribute)

행위(Behavior)

비주얼C#

데이터 멤버(data member)

함수 멤버(function member)

비주얼C++

멤버 변수(member variable)

멤버 함수(member function)

비주얼베이직

속성(property)

메소드(method)

자바

필드(field)

메소드(method)

델파이

속성(property)

메소드(method)

        

■ .NET FRAMEWORK 구성

    WEB Services, User Interface

        |

    ADO.NET : Data & XML

        |

    Base Class Library

        |

    Common Language Runtime

 

  ▷Common Language Runtime

어떤 언어로 작성된 프로그램이 실행되기 위해 컴퓨터가 내장하고 있어야할 컴포넌트.

     <컴파일 생성단계>    

  1. 스코드 및 메타데이타 같이 컴파일
  2. 원래소스코드와 다른 언어의 코드와 병행 링킹 및 생성
  3. Base Class Library와 .NET 프래임워크 정보를 포함하여 형안성화

        <특징>

  • 언어 상호 운용성
    어떤 .NET언어로 작성된 소스 코드도 첫번째 컴파일 과정을 거치면 표준화된 IL코드로변환된다. 다른 IL코드를 붙여 어플리케이션을 구축하게 된다.
     
  • 플랫폼의 독립성
    IL 코드는 CLR Interpreter와 Base Class Library가 장착되면 실행가능 Common Language Runtime은 응용프로그램 개발을 단순하고 견고하게 해준다.

     <관리환경>

  • 클래스 로더(Class Loader)
    메타 데이터와 클래스의 로딩 및 배치(Layout)을 관리한다.
     
  • 중간 언어를 원시코드로 변환하는 컴파일러(IL to Native Compilers)
    IL(Intermediate Language)을 원시코드(Native)로 변환한다.(just-in-time)
     
  • 코드관리자(Code Manager)
    코드의 실행을 관리한다.
     
  • 가비지 콜렉션(GC:Garbage Collection)
    모든 개체들의 lifetime을 자동 관리한다. 이것은 멀티 프로세서이자, 확장 가능한 가비지 콜렉터이다.
     
  • 보안엔진(Security Engine)
    사용자 뿐 아니라 코드의 출처에 근거한 evidence-based security를 제공한다.
     
  • 디버그 엔진(Debug Engine)
    응용 프로그램을 디버그하고, 코드 실행을 추적할 수 있게 한다.
     
  • 형 검사자(Type Checker)
    안전하지 않은 형 변환이나 초기화되지 않은 변수가 존재할 수 없게 한다.IL코드가 형 안정선을 유지하도록 보장해 준다.
     
  • 예외 관리자(Exception manager)
    Windows Structured Exception Handling(SHE)와 통합되어, 구조화된 예외 처리를 가능하게 한다. 오류 리포팅이 향상되었다.
     
  • 스레드 지원(Thread Support)
    멀티 스레드 프로그래밍을 가능하게 하는 클래스들과 인터페이스들을 제공한다.
     
  • COM Marshaler
    COM과의 마샬링(marshaling)을 제공한다. 마샬링은 스레드 또는 프로세스의 경게를 가로질러 인터페이스 메서드 호출을 포장하고 전송하는 프로세스이다.
     
  • Base Class Library지원(BCL Support)
    BCL을 지원하는 런타임과 코드를 통합한다.

   ▷Base Class Library

Base Class Library(BCL)는 런타임의 기능을 노출시키고 개발자가 필요로 하는 high-level서비스들을 네임스페이스(Namespace)를 통해서 제공.     

    Base Class Library

    System ──────────→Fundamental data type.

      ├──Collections────→ordered list, hash table, group

      ├──Configuration

      ├──Diagnostics

      ├──Globalization

      ├──IO ────────→File IO/Stream

      ├──Net────────→TCP/IP

      ├──Reflection

      ├──Resource

      ├──Runtime

      ├──Security

      └──Text

   ▷ADO.NET

ActiveX Data Object(ADO)기술 
 비연결형 프로그래밍 모델(Disconnected programming model)  

    ADO.NET

    System.Data

        ├──ADO

        ├──Internal

        ├──SQL

        └──SQLTypes

    - ADO.NET 개체 모델을 구성하는 클래스

    - Table & Reation -> DataSet 클래스

    - 다양한 데이터 원본을 사용(XML, OLEDB, SQL서버)

     System.XML

        ├──Xsl

        ├──XPath

        └──Serialization

    - XML을 지원

    - XML 변환기(parser)와 작성기(writer)를 제공

    - XSLT네임스페이스 -> XSL-Transformation을 제공

    - XPath는 데이터 검색을 가능하게 하는 QL 제공

    - Serialization는 웹 서비스 전체적인 핵심 인프라제공

    - 개체(object)를 XML 표시 형식으로, 또는 그 반대로 변환할 수 있는 기능을 포함

 <<출처>> 데브피아

2008. 11. 14. 17:42

깡통 개발자의 C# 익히기 -제 1강- (C#의 특징)

오늘부터 C#강좌 시작한 깡통입니다. 초기에는 환경이나 특징에 대해서 먼저 파악하도록 합니다. 그래서 이번 강좌는 특징에 대해서 알아 보는 것입니다. 참고로 앞으로의 강의 자료는 여타 문서와 각종 자료를 바탕으로 제가 정리한 것입니다. 그럼 시작해 보죠.(보기좋게 정리 잘되어 있죠?) 

■ 요약

    현대적이고, C와 C++을 바탕으로 둔 구성요소 형식의 프로그램 언어

    모든 것을 프로그램의 대상으로 사용

    다음 세대의 강력한 프로그램 언어

    생산성

    표준화 제시 

■ 구성요소 지향적인 언어

   ▷ C#은 C/C++ 계열 중에서 처음으로 "구성요소 지향"의 언어

   ▷ 구성요소의 개념:

            Properties, methods, events

            Design-time 과 run-time 속성

            XML을 이용한 Documentation

   ▷ One-stop programming  가능

            Header  파일, IDL, 등  이  필요  없다.

            ASP.NET  페이지에서  스크립트  언어로  사용  

■ 모든 것을 객체로

    ▷ 전통적인 관점

            C++, Java:  Primitive 형식은  객체간의 상호작용 없음

            Smalltalk, Lisp:  성능의 비용의 과다

    ▷ C#  는  성능을  향상

            시스템과  통합으로  성능  개선

    ▷ 확장성  및  재사용성  증가

            새로운  선언  형식:  Decimal, SQL…

            Collections,  등.,  모든  형식과  사용이  가능  

■ 강력한 프로그램 작성

    ▷ Garbage collection

            No memory leaks 과 stray pointers

    ▷ Exceptions

            Error handling

    ▷ Type-safety

            No uninitialized variables, unsafe casts

    ▷ Versioning 

■ 통합환경

    ▷ 상호작용

            XML, SOAP, COM+, DLL 과  다른 .NET 언어와 통합

    ▷ Integration

            Visual Studio 도구와 디자이너에 맞게 설계

            .Net Framework 과는 완벽한 통합

    ▷ 생산성

            C++ 계승

            기존의 개발자의 사용 및 교육

            .NET 에서 대부분의 코드 구현

<<출처>> 데브피아

2008. 11. 13. 14:31

메모리 관리와 동적 할당.. C

1. 메모리의 구성.

 0(주소)                                                                                                                          216                               220  

                                       

 |<-----------data----------------> |<-------------heap-------------->|<----------------stack----------------------->|

                                   first in last out(FILO) 

data 영역 : 전역변수, 함수코드,....
heap 영역: 사용하지 않음, 동적할당 영역
stack 영역:지역변수..AUTO변수(생략가능).
 

2.프로그램 흐름과 메모리 

void sub(int);
int n=100;                 //전역변수
double d= 56.7;        //전역변수

int main()
{
   int a=20;
   sub(a);
}

void sub(int x)
{
  int k = x;
}

0       DATA

   n=100
   d=56.7
 

 HEAP

  
  
 

 STACK

 

   k=20 

  int k 선언시 생김

   x=20

sub(a)가 실행 되는순간 생김

   a=20

1000
 
메모리 공간 반납 순서

k -> x -> a-> n ->d

 레지스터는 스텍 포인터를 저장하고 있는 게 있다..
 

3.메모리 동적 할당.

memory all location(malloc)

 정상 수행: 첫번째 주소 리턴

 실       패: NULL포인터 리턴

 void* malloc(size_t size)
 메모리 해제.  void free(void* ptr)

size_t 는 unsigned int 를 재정의 

double* d=(double*)malloc(sizeof(double));
                                       --------------
                                       시스템에 따라 자료형드링 차이 나기때문에 프로그램 보수유지를 위해서 
                                       sizeof사용
  void *d;
     *d=4.5는 불가능하다.. 자료형이 없기때문에 불가능하다 
                                   d에가서 몇바이트를 할당(참조) 할지 모르므로 안된다
                                   그러므로 강제 형변환을 해야한다..

   d

 350

 |
 |  
▼ 

350

 
 
 

   HEAP

 
void 포인터는 잠깐 주소 저장가능 하지만 *를 사용해서 참조 불가능
이유는 그 주소로 가서 몇바이트를 읽어야하는지 모르기 때문에 그래서 자료형에 대한 정보가  필요하다.


//malloc.c

#include<stdio.h>
#include<stdlib.h>

int main()
{
 double* d=(double*)malloc(sizeof(double));

     *d=99.9;

 printf(" *d = %2lf , d = %d , addr = %d \n",*d,d,&d);
 printf(" size d = %d , *d = %d byte \n",sizeof(d),sizeof(*d));

 free(d);

 return 0;
}

 

2008. 11. 13. 11:45

메모리(힙과 스텍, 데이터영역)의 이해

스텍(STACK)메모리 : 변수, OS에서 관리,
힙(HEAP)메모리 : 프로그래머가 관리, 해제하지 않을 경우 문제발생   

프로그램을 실행하면 운영체제는 메모리를 할당한다. 단순히 메모리공간 하나만 떡 하니 제공하는것이 아니라 적절하고 효율적이며 용도에 맞게 메모리공간을 나누어 놓았다.

데이터 영역

전역변수, static 변수를 위한 공간이다. 이 두 변수는 프로그램이 실행되자마자 데이터 영역의 메모리를 차지하며 프로그램이 종료될때야 비로소 메모리에서 해제된다. 전역변수는 말그대로 함수 외부에 선언하는 변수이고 static 변수는 시작부터 0으로 초기화되며 데이터가 누적되는 변수이다. 일반적으로 static변수에 관한 오해가 있을거 같아 잠깐 그 부분에관해 설명좀 해볼까함 ㅋㅋ

#include<iostream>

void start(void){
    static int lee;
}

int main(){
    start();

    return 0;
}

lee 변수는 언제 메모리를 치자힐까?? 대다수의 사람들은 메인함수에서 start함수를 호출하고 나서 메모리를 차지한다고 생각할지도 모른다. 하지만 절대 그렇지않다. 전역변수나 static변수는 위에서 언급했듯이 프로그램이 실행되자마자 데이터 영역의 메모리를 차지한다. 그렇다면 저 static int lee는 무슨의미일까? 바로 0으로 초기화 하기위한 작업이다. 일반적으로 변수를 선언하면 auto변수라해서 초기화되지않은쓰레기값이 들어가지만 static을 붙이면 0으로 초기화한다.


스텍 영역
컴파일타임 즉, 번역시간에 메모리공간을 차지하는 영역이다. 함수에 접근해서 읽어낸 변수는 대부분 스텍영역에 메모리를 배정받는다. 블록구조의 규칙을 엄격히 여겨 한 블록내에서 선언된 변수는 그 블록이 끝날때 메모리가 해제된다.

#include<iostream>
int main(){
    int lee;
    return 0;
}

짧지만 강력한 예제 ㅋㅋㅋㅋ;;
lee변수는 컴파일과 동시에 4바이트의 메모리공간을 차지할것이다. 10번을 하던 100번을 하던 같은 크기의 메모리 공간을 차지한다.


힙 영역
실행시간에 메모리공간을 차지하는 영역이다. 사용자가 직접 메모리를 할당해야하며 해제또한 사용자가 직접 해줘야한다.

#include<iostream>

using std::cin;

void get(int i=0);


int main(){
    int size;
    cin>>size;
    get(size);
    return 0;
}

void get(int i){
    int array[i];
}


int array[i]이런식의 변수선언은 스텍에 할당하라는 명령과 같다. 사용자의 입력을 통해서 배열의 크기가 조절될수있기때문이다. 분명 이 조건에 따른다면 힙에 메모리가 할당되야한다. 하지만 이 소스는 100% 컴파일 에러가 난다. 이런식으로 힙영역에 메모리를 차지할수 없기때문이다. 그렇기 때문에 malloc또는 new 연산자가 있는것이다.

#include<iostream>

using std::cin;
using std::cout;
using std::endl;

void get_put(int i=0);

int main(){
    int size;
    cout<<"할당할 크기의 숫자를 입력하세요"<<endl;
    cin>>size;
    cin.get();
    get_put(size);
    return 0;
}

void get_put(int i){
    int * array = new int[i];
    cout<<i*4<<"만큼의 바이트가 확보되었습니다."<<endl
        <<"아무키나 누르면 메모리를 해제합니다"<<endl;
    cin.get();
    delete [] array;
    cout<<"메모리가 해제되었습니다"<<endl;
}


위 소스야말로 정말 올바른 소스가 되겠다.  

'C# .NET' 카테고리의 다른 글

깡통 개발자의 C# 익히기 -제 1강- (C#의 특징)  (0) 2008.11.14
메모리 관리와 동적 할당.. C  (0) 2008.11.13
클래스 기초 & 속성  (0) 2008.11.07
클래스 기초 & 메서드  (0) 2008.11.07
클래스 기초 & 필드  (0) 2008.11.07
2008. 11. 7. 15:35

클래스 기초 & 속성

성 = 영어로는 Property 라고 하지요~~
속성은 다음과 같은 문법(구문)을 가지고 있어요. 바로 볼까요?

class 클래스 {
       int 속성명 {

            set {
                  //속성 설정 구현 코드
            }
      get {
               //속성값 반환 구현 코드
      }
   }

}

 필드와 달리 . 속성은 get/set 접근자(accessor)를 통해 필드 멤버에 접근하게 함으로써 클래스 내부의 데이터를 보호할 수 있게 합다.
get 접근자는 속성 멤버의 데이터 타입을 반환하는 메서드와 동일하며, set 접근자는 void를 반환하는 method와 동일하다고 생각하면 됩니다.
다만, set 접근자에선 value라고 하는 특수한 인수가 사용되며, value 인수는 속성멤버의 데이터 타입과 동일한 데이터 타입을 가집니다.-- 이건 어찌보면 당연한 말인데요라고 생각하실거에요.
value 인수에는 속성 멤버에 저장된 값이 인수로 전달됩니다.
get 접근자는 속성 멤버의 값을 읽을 때 호출되며, set 접근자는 속성 멤버에 값을 저장할 때 호출됩니다.

만약 여러분이 읽기 전용 속성을 구현하고 싶다면 : set 접근자를 과감히생략하면 되겠지요~
글고 쓰기 전용 속성을 구현하고 싶다면  : get 접근자를 과감히생략하면 되겠지요. 

class Album {
// 생략 .....
// 속성 멤버
int Classification {
    get {

        return classification;

    }  

    set {

        if (value >= CLASSIC && value <= FOREIGN)

            classification = value;

       }

    }

}

new 연산자와 생성자....
클래스의 인스턴스(instance) 즉, 객체는 new 연산자를 사용하여 생성합니다.
이때 생성된 인스턴스는 힙(heap)메모리에 저장됩니다.
클래스의 인스턴스를 생성하는 구문은 다음과 같습니다.

클래스명 인스턴스명 = new 클래스명(인수);

예---> Album album = new Album(); 

***  주 목 ***
new 연산자가 호출되어 클래스의 인스턴스가 생성될 때 해당 클래스의 생성자가 호출~~됩니다.  이거 앞에서 나온 내용같지 않나요?
생성자는 클래스명과 같은 이름의 반환값이 없는 특수한 메서드로, 말그대로 클래스의 인스턴스가 생성될 때 자동적으로 호출되며 주로 멤버 필드를 초기화 하는 역활을 담당합니다.
생성자는 다음과 같은 구문을 갖습니다.

class 클래스명 {

    클래스명(인수) {

    }

}

생성자를 추가할 수 있습니다.
여기서 메서드 오버로딩 이라는 개념도 나오니깐... 잘 봐두세요
반드시 인수가 없는 생성자만 있는것은 아닙니다. 인수가 있는 생성자가 있을수도 있지 않겠어요
또한 여러개의 생성자를 정의할 수도 있습니다.

인수가 다른 여러 메서드 멤버를 정의하는 것을 method overloading 이라고 합니다. 메서드 오버로딩 

 class Album {       
    Album() {                // 인수가 없는 생성자
        count = 1;
        names =  new string[count];
    }
    Album(int count) {        // 인수가 하나의 생성자 
        this.count = count;
        names = new string[count];
    }

생성자가 여러 개인 경우에는 new 연산자 다음의 클래스명 괄호 안의 인수의 갯수와 데이터 타입이 동일한 생성자가 호출됩니다. 따라서       
Album  album = new Album(10);                 // Album(int count) 생성자 호출


<<출처>> 데브피아

'C# .NET' 카테고리의 다른 글

메모리 관리와 동적 할당.. C  (0) 2008.11.13
메모리(힙과 스텍, 데이터영역)의 이해  (0) 2008.11.13
클래스 기초 & 메서드  (0) 2008.11.07
클래스 기초 & 필드  (0) 2008.11.07
클래스 기초 & 열거형  (0) 2008.11.07
2008. 11. 7. 15:30

클래스 기초 & 메서드

서드(method) 

C# 언어에서 메서드는 클래스의 행위를 구현합니다.

class 클래스명 {
반환타입 메서드명(인수 리스트) {    // 메서드 멤버
            // 메서드 구현 코드
    }
}

메서드가 호출되어 실행된 후에 호출 측에 어떤 값을 반환할 수도 있으며,호출 측에서 인수를 통하여 메서드에 정보를 전달할 수도 있습니다. 이 때 메서드 명 앞에는 호출 측에 반환할 값의 데이터 타입을 지정하며, 메서드명 다음의 괄호 안에는 호츨 측에서 전달하는 인수 리스트를 지정합니다.
인수는 데이터 타입과 인수명으로 구성되며, 여러 개의 인수를 갖는 경우에 각 인수는 콤마(,)로 구분한다.

class Album {
    // 
    //메서드 멤버
    string GetName(int index) {
        if (index < names.Length)
            return names[index];
        else
            return null;
    }
    void SetName(int index, string name) {
        if (index < names.Length) 
            names[index] = name;
    }
}

메서드에는 반드시 반환 타입을 지정해야 한다.
반드시 return문을 사용하여 해당 반환 타입의 값을 반환해야 한다.
if 메서드가 반환할 값이 없다면 void  라는 Keyword 를 사용하여 그 사실을 명확하게 지정해야 한다.
이 경우 return문을 사용하지 않아도 된다. (위 코드를 보면 알 수 있음)
void는 일종의 데이터 타입을 간주되어 반환타입이나 인수리스트에 사용될 수 있습니당.
반환 타입으로 사용될 때의 void  는 ' 반환할 것이 없다' (배 째라.. 식의 말투네.. 내 돈 20만원 빌려가고 안 갚는 어떤 녀석이랑 같네요. 쉽게 이야기 해서 돈 빌려가놓고 안 갚는다고 이야기할 때  C#에서는 void 형을 씁니다.)
인수에 void가 사용되는 경우에는 '인수가 없다'는 의미인것입니다. 

속성 (property)
속성은 Visual basic 의 영향을 받아 C#언어에서 새로 추가된 기능으로....
필드와 마찬가지로 특성을 구현하는데 사용합니다.
속성은 다음과 같이... 

class 클래스 {
    int 속성명 {            // 속성 멤버
    set {
        // 속성 설정 구현 코드
    }
    get {
       // 속성값 반환 코드 구현 
    }
}


<<출처>> 데브피아

'C# .NET' 카테고리의 다른 글

메모리(힙과 스텍, 데이터영역)의 이해  (0) 2008.11.13
클래스 기초 & 속성  (0) 2008.11.07
클래스 기초 & 필드  (0) 2008.11.07
클래스 기초 & 열거형  (0) 2008.11.07
클래스 기초 & 구조체  (0) 2008.11.07