아래 글은 C# 문법 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

📃 참고자료

* 위 링크를 참고해서 아래 글을 작성했습니다.

 

 

 

 

# 가변타입(Mutable Type)

 

 

Mutable Type이란?

  • Mutable한 객체는 생성된 이후에 상태가 변경될 수 있는 객체입니다.

 

대표적인 Mutable Type

  • List
  • ArrayList
  • HashMap 
    등등

 

 

# 불변타입(Immutable Type)

 

Immutable Type이란?

  • Immutable은 '변하지 않는'이라는 뜻이 담겨 있습니다. 
  • Immutable한 객체는 생성된 이후에 상태가 변경되지 않는 객체를 말합니다.
  • 불변이란, 객체가 컴퓨터의 메모리 내에서 쓰기를 할 수 없다는 뜻이 아니다.

 

대표적인 Immutable Type 

  • String
  • Integer
  • Double
  • Long

 

 

 

Immutable Type을 사용하는 이유

  • 성능을 향상시키기 위함
    - 객체가 미래에 변할 계획이 없을 때
  • 메모리 사용을 줄이기 위함
    - 전체 객체를 복사하지 않고 객체 참조를 만듦
  • Thread-safety
    - 여러개의 쓰레드가 서로 간섭하지 않고 같은 객체를 참조할 수 있음
반응형

아래 글은 C# 문법 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

📃 참고자료

 

# 스코프(Scope)란?

Scope를 우리말로 변역하면 '범위'라는 뜻을 가지고 있습니다. 즉, 스코프(Scope)란 '변수에 접근할 수 있는 범위'라고 할 수 있습니다. 크게는 전역(Global)변수와 지역(Local) 변수로 나뉘게 됩니다.

 

 

 

# 선언된 위치에 따라서 변수의 차이

  • 블럭 변수
    - 제어문안에서 선언된 변수

  • 지역 변수
    - 메서드안에서 선언된 변수
    - 매개변수 포함
    - 해당 메서드 안에서만 사용

  • 전역 변수
    - 메서드 밖에서 선언된 변수
    - 클래스의 모든 메서드가 모두 사용가
    - 메모리에 오랫동안 남아 있는다.

 

 

# 한정자에 따라서 변수의 차이

static 이 붙으면 별도의 메모리 영역에 저장

  • 정적 변수
    - static 이 붙은 변수 (지역변수, 전역변수)

  • 인스턴스 변수
    - static 이 없는 일반 변수
반응형

 

아래 글은 C# 문법 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

📃 참고자료

* 위 링크를 참고해서 아래 글을 작성했습니다.

 

 

# static이란?

  • static은 변수나 메소드에 키워드로 사용된다.
  • static 키워드를 사용한 변수는 클래스가 메모리에 올라갈 때 자동으로 생성이 된다.
    - 스택틱 변수는 객체를 선언만 해도 메모리가 할당되며 일반적인 변수들이 객체가 새로 생성될 때
      메모리가 초기화 되는 것과 다르게 해당 객체를 계속 반복적으로 생성해도 메모리가 유지 된다는 특징이 있다.
  • 인스턴스(객체) 생성 없이 바로 사용 가능하다.
  • 객체를 생성하지 않아도 되니까 편리하고 속도도 빠르다.

 

# static 키워드를 사용하는 이유?

  • 자주 변하지 않는 일정한 값(정적 값) 혹은 설정 정보 같은 공용자원에 대한 접근에 있어서 매번 메모리에 로딩 혹은
    값을 읽어 들이는 것보다 일종의 '전역 변수'와 같은 개념을 통해서 접근하는 것이다.
  • 인스턴스 생성 없이 사용 가능하기 때문에 프로그램 내에서 공통으로 사용되는 데이터들을 관리할 때 사용한다.
  • 클래스의 일반 멤버 변수는 클래스의 객체가 생성될 때, 각 객체마다 따로 생기지만, 정적 변수는 해당 클래스가 처음으로 사용되는 때에 한번만 초기화되어 계속 동일한 메모리를 사용하게 된다.

 

 

 

 

# static (정적) 메서드

  • 정적(Static) 메서드는 인스턴스 메서드와는 달리 클래스로부터 객체를 생성하지 않고
    직접 [클래스명.메서드명] 형식으로 호출하는 메서드이다.
  • 메서드 앞에 static C# 키워드를 적어주며, 메서드 내부에 클래스의 인스턴스 객체 멤버를 참조해서는 안된다.
  • static 메서드는 인스턴스 객체로부터 호출될 수 없으며, 반드시 클래스명과 함께 사용된다.

 

