[C#]추상 Class

2016.07.13 01:09

C#의 추상(Abstract) Class는 

    Interface와 비슷한다.

    Interface에서는 Method 정의만 가능하지만 추상 Class에서는 실제로 Method를 가질 수 있다.

    Interface와 같이 Method의 정의만도 가능하다.

    추상 Class는 반드시 다른 Class에 상속되어 사용된다.


    추상 Class 예제

private void Form1_Load(object sender, EventArgs e)
{
Vehicle a = new Car();
Vehicle b = new Bike();
a.Run();
b.Run();
Close();
}
/// <summary>
/// 추상 Class
/// </summary>
public abstract class Vehicle
{
// Method만 정의 [abstract]
public abstract string getName();
public void Run()
{
MessageBox.Show(getName() + " Run!");
}
}
public class Car : Vehicle
{
// Method만 정의된 것을 구현하는 곳에서는 [override]로 써준다.
public override String getName()
{
return "Car";
}
}
public class Bike : Vehicle
{
public override String getName()
{
return "Bike";
}
}


추상 Class에서 Interface를 사용한 예제

private void Form1_Load(object sender, EventArgs e)
{
Vehicle a = new Car();
Vehicle b = new Bike();
a.Run();
b.Run();
Close();
}
public interface IVehicle
{
string getName();
void Run();
}
/// <summary>
/// 추상 Class
/// </summary>
public abstract class Vehicle : IVehicle
{
public abstract string getName();
public void Run()
{
MessageBox.Show(getName() + " Run!");
}
}
public class Car : Vehicle
{
// Method만 정의된 것을 구현하는 곳에서는 [override]로 써준다.
public override String getName()
{
return "Car";
}
}
public class Bike : Vehicle
{
public override String getName()
{
return "Bike";
}
}










Posted by 떡잎

[C#] Interface 예제

2016.07.09 18:24





우선 Car라는 클래스를 만들고 그 클래스를 사용하는 Run이라는 함수를 만들어 본다.


private void Form1_Load(object sender, EventArgs e)
{
Car a = new Car();
Run(a);
Close();
}
public void Run(Car car)
{
MessageBox.Show("run!");
}
public class Car
{
}


이번에는 Bike라는 클래스를 만들고 그 클래스를 사용하는 Run이라는 함수를 만들어 본다.
Run을 표시하기 위해 Car를 위한 것과 Bike를 위한 것이 두 개가 필요하다.

private void Form1_Load(object sender, EventArgs e)
{
Car a = new Car();
Bike b = new Bike();
carRun(a);
bikeRun(b);
Close();
}
public void carRun(Car car)
{
MessageBox.Show("run!");
}
public void bikeRun(Bike bike)
{
MessageBox.Show("run!");
}
public class Car
{
}
public class Bike
{
}


이런 것을 쉽게 사용하기 위해서는 interface를 사용하면 쉽게 아래와 같이 해결할 수 있다.
Vehicle이라는 interface를 만들어 Car나 Bike는 Vehicle이라는 interface를 가지고 있다는 것을 정의한다.
private void Form1_Load(object sender, EventArgs e)
{
Car a = new Car();
Bike b = new Bike();
Run(a);
Run(b);
Close();
}
public interface Vehicle
{
}
public void Run(Vehicle v)
{
MessageBox.Show("run!");
}
public class Car : Vehicle
{
}
public class Bike : Vehicle
{
}

Interface는 아래와 같이 Method를 정의할 수 있다.
Interface는 실제 함수를 쓸 수는 없고 함수의 형태만 정의할 수 있다.
Interface를 상속하는 클래스에서 Interface에 정의된 함수를 반드시 구현해야만 된다.

private void Form1_Load(object sender, EventArgs e)
{
Vehicle a = new Car();
Vehicle b = new Bike();
Run(a);
Run(b);
Close();
}
public void Run(Vehicle vehicle)
{
MessageBox.Show(vehicle.getName() + " run!");
}
public interface Vehicle
{
String getName();
}
public class Car : Vehicle
{
public String getName()
{
return "Car";
}
}
public class Bike : Vehicle
{
public String getName()
{
return "Bike";
}
}














Posted by 떡잎


안드로이드 스투디오에서 작성한 앱을 안드로이드 폰에 넣고 디버그를 할 때 

스마트 폰 쪽에서도 설정이 필요하다.



환경설정에서



개발자 옵션을 선택하고



개발자 옵션을 켜고 USB 디버깅을 체크한다.



그리고 스마트폰을 USB 케이블로 컴퓨터와 연결하면 위와같은 다이알로그가 표시된다.

여기서 확인을 누르면 폰에 앱을 설치하고 설치된 앱을 디버그할 수 있다.

Posted by 떡잎

이전에는 안드로이드를 이클립스에서 개발하는 것이 당연했다고 한다.

하기야 나는 어제부터 안드로이드를 시작해봐서 아는게 없고

안드로이드 스투디오도 나쁘지 않다고 해서 안드로이드 스투디오를 설치하는 것을 해본다.


http://d.android.com


위의 사이트에 가서 아래 방법대로 Android Studio를 다운로드 받는다.







다운로드 받은 파일을 실행하여 안드로이드 스투디오를 설치한다.

기본적으로 다음을 누르면 문제없이 안드로이드 스투디오가 설치된다.




경우에 따라 Android SDK를 별도로 먼저 설치한 경우에는 여기에서 Android SDK를 선택하지 않는다.

여기서 SDK는 최신 버전만 다운로드 하므로 기존 버전 대응을 한다면 별도로 해당 SDK 버전을 다운로드 해야된다.










이렇게 설치를 마친 후 안드로이드 스투디오를 실행한다.



처음 안드로이드 스투디오를 실행하면 이전에 개발환경이 있었다면 그 개발환경을 설정을 가져올 수 있다.

없다면 그냥 밑에 것을 선택한 채로 OK 버튼을 클릭하면 된다.





새로운 안드로이드 스투디오 프로젝트를 시작한다.



어플리케이션 이름을 주고

회사 도메인은 특별히 없으면 우선은 대충 적으면 된다.



여기서는 폰이나 타블렛을 선택하고 안드로이드의 어떤 버전까지 지원할 것인지를 선택하고 다음 버튼을 클릭한다.



Blank Activity를 선택하고 다름 버튼을 클릭한다.



엑티비티 이름을 변경하지 않는다면 그냥 마침 버튼을 클릭한다.



이렇게 하면 우선 최신 안드로이드 폰을 개발할 수 있는 환경을 갖추게 된다.

Posted by 떡잎

[C#] WCF 초간단 예제

2014.11.14 20:13



WCF(Windows Communication Foundation) 

나도 잘 몰라서 설명을 잘 못하겠다.

그래도 우선 아래 소스는 이해가 갔다.


프로세스간 통신을 하려면 이전에는 여러가지 방법이 있었다.

그런데 WCF는 그것을 간단하게(?) 해결하여준다.


WCF를 이해하기 위해서는 몇가지 알아야할 개념이 있다.

난 복잡한 것을 잘 모르니까 그냥 내가 이해한 대로 나를 위해 적어본다.


WCF로 프로세스간 통신을 하기위해서는 서버와 클라이언트가 필요하다.

WCF는 서버의 함수들을 클라이언트에서 호출할 수 있게 해준다.


서버의 함수를 클라이언트에서 호출을 할 수 있게 하기 위해서 해야되는 몇가지 작업이 있다.

우선 EndPoint라는 것을 서버에도 클라이언트에도 만들어주어야한다.

어떤 프로세스간 통신을 하더라도 서로 통신을 하기위해 무언가 준비해야된다.

WCF에서 프로세스간 통신을 하기위해서 반드시 필요한 것이 EndPoint이고

EndPont는 서버와 클라이언트간에 통신을 하기위한 양쪽 터널의 끝점같은 것이다.

양쪽 EndPoint를 제대로 설정해야 제대로 통신할 수 있다.


EndPoint는 ABC로 구성되어있다.

A는 Address, B는 Binding, C는 Contract로

Address는 어디에 접속할지를 설정한다.

Binding은 어떻게 접속할지를 설정한다.

Contract는 접속에서 무엇을 할지를 설정한다.


음... 설명하려했는데 이 설명으로 WCF를 이해하는 사람이 있으면 그 사람은 분명히 천재이다. ㅜㅜ

여하튼 WCF는 서버쪽 함수를 클라이언트 쪽에서 쉽게 호출할 수 있게 만들어 준다는 것만을 알아도 WCF를 반이상 안거라고 생각한다.


기본적으로 wCF 관련 자료를 인터넷에서 검색하면 이것저것 설정해야되는 것이 많은데 개인적으로는 아래와 같이 특별히 설정하지 않고 소스에서 Address나 Binding을 처리하는 것이 좋다.



WCF Server 쪽 소스


버튼 두개를 폼에 추가 한다.

솔루션 탐색기의 참조에서 오른쪽 클릭으로 참조 추가를 하여 선택하여

.NET 탭에서 System.ServiceModel을 선택하여 확인 버튼을 누른다.

그리고 소스를 열어 아래 내용들을 추가한다.



using System;
using System.Windows.Forms;

using System.ServiceModel;

namespace wcfSimpleServer
{
    public partial class Form1 : Form
    {
        ServiceHost host;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            // Address 
            string address = "net.tcp://localhost:8080/myAddress";

            // Binding : TCP 사용
            NetTcpBinding binding = new NetTcpBinding();

            // Service Host 만들기
            host = new ServiceHost(typeof(MyService));

            // End Point 추가
            host.AddServiceEndpoint(typeof(IMyContract), binding, address);

            // Service Host 시작
            host.Open();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            // Service Host 종료
            host.Close();

        }
    }

    // Client 쪽에서 호출될 함수 Interface
    [ServiceContract]
    public interface IMyContract
    {
        [OperationContract]
        string Hello(string name);
    }

    // 실제로 Client에서 호출될 함수
    public class MyService : IMyContract
    {
        public string Hello(string name)
        {
            return "Hello " + name + "!";
        }
    }
}





WCF 클라이언트 쪽 소스


버튼 한개를 폼에 추가 한다.

솔루션 탐색기의 참조에서 오른쪽 클릭으로 참조 추가를 하여 선택하여

.NET 탭에서 System.ServiceModel을 선택하여 확인 버튼을 누른다.

그리고 소스를 열어 아래 내용들을 추가한다.




using System;
using System.Windows.Forms;

using System.ServiceModel;

namespace wcfSimpleClient
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Text = "";

            ChannelFactory<IMyContract> factory = new ChannelFactory<IMyContract>();

            // Address
            string address = "net.tcp://localhost:8080/myAddress";
            factory.Endpoint.Address = new EndpointAddress(address);

            // Binding : TCP 사용
            factory.Endpoint.Binding = new NetTcpBinding();

            // Contract 설정
            factory.Endpoint.Contract.ContractType = typeof(IMyContract);

            // Channel Factory 만들기
            IMyContract channel = factory.CreateChannel();

            // Server 쪽 함수 호출
            string result = channel.Hello("World");

            // Close Channel
            ((ICommunicationObject)channel).Close();

            this.Text = result;
        }

        // Server 쪽 함수 호출용 Interface
        [ServiceContract]
        public interface IMyContract
        {
            [OperationContract]
            string Hello(string name);
        }
    }
}




