객체 지향 프로그래밍(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);
}
{
//2. 기능의 집합으로서 클래스 선언
//필요없다 메모리가아닌 기능을 구현 한것이기 때문에 메모리가 할당되지 않는다.
//UserMath um1 = new
UserMath();
//정적 메서드
Test02.UserMath.Plus(5,6);
Test02.UserMath.Minus(5, 6);
}
{
Student s1 = new
Student();
s1.name = "홍길동";
s1.age = "29";
s1.weight = "70";
s1.height = "180";
s1.Hello();
}
// -> 좌표 하나 기억 -> 좌표 자료형 -> 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을 생성한다.
콘솔 : 메인, 입력, 출력, 저장