* 예제코드

public class MyClass
{
   private int val = 1;
   
   // 인스턴스 메서드
   public int InstRun()
   {
      return val;
   }
   
   // 정적(Static) 메서드
   public static int Run() 
   {
      return 1;
   }
}

public class Client
{
   public void Test()
   {
      // 인스턴스 메서드 호출
      MyClass myClass = new MyClass();
      int i = myClass.InstRun();

      // 정적 메서드 호출
      int j = MyClass.Run();
   }
}

 

 

# static (정적) 속성, 필드

  • 클래스 내의 Non-static 필드들은 클래스 인스턴스를 생성할 때 마다 메모리에 매번 새로 생성되게 되는 반면,
    static 필드는 프로그램 실행 후 해당 클래스가 처음으로 사용 될 때 한번 초기화되어 계속 동일한 메모리르 사용.

 

* 예제코드

// static 필드
protected static int _id;

// static 속성
public static string Name { get; set; }

 

 

# static 클래스

  • static 클래스는 모든 클래스 멤버가 static 멤버로 되어 있으며, 클래스명 앞에 static 이라는 C# 키워드를 사용.
  • static 클래스는 public 생성자(Constructor)를 가질 수 없지만, static 생성자를 가질 수 있다.
    - static 클래스는 객체를 생성할 수 없기 때문이다.
  • static 생성자는 주로 static 필드들을 초기화 하는데 사용한다.
  • static 생성자는 액세스 한정자를 사용할 수 없으며, 매개변수 역시 가질 수 없다.

 

* 예제코드

// static 클래스 정의
public static class MyUtility
{
   private static int ver;

   // static 생성자
   static MyUtility()
   { 
      ver = 1;
   }

   public static string Convert(int i)
   {
      return i.ToString();
   }

   public static int ConvertBack(string s)
   {
      return int.Parse(s);
   }
}

// static 클래스 사용
static void Main(string[] args)
{
   string str = MyUtility.Convert(123);
   int i = MyUtility.ConvertBack(str);
}

 

# 스태틱의 장, 단점

장점

- 프로그램이 종료되기 전까지 메모리를 해제 하거나 객체를 생성하지 않아도, 멤버에 접근이 가능하다는 장점이 있다.

 

단점

- 여러곳에서 스태틱 멤버를 동시에 참조하게 될 경우에는 객체 지향에 벗어난 개념이 안좋다.

반응형

아래 글은 C# 문법 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

📃 참고자료

 

 

# 함수의 호출 방법 두가지

  • Call by value(값에 의한 호출)
  • Call by reference(참조에 의한 호출)

 

 

# Call by value (값에 의한 호출)

인자로 받은 값을 복사하여 처리를 한다.

프로그래밍 구조상 call by Value를 하면 복사가 되기 때문에 메모리량이 늘어난다.

요즘은 기기의 성능이 종아져서 상관이 없다지만 많은 계산이 들어간다면 과부하의 원인이 된다.

하지만 복사처리가 되기 때문에 원래의 값은 영향을 받지 않아서 안전하다.

 

  • 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다.
    (c++의 경우 stack frame) 함수가 종료되면 해당 공간은 사라진다.
  • 스택 프레임(Stack Frame): 함수 호출 시 할당되는 메모리 블록(지역변수의 선언으로 인해 할당되는 메모리 블록)
  • call by Value 값에 의한 호출방식은 함수 호출 시 전달되는 변수의 값을 복사하여 함수의 인자로 전달한다.
  • 복사된 인자는 함수 안에서 지역적으로 사용되는 local value의 특성을 가진다.
  • 따라서 함수 안에서 인자의 값이 변경되어도, 외부의 변수의 값은 변경되는 않는다.
  • Java의 경우 함수에 전달되는 인자의 데이터 타입에 따라서(원시자료형 / 참조자료형)함수 호출 방식이 달라진다.
    - 원시 자료형(primitive type) : call by Value 로 동작 (int, short, long, float, double, char, boolean)
    - 참조 자료형(reference type) : call by reference 로 동작 (Array, Class Instance)

 

 

장, 단점

  • 장점: 복사하여 처리하기 때문에 안전하다. 원래의 값이 보존 된다.
  • 단점: 복사를 하기 때문에 메모리 사용량이 늘어난다.

 

 

 

# Call by reference (참조에 의한 호출)