서버쪽 프로그램 실행하여 버튼1 클릭하고

클라이언트쪽 프로그램 실행하여 버튼1 클릭하면 

클라이언트쪽 폼의 캡션에 "Hello World!"가 출력되면 성공


단언컨데 이 소스보다 간단한 WCF 소스는 별로 없을 것 같다.




Posted by 떡잎

버튼을 눌렀을 때와 뗐을 때 라벨의 내용을 변경

//

//  ViewController.m

//  ButtonTest

//


#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController

{

    UILabel *lb;

    UIButton *bt;

}


- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

    

    lb = [[UILabel alloc] init];

    lb.text = @"버튼 테스트";

    [lb sizeToFit];

    

    bt = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    [bt setTitle:@"테스트" forState:UIControlStateNormal];

    bt.frame = CGRectMake(0, 0, 100, 100);

    bt.center = self.view.center;

    

    [bt addTarget:self action:@selector(bt_down:) 

        forControlEvents:UIControlEventTouchDown];

    [bt addTarget:self action:@selector(bt_up:) 

        forControlEvents:UIControlEventTouchUpInside];

    

    self.view.backgroundColor = [UIColor whiteColor];

    

    [self.view addSubview:lb];

    [self.view addSubview:bt];

    

}

- (IBAction)bt_down:(UIButton *)sender

