본문 바로가기

   
Programming/C#

객체 지향 프로그래밍 OOP, 클래스 라이브러리, 접근 지정자

반응형

객체 지향 프로그래밍(OOP)

       -기능이나 객체 위주로 프로그래밍

       -이벤트 위주 프로그래밍

        -절차 지향 프로그래밍(코드위주)

* 모든객체는 데이타를 갖는다.

* 객체를 통해서 어떠한 행동을 하는것 => 프로시져 => 메소드

2가지를 엮어서 관리를 하기 위해서 구현해 놓은것을 Object라고 한다.

 

객체(Object)

       -데이터 + 프로시저

       -독자성(Identity) : 객체는 다른 객체와 구분(객체 와 객체를 구분을 할수 있는것은 그 객체가 갖는 데이타로 구분가능)

         객체는 구별하기 위해 유일한 것이 되야 한다.

       -상태(State) : 객체의 상태(프로퍼티)

       -행동(Behavior) : 객체의 행동(메서드)

 

캡슐화(Encapsulation)

 1. 케이스로 감싸는 작업

 2. 최소한의 외부에 노출되야 하는 부분을 오픈

 

 

 -내부 정보 은닉화

       -외부에서 객체 내부의 데이터를 함부로 접근 불가

       -객체 내부를 몰라도 객체 사용 가능

       -인터페이스(외부와 내부를 연결시켜주는 통로)

       -모듈화

 

객체 vs 클래스

       -클래스는 객체의 설계도

        -객체(붕어빵) vs 클래스 (붕어빵틀)

하나의 클래스를 만들면 여러 객체들을 만들것이다.

 

클래스 vs 인스턴스

       -실제 구현화된 클래스의 객체

 

 

클래스(Class)

        - 붕어빵틀

        - 객체를 생성하기 위한 용도(설계도, )

        - 1. 데이터 집합 2. 기능 집합 3. 데이터+기능 집합

        - 코드의 집합

 

선언방법

 - class 클래스명

{

       클래스 멤버

}

 

클래스 멤버

 - 클래스를 구성하는 요소

 - 필드(Field) : 필드, 멤버변수 -> 실제 객체가 가지는 데이터

 - 메서드(Method) : 객체의 행동

 - 프로퍼티(Property)

 - 상수(Constant)

 - 이벤트(Event)

 - 연산자(Operator)

 

C# 파일 하나당 클래스 1개를 선언

 

구조체는 값형 클래스는 참조형이다주소값을 저장할수 있는 변수만 생긴다. 공간은 아직 생기지 않은 상태이다.

변수를 값을 대입할때 메모리가 생성 된다.

 

인스턴스 : 객체를 생성후 변수를 할당했을때

 

 using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Test

{

       class Test02

       {

             static void Main(string[] args)

             {

                    M1();              

                    //M2();

                    //M3();

                    //M4();

 

                    //코드의 재사용

                    /*

                    Test t = new Test();

                    t.n = 10;

                    t.Print();

 

                    TestDll.UserTest test = new TestDll.UserTest();

                    test.msg = "저는요 Test Dll 이라는 녀석에서 왔답니다 굉장하죠?";

                    Console.WriteLine(test.msg);

                     * */

             }

 

            

 

             private static void M1()

             {

                    int n = 10;

                    Size s1 = new Size();

 

                    //클래스 객체의 멤버 변수

                    s1.width = 10;

                    s1.height = 30;

             }

 

             private static void M2()

             {

                    //1. 자료형으로서의 클래스 사용

                    Point p1 = new Point();

                    p1.x = 100;

                    p1.y = 200;

 

                    Console.WriteLine("x좌표 : {0} y좌표{1}", p1.x, p1.y);

             }

 

 

 

private static void M3()

             {

                    //2. 기능의 집합으로서 클래스 선언

                    //필요없다 메모리가아닌 기능을 구현 한것이기 때문에 메모리가 할당되지 않는다.

                    //UserMath um1 = new UserMath();

 

                    //정적 메서드

                    Test02.UserMath.Plus(5,6);

                    Test02.UserMath.Minus(5, 6);

 

             }

 



private static void M4()

             {

                    Student s1 = new Student();

                    s1.name = "홍길동";

                    s1.age = "29";

                    s1.weight = "70";

                    s1.height = "180";

                    s1.Hello();

             }

 


//1. 데이터의 집합으로서 클래스 선언 -> 자료형의 의미

             // -> 좌표 하나 기억 -> 좌표 자료형 -> x, y

             class Point

             {

                    public int x;

                    public int y;

             }

 

             class Size

             {

                    //클래스 멤버

                    public int width;

                    public int height;

 

             }

 

             //2. 기능의 집합으로 클래스 선언

             class UserMath

             {

                    public static void Plus(int a, int b)

                    {

                           Console.WriteLine(a + b);

                    }

 

                    public static void Minus(int a, int b)

                    {

                           Console.WriteLine(a - b);

                    }

             }

 

             //3. 데이터 + 기능

             class Student

             {

                    public string name;

                    public string age;

                    public string weight;

                    public string height;

 

                    //내부 데이터와 관계된 행동 100%센트는 아지만 대부분 그렇다.

                    public void Hello()

                    {

                           Console.WriteLine("hi~~~ 나는 {0}이야{1}{2}{3}", name,age, weight, height);                  

                    }

             }

       }

}

 

 

클래스 라이브러리 프로젝트

 

- 클래스 라이브러리 -> *.dll 생성

- Main() 메서드를 가질수 없다.

콘솔 -> *.exe 파일을 만든다.

라이브러리 -> *.dll 파일을 만든다.(단독실행이 불가능)

dll 참조 : dll안의 모든 코드를 사용하겠습니다.

 

작업할때 나누기 위해서 기능별로 나눌떄 dll을 생성한다.

 

콘솔 : 메인, 입력, 출력, 저장

 


 


 


 




반응형