인자로 받은 값의 주소를 참조하여 직접 값에 영향을 준다.

 

  • 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다.
    (예: stack frame)함수가 종료되면 해당 공간은 사라진다.
  • call by Reference 참조에 의한 호출방식은 함수 호출 시 인자로 전달되는 변수의 레퍼런스를 전달한다.
    (해당 변수를 가르킨다.)
  • 따라서 함수 안에서 인자의 값이 변경되면, Arguement 로 전달된 객체의 값도 함께 변경된다.

 

 

장, 단점

  • 장점: 복사하지 않고 직접 참조를 하기에 빠르다.
  • 단점: 직접 참조를 하기에 원래 값이 영향을 받는다.(리스크)
반응형

 

# UpDown 게임

 

 

고려할 사항들

  • 컴퓨터가 숫자를 하나 뽑는다. (1 ~ 101) => 난수 발생
  • 사람이 그 값을 맞추는 게임
  • n번 기회 제한을 주기 (몇번 이내에 맞춰라)
  • 겜 끝나면 다시 하시겠습니까? 추가
  • 몇전 몇승 몇패 와 승률을 보여주기 (5(컴터) : 3(사용자))
  • 문제를 맞추는 와중에도 게임을 나갈 수 있게 구현

 

 

 

# 소스코드

 Random rnd = new Random();
 int computerNum = rnd.Next(1, 100);
 int life = 5;

while (true)
{

	if (life == 0)
	{
		Console.WriteLine("목숨을 다 소비했습니다.\n다시 하시겠습니까?( Y / N)");

		string playAgain = Console.ReadLine().ToLower();
		if (playAgain == "y")
		{
			life = 5;
			computerNum = rnd.Next(1, 100);
			continue;
		}
		else
			break;  // 가장 가까운 반복문 1개만 나간다.
	}
	Console.Write("수입력 (1 ~ 99): ");
	int userNum = int.Parse(Console.ReadLine());
	if (computerNum == userNum)
	{
		Console.WriteLine("정답을 맞췄습니다. \n게임이 종료됩니다.");
		break;
	}
	else
	{
		if (computerNum > userNum)
			Console.WriteLine("Up");
		else
			Console.WriteLine("Down");

		life--;
		Console.WriteLine($"묵숨: {life}");
	}
}

 

반응형

 

아래 글은 C# 문법 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

📃 참고자료

* 자세한 내용은 위 링크를 참고바랍니다.

 

 

# 박싱(Boxing)

  • 값타입 Object 형식 또는 이 값 형식에서 구현된 임의에 인터페이스 형식으로 변환하는 것을 말합니다.
  • 기존에 저장된 스택영역에서 힙영역에 값 형식을 저장합니다.
  • 값 타입(Value Type)의 객체를 참조 타입(Reference Type)로 변환하는 작업을 말합니다.
int i = 123;
object o = i;  // 박싱
Console.WriteLine(o.ToString());

  • 단순한 형변환 같지만 값 타입은 스택에 저장되어 있고 참조 타입은 힙에 저장되어 있습니다.
  • 그래서 위 과정을 수행하기 위해선 스택에 저장된 값 타입을 힙 타입으로 복사가 한번 일어납니다.
  • 그리고 힙에 복사된 이 영역을 참조 타입이 가리키게 되는 일을 수행합니다.

 

 

 

# 언박싱(UnBoxing)

  • 참조 타입을 값 타입으로 변환하는 작업을 말합니다.
int i = 123;	// a value type
object o = o;	// boxing
int j = (int)o;	// unboxing

  • 박싱과 반대로, 힙에 있던 데이터를 다시 스택으로 복사가 일어납니다.
  • 박싱과 언박싱은 System.Object 타입이나 인터페이스 타입이 필요한 부분에 Value 타입의 객체를 적용하기 위해서
    필요한 기능이지만, 가능하면 쓰지 않는 것이 좋습니다.

 

언박싱 과정은 두가지의 절차

  1. 개체 인스턴스가 값 형식을 boxing한 값인지 확인
  2. 인스턴스의 값을 값 형식 변수에 복사
반응형

 

 

아래 글은 C# 문법 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

📃 참고자료

* 위 두개의 링크를 참고해서 아래 글을 작성했습니다.

 

 

# 데이터 타입이란?

데이터를 저장하는 이유는 필요한 순간 읽고, 쓰고, 수정해서 저장

저장되는 데이터의 형식(타입)과 크기가 다르다 => 적절하게 잘 저장 (효율적)

 

 

 

 