{

    lb.text = @"눌렸다";

    [lb sizeToFit];

}

- (IBAction)bt_up:(UIButton *)sender

{

    lb.text = @"뗐다";

    [lb sizeToFit];

}


- (void)viewDidUnload

{

    [super viewDidUnload];

    // Release any retained subviews of the main view.

}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);

}


@end

Posted by 떡잎

아이폰에 프로그램 짜볼려고 맥을 산지 어언 2년이 되어가는데
처음 Xcode로 아주 간단한지만 프로그램을 만들어 봤다.


Xcode를 실행한다.


Create a new Xcode project를 선택하여 프로젝트를 새로 만든다.

우선 Single View Application을 선택하고 Next 버튼을 누른다.

Product Name을 넣고 Next 버튼을 누른다.

Create 버튼을 눌러 Source를 저장할 폴더를 만든다.

이렇게 하면 프로젝트가 만들어진다.

프로젝트명의 폴더를 선택해서 ViewController.m을 선택한다.

viewDidLoad 함수에 아래 파란 색 상자의 내용을 입력한다.

- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

    

    UILabel *lb;

    lb = [[UILabel alloc] init];

    lb.frame = self.view.frame;

    lb.text = @"안녕~";

    [self.view addSubview:lb];

    

}

그리고 화면 상단에 있는 실행 버튼을 클릭하면 아래의 화면이 표시된다.

