성장일기

05/28 스마트팩토리 교육- 본문

프로그래밍언어/C#

05/28 스마트팩토리 교육-

김몽몽 2020. 5. 28. 15:28

메인의 4가지 모양, 진입점/보통 대부분의 언어는 1개

 

메모장에 코드를 쓰고 확장자를 cs로 바꿔주면 c#파일로 바뀜

csc.exe는 컴파일러로 이름을 바꾸면 오류가 뜸

비주얼 스튜디오는 IDE

(통합개발환경 IDE: Integrated Development Environment)

원래 도스창에서 명령어를 넣어 컴파일을 하고 실행 해줘야하지만 vs가 지원함

 

○명령행 컴파일러

기계어로 바꿔서 실행파일을 만들어줌

○배열

ar은 int배열 10개를 참조한다

int ar[10]; - 기본형

new int[2,3] - 2차원배열

 

배열의 중첩은 잘 쓰지않음

 

○클래스

기존프로그램이 현실반영이 어려워서 현실반영을 위한 객체지향프로그램이 나옴

객체의 특징을 쭉 적어보는 것,서술(사양서)-class = 틀

붕어빵 틀=클래스, 붕어빵 =객체

클래스를 정의해놓으면 객체를 대량생산해낼 수 있음

class 이름

{

}

정보는 행위정보와 상태정보를 만든다.

행위정보는 메소드로, 상태는 변수로표현한다

 

º유효범위

프로그래밍에서 특정이름(변수명 등)이 영향을 미치는 영역

중괄호로 영역표시

유효범위 안에서 같은 변수명은 한번만 쓸 수 있다.

 

클래스변수는 클래스안에 있는 모든곳에서 쓸 수 있다, 클래스 메소드들은 클래스 변수들을 공유

 

참고)

º

string,배열, 클래스, object 모두 참조형식

값을 스택에 저장-값형식, 힙에 저장-참조형식

초기화되지 않은 모든 참조형 변수는 null 값을 가진다

57p

int n1=5;

int n2=n1;

둘다 5를 출력하지만 값형인 int형에서는 같은 영역을 사용하는것이 아닌 각각 고유영역이 있다

int n2는 5를 복사해서 고유영역을 가지는 것이다

string txt1="C#";

string txt2=txt1;

둘다 C#을 출력하지만 참조형인 string에서는 C#의 주소를 전달하는 것이다

 

º

string name = "C#";

name = null;

null을 넣으면 객체가 생성되어있지만 더이상 C#을 가리키지않음

가비지 컬렉션

C++의 경우 가비지를 모아둠->메모리문제 발생(하지만 안정성 높음)

C#이나 Java는 알아서 처리함(가비지 컬렉션)

 

ºpublic 접근속성

외부에 보여주기위한 예약어

public을 적지 않으면 노출이안됌(접근제어)-언어에 따라 다를 수 있음(C는 다보여줌)

 

class안에 속해있는 변수들->멤버 변수(member variable) or (필드,field)

속성은 C#코드에서 필드로 표현되고, 행위는 메서드로 표현된다

 

타입(class) = 속성(field) + 행위(method)

 

º

메서드=서브루틴(subroutine),프로시저(procedure)

하위코드를 뜻함

 

○생성자

특별한 용도의 메서드, 객체가 "생성"되는 시점에 해당 메서드가 자동으로 호출

생성자 없이는 컴파일되지 않음-> 생성자를 명시적으로 정의하지 않으면 C#컴파일러가

일부러 빈 생성자를 클래스에 집어넣고 컴파일한다.

 

º일반 메소드의 경우

  반환타입 메소드이름(매개변수)

   {

   }

 

º생성자 메소드의 경우

 메소드or 클래스이름(매개변수) -반환타입이 없다

    {

    }

 

 

 

º소스

class Car
{
public int _iSpeed;

public Car(int iSpeed) 생성자에 인자를 넣음
{
_iSpeed = iSpeed;
Console.WriteLine("Car 클래스 생성됨");
}

public void Acc()
{
_iSpeed = _iSpeed + 10;
}

public void DeAcc()
{
_iSpeed = _iSpeed - 10;
}

public void Status()
{
Console.WriteLine("현재 속도는 {0}Km입니다.", _iSpeed);
}
}
static void Main(string[] args)
{
Console.WriteLine("1=================");
Car MyCar = new Car(3);
MyCar.Status();
Console.WriteLine("2=================");
Car MyCar1 = new Car(100);
MyCar1.Status();
Console.WriteLine("3=================");
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20200528_002
{
class Program
{
class Car
{
public int _iSpeed;

public Car(int iSpeed)
{
_iSpeed = iSpeed;
Console.WriteLine("Car 클래스 생성됨");
}

public void Acc()
{
_iSpeed = _iSpeed + 10;
}

public void DeAcc()
{
_iSpeed = _iSpeed - 10;
}

public void Status()
{
Console.WriteLine("현재 속도는 {0}Km입니다.", _iSpeed);
}
}
static void Main(string[] args)
{
Console.WriteLine("1=================");
Car MyCar = new Car(3);
MyCar.Status();
Console.WriteLine("2=================");
Car MyCar1 = new Car(100);
MyCar1.Status();
Console.WriteLine("3=================");
}
}
}

 

인자가 하나도 없는 생성자-default 생성자

주의) 명시적으로 생성자를 하나라도 정의한경우 컴파일러는 기본 생성자를 추가하지 않음

인자의 개수나 타입이 다르면 함수이름이 겹치는것이 허용된다-메소드의 중복

(method overloading)

overloading