테이터 타입의 종류

  1. 기본 데이터 타입(참고 자료 MSDN)
  2. 사용자정의 데이터타입

 

* CLR은 참조 타입(Reference Type)와 값 타입(Value Type)이라는 두 종류의 타입 체계를 지원한다. 

 

# 값 형식(Value Type)

 

  • 변수가 값을 담는 데이터 형식
  • 값 형식과 관련이 있는 것은 스택(Stack) 메모리 영역
  • primitive Type(int, float, bool, char와 같은 기본 데이터 타입)과 구조체가 이에 해당된다.
  • 변수의 선언과 동시에 값을 할당할 수 있다.
  • 이렇게 단일한 공간에 생성된 데이터는 직접적이며, 변수의 대입이나 매개변수로 데이터를 전달할 때
    메모리 복사가 일어난다.

 

값 타입의 인스턴스는 그 자체가 하나의 필드이며 필드를 얻어내기 위해 역추적을 할 필요가 없고 GC의 관리 대상또한 아니다. C#에서 모든 클래스는 참조 타입이며 모든 구조체, 열거 타입은 값 타입 입니다. (System.Int32등도 구조체이다.)

 

 

 

# 참조 형식(Reference Type)

 

  • 변수가 값 대신 값이 있는 곳의 위치(참조)를 담는 데이터 형식
  • Class, String, Object(이것들과 더불어 배열은 그 구성요소의 형식과 상관없이 항상 참조형식이다.)
  • 참조 타입을 사용하기 위해선 new 키워드를 통해 객체를 초기화한 후 힙에 할당된 메모리를
    스택공간에서 참조해야 한다.
  • 객체를 지시하는 메모리는 필요로하는 메모리공간(힙)의 주소와 그것을 가리키는 참조 값(스택)으로
    분리되어 저장된다.
  • 아직 수행되지 않은 데이터를 위해 예약어인 new 키워드를 사용해 객체를 초기화하여 인스턴스를 만들면
    그 과정에서 시스템은 힙 공간에 필요한 만큼의 메모리 블록을 준비하여 스택에서 그 주소 정보를
    참조할 수 있도록 해준다.
  • 여기서 참조 타입의 변수를 다른 곳에 대입하거나 매개변수로 데이터를 전달 할 때도 reference 자체만 복사되고
    실제 참조로 가리키는 힙에 저장된 메모리는 동일하다.

 

 

참조 타입은 항상 관리되는 힙에 할당된다.

따라서 참조 타입을 사용할 때 마다 메모리의 할당이 발생하는데, 모든 타입이 참조 타입이라면 엄청난 성능 저하가 있을 것이다. 따라서 성능 향상을 목적으로, 단순하고 자주 사용되는 타입들을 위하여 경량화된 값 타입이 존재한다.

 

 

 

 

# 스택(Stack)

  • 매우 빠른 액세스
  • 변수를 명시 적으로 할당 해체 할 필요가 없습니다.
  • 함수의 호출관 관계되는 지역변수와 매개변수가 저장되는 영역입니다.
  • 공간은 CPU에 의해 효율적으로 관리되고 메모리는 단편화되지 않습니다.
  • 지역 변수 만
  • 스택 크기 제한(OS에 따라 다름)
  • 변수의 크기를 조정할 수 없습니다.
  • 스택의 구조는 마치 책상 위에 쌓인 책이라고 생각하면 됩니다.

 

값 형식은 코드 블록 안에서 생성된 모든 값 형식의 변수들을 중괄호 "}"을 만나면 메모리에서 제거됩니다.

 

 

# 힙(Heap)

  • 변수는 전역 적으로 액세스 할 수 있습니다.
  • 메모리 크기 제한이 없습니다.
  • (상대적으로) 느린 액세스
  • 효율적인 공간 사용을 보장하지 못하면 메모리 블록이 할당된 후 시간이 지남에 따라 메모리가
    조각화되어 해제될 수 있습니다.
  • 메모리를 관리해야 합니다(변수를 할당하고 해제하는 책임이 있습니다)

 

메모리 관리가 깔끔한 스택에 반해 힙은 데이터를 스스로 제거할 수 있는 메커니즘을 가지고 있지 않다.

대신 청소부 같은 존재를 고용하고 있는데, 그 청소부의 이름은 가비지 컬렉터(Garbage Collector)이다.