이렇게 간단한 것을 2년이 지나야지 만들다니...   -.-;;

앞으로도 시간이 날 때마다 간간히Xcode 프로그램을 만드는 것을 연습해 봐야겠다.

Posted by 떡잎

C#에서 DLL만들고 사용하기

개발환경은 Visual C# 2010 Express에서의 예제이다.
이 내용은 Visual Studio 2010에서 해도 문제가 없다.

메뉴 표시는 대신 한글이여서 조금은 이해하기 편할 것 같다.


먼저 DLL을 사용할 프로젝트를 만든다.
먼저 File > New Project를 선택한다.

Console Application을 선택하고 적당한 이름을 입력한 후 OK를 누른다.
여기서 입력한 이름으로 프로젝트가 만들어지고 이 이름의 네임스페이스가 생긴다.

그러면 아래와 같이 자동으로 소스가 조금 만들어진다.


사용할 DLL 프로젝트 만들기

솔루션에서 왼쪽 클릭을 하고 Add > New Project를 선택한다.



Class Library를 선택하고 DLL의 이름을 적고 OK를 누른다.


DLL에 대한 내용을 적어둔다.



using System;

namespace MyCompo
{
    public class Calcurate
    {
        public int Add(int a, int b)
        {
            return (a + b);
        }
    }
}


DLL을 Build한다.


작성된 DLL을 참조하기 위해서는 DLL을 사용하려는 프로젝트의 References(참조)에서 오른쪽 클릭을 하여 Add Reference를 선택한다.