힙에 더 이상 사용하지 않는 객체가 있으면 그 객체를 쓰레기로 간주하고 수거해 가는 기능을 가지고 있다.

 

 

 

가비지 컬렉터가 필요한 힙 영역을 사용하는 이유

스택에 쌓인 데이터들은 코드 블록이 사라지는 시점에서 함께 제거된다.

이것은 스택에 장점이기도 하지만, 동시에 한계이기도 하다.

 

코드 블록이 끝나는 시점과 상관없이 데이터를 유지하고 싶을 때는 스택의 구조가 발목을 잡는 요소가 된다.

 

그래서 또 다른 메모리 영역인 힙을 제공하는 것이다.

힙은 코드 블록이 종료되는 것과 관계없이 그 데이터를 계속 유지할 수 있다.

그리고 이 데이터는 프로그래머가 더 이상 사용하지 않을 때가 됐을 때 가비지 컬렉터가 수거해 제거 한다.

 

참조 형식의 변수는 힙과 스택을 함께 사용하는데, 힙 영역에는 데이터를 저장하고, 스택 영역에는 데이터가 저장된

힙의 메모리의 주소를 저장한다. 그래서 참조 형식이라는 이름이 붙은 것이다.

 

 

 

 

 

실제 값 10과 20은 힙 영역에 저장하고, a와 b는 값이 저장된 힙의 주소만 스택에 저장하게 된다.

 

 

블록이 끝난 시점에서 스택의 값은 사라진다. 하지만 힙에 남은 값을 사라지지 않는다.

* C#에서는 가비지 컬렉터가 처리

 

 

 

 

 

 

 

1번: 기본 && value

  • byte, short, int, long, float, double, decimal, char, bool

 

2번: 사용자정의 && value

  • struct, enum

 

3번: 기본 && Reference

  • string, object

 

4번: 사용자정의 && Reference

  • class, 배열
반응형

 

아래 글은 WPF 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

📃 참고자료

 

 

Windows Presentation Foundation Masterclass

Leverage WPF with C# and XAML to build real world skills with Azure, REST, MVVM and Machine Learning

www.udemy.com

 

 

 

 

# MainWindow.xaml

 

XAML 쪽을 보면 Label태그가 있습니다.

C#쪽과 연결하기 위해 x:Name="label" 속성을 적었습니다.

 

 

* 여기서 x:Name이란?

 

XAML 상에서 각각의 Item 들에게 이름을 붙여줄 수 있는 Attribute로서,
단순히 이름을 붙여줌과 동시에 핵심 기능은
Code-behind 에서 해당 Item을 참조할 수(사용할 수)있는 Field)를 만들어주는 것이다.
당연히 Field의 이름은 x:Name에다가 사용자가 지정한 이름이다.
그래서 우리가 XAML에서 선언한 UIElement를 Code-behind에서도 손쉽게 Refer 하여 쓸 수 있었던 것이다.