그리고 Projects 탭을 선택하면 지금 작성한 DLL의 프로젝트를 선택하고 OK를 누른다.

정상적으로 Dll이 참조되면 References 밑에 추가한 DLL의 이름이 표시된다.

그리고 아래와 같이 코드를 작성한다.


using System;
// DLL Namespace 추가
using MyCompo;

namespace UseDll
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 10;
            int b = 20;
            int c = 0;

            // DLL에 정의된 클래스로 객체 정의하기
            Calcurate cal = new Calcurate();

            // DLL의 메서드 사용하기
            c = cal.Add(a,b);

            Console.WriteLine("{0} + {1} = {2}", a, b, c);
            Console.ReadLine(); 
        }
    }
}

그리고 실행하면 아래와 같은 결과가 표시된다.




Posted by 떡잎

C#으로 ASP.NET 웹 응용 프로그램을 만들기

파일 > 새로 만들기 > 프로젝트 를 선택한다.

아래의 그림에서 ASP.NET 웹 응용 프로그램을 선택하고 이름에 적당한 이름을 넣고 확인 버튼을 누른다.

그러면 아래와 같은 화면이 표시된다.

Default.aspx에서 오른쪽 클릭을 하고 디자이너 보기를 선택한다.


그러면 웹 디자인 화면이 아래와 같이 표시된다.
그리고 Default.aspx에서 오른쪽 클릭을 하고 브라우저에서 보기를 선택한다.

그러면 아래와 같이 브라우저에 내용이 표시된다.


어느 버전부터는 잘 모르겠지만 IIS가 설치되어있지 않아도 바로 브라우저에서 볼 수 있다.
아래와 같이 개발 서버가 탑재되었다.






Posted by 떡잎

C#으로 WPF 응용 프로그램을 만들기

파일 > 새로 만들기 > 프로젝트 를 선택한다.

아래의 그림에서 WPF 응용 프로그램을 선택하고 이름에 적당한 이름을 넣고 확인 버튼을 누른다.

그러면 아래와 같은 화면이 표시된다.
WPF는 화면이 XAML로 되어있어 기존 폼 처럼 컨트롤을 가져다 놓을 수도 그리고 XAML 파일을 직접 변경해서도 작업할 수 있다.

도구 상자에서 버튼을 선택하여 폼에 버튼을 그려 넣는다.

라벨도 추가한다.
그러면 XAML에도 버튼과 라벨이 추가된다.

버튼을 더블 클릭하면 아래와 같이 버튼 클릭 이벤트에 대한 소스가 자동으로 만들어진다.

label1.Content = "Hello";

위 소스를 추가한다.
WPF에서는 윈도우 폼의 Text 속성이 Content로 바뀌였다.

실행 버튼을 누르면 아래의 화면이 표시된다.


버튼을 누르면 라벨에 Hello가 표시된다.




Posted by 떡잎
BLOG main image
프로그래밍 공부하면서 써가는 개인 노트 (따라서 여기에 씌여있는 소스의 신빙성을 보장 못함 -.-;;) 이 블로그 보면서 틀린 점이 있으면 꼬옥 알려주세요. by 띠리

공지사항

카테고리

분류 전체보기 (323)
Win32 SDK 초보 (27)
통신관련 (11)
MFC TIP (20)
C/C++ TIP (10)
개발기타 (10)
링크 (2)
견물생심 (24)
이것저것 (8)
용어메모 (3)
데이터베이스 (32)
비주얼 베이직 (10)
하드웨어 (3)
C# (42)
Xcode (3)
델파이 (82)
홈페이지 (5)
MindStorm (0)
낙서 (5)
스크래치 (0)
기타 (6)
아두이노 (1)
라즈베리파이 (2)
안드로이드 (6)
파이썬 (0)
WEB (2)
Total : 987,324
Today : 402 Yesterday : 409