(출처: https://springisover.tistory.com/14)

 

 

 

 

 

# MainWindow.xaml.cs

 

MainWindow.xaml.cs (C# 코드)을 보면 label의 Content를 "test"로 선언 한 것을 볼 수 있습니다.

그래서 실질적으로 프로그램을 돌려보면 Label 태그의 Content는 test가 출력 됩니다.

 

 

 

 

 

 

제목에도 적었듯이 XAML코드와 C#코드는 어떻게 연결 되어 위와 같은 출력 결과를 만드는 걸까요?

 

 

 

 

 

 

 

 

위 사진을 보면 MainWindow partial 클래스입니다.

partial class는 class를 정의할때 한군데가 아닌, 복수의 장소에서 class를 정의할 수 있도록 지원하고 있습니다.

 

즉 MainWindow는 한곳이 아니라 다른 곳에도 있을 수 있다는 것입니다.

 

 

 

 

 

 

오른쪽 솔루션 탐색기에서 모든 파일 표시 버튼을 누르시면,

숨겨져 있던 폴더들이 보이게 됩니다.

 

 

 

 

 

여기서 MainWinddow.g.i.cs 파일을 클릭하면 아래같은 코드가 보이게 됩니다.

 

 

 

 

 

 

 

여기서 MainWindow.xaml.cs 와 동일하게 public partial class MainWindow로 적혀 있는 걸 볼 수 있습니다.

위 코드는 VisualStudio에 의해서 만들어진 파일입니다.

VisualStudio가 XAML과 C#(Code-behind)의 연결을 위해서 자동적으로 코드를 작성하고 있었던 것 입니다.

* 코드를 정확히는 모르겠지만, Label 태그의 x:Name으로 선정했던 label도 적혀 있습니다.

 

 

반응형

'프로그래밍언어 & 프레임워크 > C#' 카테고리의 다른 글

박싱(Boxing)과 언박싱(UnBoxing)  (0) 2021.08.04
C# 값 타입과 참조 타입  (0) 2021.08.03
XAML 이란?  (0) 2021.07.13
WFP란?  (0) 2021.07.07
C# 비동기 프로그래밍  (0) 2021.06.22

 

 

아래 글은 XAML 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

📃 참고자료

 

 

 

 

 

 

* XAML이란?

 

  • XAML은 선언적 태그 언어입니다.
  • XAML은 .NET Core 프로그래밍 모델에 적용되어 .NET Core 앱의 UI를 쉽게 만들 수 있게 해줍니다.
  • 선언적 XAML 태그에 시각적 UI 요소를 만든 다음, 코드 숨김 파일을 사용하여
    UI 정의를 런타임 논리와 분리할 수 있습니다. 이 정의는 partial 클래스 정의를 통해 태그에 연결됩니다.
  • AML은 어셈블리에 정의된 특정 지원 형식 집합으로 개체의 인스턴스화를 직접 나타냅니다.
    이는 지원 형식 시스템에 직접 연결되지 않고 해석되는 언어인 대부분의 다른 태그 언어와의 차이점입니다.
  • XAML은 개별 대상이 잠재적으로 서로 다른 도구를 사용하여 앱의 UI와 논리를 작업할 수 있는
    워크플로를 가능하게 합니다.

 

 

 

 

* XAML코드 예시 및 특징

<Page>
    <StackPanel>
    	<TextBox Text="Write your name"/>
        <TextField x:Name="nameTextField"/>
        <Button Text="Save"/>
    </StackPanel>
</Page>

 

  • HTML과 비슷한 구조로 열림 태그와 닫힘 태그가 있습니다.
  • 열림 태그와 닫힘 태그는 같은 라인 선상에 유지합니다.
  • 확장 응용 프로그램 마크업 언어(Extensible Application Markup Language)입니다.
  • WPF에서 XAML로 UI를 작성하고 C#으로 로직을 구성합니다.
  • MS에서 구조값과 객체를 표현하기위해 만들었습니다.

 

 

 

반응형

 

 

아래 글은 WPF 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

📃 참고자료

 

 

 

 

 

 

* WPF(Windows Presentation Foundation란?

 

 

- 데스크톱 클라이언트 애플리케이션을 만드는 UI 프레임워크입니다.

 

- WPF 개발 플랫폼은 애플리케이션 모델, 리소스, 컨트롤, 그래픽, 레이아웃, 데이터 바인딩,
  문서 및 보안을 포함하여 다양한 애플리케이션 개발 기능 세트를 지원합니다.

 

- 프레임워크는 .NET의 일부이므로 이전에 ASP.NET 또는 Windows Forms를 사용하여
  .NET으로 애플리케이션을 빌드한 경우 프로그래밍 환경이 비슷합니다. 

 

- WPF는 XAML(Extensible Application Markup Language)을 사용하여
  애플리케이션 프로그래밍을 위한 선언적 모델을 제공합니다.

 

 

 

 

* WPF를 사용하는 이유와 장점

 

  • 윈도우 데스크탑 앱을 만들 수 있다.
  • 대부분의 모든 윈도우 앱은 데스크탑을 위해 개발되었다.
  • 앱 스토어의 앱보다 좀 더 자유롭게 만들고 사용 할 수 있다.(앱스토어는 보안 이유로 까다로움)
  • xaml이라는 마크업 언어로 UI를 C#으로 로직을 구성하는 형식으로 분할 해 개발 할 수 있다.

 

 

 

 

* How it works(어떻게 작동하는지)

 

C# 코드 베이스 XAML로 UI 디자인

상호 작용에 반응한다.


ex) 버튼이 눌렸을 때,
리스트의 아이템이 선택 되었을 때 등

유저 인터페이스를 만든다

논리(로직) 연산을 수행한다.


애니메이션 요소

ex) 버튼 클릭 시 리스트 아이템 추가 등


Access infromation

데이터베이스, request의 정보를
인터넷 혹은 다양한 곳에서 접근할 수 있다.

유저와 소통 혹은
직접적으로 유저에게 보여지는 부분

 

 

 

 

반응형

+ Recent posts