728x90

1. 테이블 생성 구문 형식

CREATE TABLE 테이블_이름 (
    컬럼명1 DATATYPE [DEFAULT 값],
    컬럼명2 DATATYPE [DEFAULT 값],
    컬럼명3 DATATYPE [DEFAULT 값]
);

테이블 생성 규칙

  • 테이블 이름: 적절한 이름을 사용하고 단수형 권장.
  • 컬럼 이름: 중복 불가, 데이터베이스 내에서 일관성 유지.
  • 데이터 유형 지정: 모든 컬럼에 반드시 데이터 유형 지정.
  • 명명 규칙:
    • 문자(A-Z, a-z), 숫자(0-9), _, $, #만 허용.
    • 예약어 사용 금지.
  • SQL 문법: 대소문자 구분하지 않음, 문장 끝에 ; 사용.

2. CREATE TABLE 예제

CREATE TABLE PLAYER (
    PLAYER_ID CHAR(7) NOT NULL,
    PLAYER_NAME VARCHAR2(20) NOT NULL,
    TEAM_ID CHAR(3) NOT NULL,
    E_PLAYER_NAME VARCHAR2(40),
    NICKNAME VARCHAR2(30),
    JOIN_YYYY CHAR(4),
    POSITION VARCHAR2(10),
    BACK_NO NUMBER(2),
    NATION VARCHAR2(20),
    BIRTH_DATE DATE,
    SOLAR CHAR(1),
    HEIGHT NUMBER(3),
    WEIGHT NUMBER(3),

    CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID),
    CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID)
);

설명

  • DATE 유형: 별도 크기 지정하지 않음.
  • 제약 조건:
    • NOT NULL: 필수 입력.
    • PRIMARY KEY: 고유 식별 키.
    • FOREIGN KEY: 다른 테이블의 키를 참조.
  • 제약 조건 정의 위치:
    • 컬럼 레벨: 각 컬럼의 정의에 직접 추가.
    • 테이블 레벨: 테이블 생성 마지막에 선언.

3. 제약조건 (CONSTRAINT)

제약조건 설명

구분설명

PRIMARY KEY - 기본키: 행 데이터를 고유하게 식별.
- NULL 입력 불가.
- 자동으로 UNIQUE 인덱스 생성.
UNIQUE KEY - 고유키: 행 데이터를 고유하게 식별.
- NULL 값 허용.
NOT NULL - NULL 값 입력 금지.
- 필수 입력 컬럼.
CHECK - 값의 범위 제한.
- 논리식 평가(TRUE or FALSE).
FOREIGN KEY - 다른 테이블과의 관계를 정의.
- 참조 무결성 제약 옵션 제공.

4. 생성된 테이블 구조 확인 (DESC)

Oracle:

DESC PLAYER;

MySQL:

DESCRIBE PLAYER;

5. SELECT 문을 통한 테이블 생성

SELECT를 사용한 테이블 복제

CREATE TABLE TEMPPLAYER
    AS SELECT * FROM PLAYER;

특징

  • 기존 테이블에서 컬럼과 데이터를 복제.
  • 제약 조건:
    • NOT NULL: 유지.
    • PRIMARY KEY, FOREIGN KEY, CHECK: 적용되지 않음.
  • 제약 조건 추가:
     
ALTER TABLE TEMPPLAYER
ADD CONSTRAINT TEMPPLAYER_PK PRIMARY KEY (PLAYER_ID);

6. 실습 예제

테이블 생성

CREATE TABLE TEAM (
    TEAM_ID CHAR(3) PRIMARY KEY,
    TEAM_NAME VARCHAR2(30) NOT NULL
);

CREATE TABLE PLAYER (
    PLAYER_ID CHAR(7) NOT NULL,
    PLAYER_NAME VARCHAR2(20) NOT NULL,
    TEAM_ID CHAR(3) NOT NULL,
    POSITION VARCHAR2(10),
    BIRTH_DATE DATE,

    CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID),
    CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID)
);

테이블 구조 확인

DESC PLAYER;

데이터 삽입

INSERT INTO TEAM (TEAM_ID, TEAM_NAME) VALUES ('001', 'Team A');
INSERT INTO PLAYER (PLAYER_ID, PLAYER_NAME, TEAM_ID, POSITION, BIRTH_DATE)
VALUES ('P001', 'John Doe', '001', 'Forward', TO_DATE('1990-01-01', 'YYYY-MM-DD'));

데이터 조회

SELECT * FROM PLAYER;
728x90
728x90

1. 메소드란?

  • 정의: 특정 작업을 수행하는 일련의 코드를 하나의 이름으로 묶은 것.
  • 다양한 언어에서의 표현:
    • C++: 함수 (Function)
    • 파스칼: 프로시저 (Procedure)
    • 비주얼 베이직: 서브 루틴 (Subroutine)

2. 메소드 선언 형식

한정자 반환형식 메소드이름(매개변수)
  • 한정자: 메소드의 속성 정의 (예: public, static).
  • 반환형식: 메소드가 반환하는 데이터의 형식.
  • 메소드 이름: 호출 시 사용할 이름.
  • 매개변수: 메소드 실행에 필요한 입력값.

예시:

public int Add(int a, int b)
{
    return a + b;
}

3. return 키워드

  • 프로그램의 흐름을 호출자로 되돌립니다.
  • 반환형식이 존재할 경우 반환값과 반환형식이 일치해야 합니다.

예시 (재귀 호출):

public int Fibonacci(int n)
{
    if (n < 2)
        return n;
    return Fibonacci(n - 1) + Fibonacci(n - 2);
}

4. 매개변수 전달 방식

a. 값에 의한 전달

  • 매개변수로 데이터를 복사하여 전달.
public void Swap(int a, int b)
{
    int temp = a;
    a = b;
    b = temp;
}

int x = 3, y = 4;
Swap(x, y);
Console.WriteLine($"{x}, {y}"); // 결과: 3, 4 (값이 변경되지 않음)

b. 참조에 의한 전달 (ref)

  • 매개변수를 참조하여 원본 데이터를 변경.
public void Swap(ref int a, ref int b)
{
    int temp = a;
    a = b;
    b = temp;
}

int x = 3, y = 4;
Swap(ref x, ref y);
Console.WriteLine($"{x}, {y}"); // 결과: 4, 3

c. 출력 전용 매개변수 (out)

  • 메소드에서 결과를 출력하는 용도로 사용.
public void Divide(int a, int b, out int quotient, out int remainder)
{
    quotient = a / b;
    remainder = a % b;
}

int quotient, remainder;
Divide(10, 3, out quotient, out remainder);
Console.WriteLine($"Quotient: {quotient}, Remainder: {remainder}");

5. 메소드 오버로딩

  • 같은 이름의 메소드를 매개변수의 타입, 개수로 구분하여 여러 개 정의.
public int Add(int a, int b)
{
    return a + b;
}

public double Add(double a, double b)
{
    return a + b;
}​

6. 가변 길이 매개변수 (params)

  • 개수가 유동적인 매개변수를 받을 때 사용.
public int Sum(params int[] numbers)
{
    int sum = 0;
    foreach (int num in numbers)
        sum += num;
    return sum;
}

int result = Sum(1, 2, 3, 4);
Console.WriteLine(result); // 출력: 10

7. 명명된 매개변수

  • 매개변수 이름을 명시적으로 지정하여 호출.
public void PrintInfo(string name, int age)
{
    Console.WriteLine($"Name: {name}, Age: {age}");
}

PrintInfo(age: 30, name: "Alice");

8. 선택적 매개변수

  • 기본값을 제공하여 필요에 따라 값을 전달하지 않을 수 있음.
public void PrintMessage(string message = "Hello, World!")
{
    Console.WriteLine(message);
}

PrintMessage(); // 출력: Hello, World!
PrintMessage("Hi!"); // 출력: Hi!

9. 로컬 함수

  • 메소드 내부에 정의된 함수로, 해당 메소드에서만 사용 가능.
public void Calculate()
{
    int counter = 0;

    void LocalFunction(int a, int b)
    {
        counter++;
        Console.WriteLine($"{a} + {b} = {a + b}, Counter: {counter}");
    }

    LocalFunction(1, 2);
    LocalFunction(3, 4);
}

정리

  • 메소드는 코드를 재사용하고 모듈화하기 위한 핵심 도구.
  • 다양한 매개변수 전달 방식 (ref, out, params)과 유연한 호출 방식을 제공.
  • 로컬 함수와 메소드 오버로딩으로 코드의 가독성과 효율성을 높일 수 있음.
728x90
728x90

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

  • 정의: 코드 내의 모든 것을 객체로 표현하는 프로그래밍 패러다임.
  • 객체(Object): 세상의 모든 것을 지칭하며, 속성과 기능으로 이루어집니다.
    • 속성: 데이터를 통해 표현 (예: 다리, 귀).
    • 기능: 메소드를 통해 표현 (예: 뛰기, 듣기).

2. 클래스(Class)

  • 정의: 객체를 생성하기 위한 청사진(모형).
  • 예시:
class Cat
{
    public string Color; // 데이터: 속성
    public void Meow()   // 메소드: 기능
    {
        Console.WriteLine($"{Color} 고양이: 야옹");
    }
}

Cat kitty = new Cat();  // Cat 클래스의 객체 생성

3. 클래스와 객체의 관계

  • 클래스는 복합 데이터 형식의 참조 형식입니다.
  • **객체(Object)**는 클래스의 인스턴스(실체)입니다.
    Cat kitty = new Cat();
    • new: 생성자를 호출해 객체를 힙(Heap)에 생성.
    • kitty: 생성된 객체의 참조를 저장.

4. 생성자(Constructor)와 종료자(Destructor)

a. 생성자

  • 클래스와 같은 이름을 가지며 객체 생성 시 호출됩니다.
  • 객체를 초기화하기 위한 용도로 사용됩니다.
  • 예시:
class Cat
{
    public string Color;

    // 생성자
    public Cat(string color)
    {
        Color = color;
    }

    public void Meow()
    {
        Console.WriteLine($"{Color} 고양이: 야옹");
    }
}

Cat kitty = new Cat("검은색"); // 생성자 호출

b. 종료자

  • 객체가 소멸될 때 호출되는 특별한 메소드.
  • 매개변수나 한정자가 없으며 오버로딩 불가능.
  • CLR의 가비지 컬렉터가 객체의 소멸 시점을 판단해 호출.
  • 예시:
class Cat
{
    ~Cat()
    {
        Console.WriteLine("Cat 객체가 소멸되었습니다.");
    }
}

5. 정적 필드와 메소드 (Static)

  • static 한정자를 사용해 클래스 자체에 소속되는 필드와 메소드.
  • 특징:
    • 클래스의 모든 인스턴스가 공유.
    • 객체를 생성하지 않고 호출 가능.
  • 예시:
class Counter
{
    public static int Count = 0;

    public static void Increment()
    {
        Count++;
    }
}

Counter.Increment(); // 객체 없이 호출
Console.WriteLine(Counter.Count); // 출력: 1

6. 클래스의 기본 구조

class ClassName
{
    // 필드 (Field): 데이터 저장
    public string FieldName;

    // 생성자 (Constructor): 객체 초기화
    public ClassName(string value)
    {
        FieldName = value;
    }

    // 메소드 (Method): 동작 정의
    public void MethodName()
    {
        Console.WriteLine($"Field: {FieldName}");
    }

    // 정적 메소드 (Static Method)
    public static void StaticMethod()
    {
        Console.WriteLine("This is a static method.");
    }
}

정리

  • 클래스는 객체를 생성하기 위한 청사진으로, 속성(필드)과 기능(메소드)을 포함.
  • 객체는 클래스의 인스턴스로, new 키워드를 통해 생성.
  • 생성자는 객체를 초기화하고, 종료자는 객체 소멸 시 호출.
  • 정적 필드/메소드는 클래스 자체에 속하며, 모든 인스턴스가 공유 가능.
728x90
728x90

1. 객체와 다형성

  • 다형성(Polymorphism): 객체가 여러 형태를 가질 수 있는 성질.
    • 하위 형식 다형성: 파생 클래스가 기반 클래스의 메소드를 재정의하여 다양한 동작을 실행.

a. 예제: 다형성

class ArmorSuite
{
    public virtual void Initialize()
    {
        Console.WriteLine("ArmorSuite: 초기화");
    }
}

class IronMan : ArmorSuite
{
    public override void Initialize()
    {
        base.Initialize(); // 기반 클래스 메소드 호출
        Console.WriteLine("IronMan: 초기화");
    }
}

2. 메소드 오버라이딩

  • 조건:
    • 메소드는 virtual 키워드로 선언되어야 함.
    • override 키워드로 재정의.
    • private 메소드는 오버라이딩 불가.

a. 예제

class BaseClass
{
    public virtual void MyMethod()
    {
        Console.WriteLine("BaseClass: MyMethod");
    }
}

class DerivedClass : BaseClass
{
    public override void MyMethod()
    {
        Console.WriteLine("DerivedClass: MyMethod");
    }
}

b. 메소드 감추기 (new 키워드)

  • 기반 클래스의 메소드를 감추고 파생 클래스 메소드만 표시.
class BaseClass
{
    public void MyMethod()
    {
        Console.WriteLine("BaseClass: MyMethod");
    }
}

class DerivedClass : BaseClass
{
    public new void MyMethod()
    {
        Console.WriteLine("DerivedClass: MyMethod");
    }
}

c. 메소드 봉인 (sealed 키워드)

  • 오버라이딩된 메소드의 추가 재정의를 금지.
class BaseClass
{
    public virtual void MyMethod()
    {
        Console.WriteLine("BaseClass: MyMethod");
    }
}

class DerivedClass : BaseClass
{
    public sealed override void MyMethod()
    {
        Console.WriteLine("DerivedClass: MyMethod");
    }
}

3. 중첩 클래스

  • 클래스 안에 선언된 클래스.
  • 외부 클래스의 모든 멤버(심지어 private)에 접근 가능.

예제

class OuterClass
{
    private int number = 42;

    class NestedClass
    {
        public void DisplayNumber(OuterClass outer)
        {
            Console.WriteLine($"Number: {outer.number}");
        }
    }
}

4. 분할 클래스

  • partial 키워드를 사용하여 여러 파일에 걸쳐 하나의 클래스를 정의.
  • 코드 관리 및 분할 작업에 유용.

예제

partial class MyClass
{
    public void Method1()
    {
        Console.WriteLine("Method1");
    }
}

partial class MyClass
{
    public void Method2()
    {
        Console.WriteLine("Method2");
    }
}

5. 확장 메소드

  • 기존 클래스의 기능을 확장하는 메소드.
  • 정적 클래스와 this 키워드를 활용.

예제

public static class StringExtensions
{
    public static string ToUpperFirst(this string input)
    {
        if (string.IsNullOrEmpty(input)) return input;
        return char.ToUpper(input[0]) + input.Substring(1);
    }
}

// 사용
string name = "john";
Console.WriteLine(name.ToUpperFirst()); // 출력: John

6. 클래스 vs 구조체

특징클래스구조체

키워드 class struct
형식 참조 형식 값 형식
복사 방식 얕은 복사 깊은 복사
생성 방법 new 키워드 필요 선언만으로 생성 가능
생성자 매개변수 없는 생성자 가능 불가능
상속 가능 불가능

예제

struct Point
{
    public int X;
    public int Y;

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
}

Point p1 = new Point(10, 20);
Console.WriteLine($"X: {p1.X}, Y: {p1.Y}");

7. 튜플 (Tuple)

  • 여러 필드를 담을 수 있는 구조체.
  • 임시적으로 복합 데이터를 다룰 때 사용.

a. 명명되지 않은 튜플

var tuple = (123, 789);
Console.WriteLine(tuple.Item1); // 출력: 123
Console.WriteLine(tuple.Item2); // 출력: 789

b. 명명된 튜플

var person = (Name: "John", Age: 30);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");

정리

  • 객체는 클래스의 인스턴스이며, 다형성, 오버라이딩, 중첩 클래스, 확장 메소드 등을 통해 강력한 유연성을 제공합니다.
  • 구조체는 값 형식으로 메모리 관리 및 간단한 데이터 저장에 유용.
  • 튜플은 임시적인 복합 데이터를 간단히 표현.
728x90
728x90

1. 접근 한정자 (Access Modifiers)

C#의 접근 한정자는 클래스, 메소드, 변수 등의 멤버에 대한 접근 범위를 지정합니다.


a. public

  • 정의:
    멤버가 동일한 어셈블리의 모든 코드와 다른 어셈블리를 참조하는 코드에서도 접근 가능.
  • 예시:
public class Example
{
    public int Value = 10;

    public void Display()
    {
        Console.WriteLine($"Value: {Value}");
    }
}

b. private

  • 정의:
    멤버가 선언된 클래스 또는 구조체 내부에서만 접근 가능.
  • 예시:
class Example
{
    private int Value = 10;

    private void Display()
    {
        Console.WriteLine($"Value: {Value}");
    }
}

c. protected

  • 정의:
    멤버가 같은 클래스 및 파생된 클래스에서만 접근 가능.
  • 예시:
class Base
{
    protected int Value = 10;
}

class Derived : Base
{
    public void ShowValue()
    {
        Console.WriteLine($"Value: {Value}");
    }
}

d. internal

  • 정의:
    멤버가 동일한 어셈블리 내에서 접근 가능하며, 다른 어셈블리에서는 불가능.
  • 예시:
     
internal class Example
{
    internal int Value = 10;
}

e. protected internal

  • 정의:
    멤버가 선언된 어셈블리의 모든 코드와 다른 어셈블리의 파생 클래스에서 접근 가능.
  • 예시:
public class Base
{
    protected internal int Value = 10;
}

f. private internal

  • 정의:
    멤버가 선언된 어셈블리 내부의 코드 및 해당 클래스에서 파생된 클래스 내에서만 접근 가능.
  • 예시:
class Example
{
    private protected int Value = 10;
}

2. 메소드 반환 형식

a. int 반환 형식

  • 반환값이 int 타입이어야 함.
  • 예시:
public int Add(int a, int b)
{
    return a + b;
}

b. string 반환 형식

  • 반환값이 string 타입이어야 함.
  • 예시:
public string Greet(string name)
{
    return $"Hello, {name}!";
}

c. void 반환 형식

  • 반환값이 없음을 의미.
  • 예시:
public void PrintMessage(string message)
{
    Console.WriteLine(message);
}

3. 예제 코드: 다양한 접근 한정자와 반환 형식

public class Example
{
    // public 멤버
    public int PublicValue = 10;

    // private 멤버
    private int PrivateValue = 20;

    // protected 멤버
    protected int ProtectedValue = 30;

    // internal 멤버
    internal int InternalValue = 40;

    // protected internal 멤버
    protected internal int ProtectedInternalValue = 50;

    // private protected 멤버
    private protected int PrivateProtectedValue = 60;

    // 메소드 반환 형식 예제
    public int Add(int a, int b) => a + b;
    public string Greet(string name) => $"Hello, {name}!";
    public void PrintMessage(string message) => Console.WriteLine(message);
}

정리

  • 접근 한정자:
    • public: 모든 코드에서 접근 가능.
    • private: 동일 클래스 내에서만 접근 가능.
    • protected: 동일 클래스 및 파생 클래스에서 접근 가능.
    • internal: 동일 어셈블리에서만 접근 가능.
    • protected internal: 어셈블리 내 모든 코드와 다른 어셈블리의 파생 클래스에서 접근 가능.
    • private internal: 어셈블리 및 파생 클래스에서만 접근 가능.
  • 메소드 반환 형식:
    • int, string 등의 반환값 타입에 맞는 값을 반환해야 하며, void는 반환값이 없음.
728x90
728x90

1. RS-232 시리얼 통신 기본 개념

  • 시리얼 인터페이스: 데이터를 한 번에 한 비트씩 직렬로 전송.
  • 패러럴 인터페이스: 데이터를 여러 비트씩 병렬로 전송.
    • 장단점 비교:
      • 시리얼: I/O 라인을 적게 사용, 장거리 전송에 적합.
      • 패러럴: 빠른 전송 속도, 라인 소모가 많음.

2. 주요 신호 정의

신호설명

DCD 데이터 캐리어 검출, 상대 모뎀 연결 상태 알림.
RD 수신 데이터, 상대방 송신 데이터와 연결.
TD 송신 데이터, 상대방 수신 데이터와 연결.
DTR 데이터 단말기 준비 상태. 컴퓨터가 송수신 준비 완료 알림.
DSR 데이터 세트 준비 상태. 모뎀이 송수신 준비 완료 알림.
RTS 송신 요청. 컴퓨터가 모뎀에 송신 준비 상태 물음.
CTS 송신 허가. 모뎀이 송신 가능 상태임을 컴퓨터에 알림.
RI 링 신호. 상대방으로부터 호출 상태를 알림.

3. 데이터 송수신 과정

  1. 장치 상태 확인:
    • DTR (컴퓨터 준비) → DSR (모뎀 준비).
  2. 송신 준비 확인:
    • RTS (컴퓨터가 송신 준비 요청) → CTS (모뎀이 송신 가능 응답).
  3. 데이터 송수신:
    • TXD (컴퓨터가 데이터 전송) → RXD (모뎀이 데이터 수신).

4. 비동기 및 동기식 통신

  • 동기식:
    • 송신자와 수신자의 동기화를 위해 별도의 클럭 신호 사용.
  • 비동기식:
    • 시작 비트와 정지 비트를 사용하여 동기화.

5. 양방향 통신 방식

유형설명예시

전이중 쌍방이 동시에 송수신 가능. 전화 통신
반이중 한쪽이 송신 중이면 다른 쪽은 대기. 무전기 (푸시토크)


6. 주요 설정

  1. BaudRate:
    • 데이터 전송 속도, 단위: bps (bits per second).
      예: 9600bps는 초당 9600비트 전송.
  2. DataBits:
    • 데이터 크기, 일반적으로 8비트.
  3. Parity:
    • 데이터의 정확성을 확인하는 방법 (홀수, 짝수, 없음 등).
  4. StopBits:
    • 데이터 패킷의 끝을 표시하는 비트 개수.


7. C#에서 시리얼 통신 구현

a. 포트 열기 및 닫기

SerialPort SP = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);

SP.Open(); // 포트 열기
if (SP.IsOpen)
{
    Console.WriteLine("포트가 열렸습니다.");
}
SP.Close(); // 포트 닫기

b. 사용 가능한 포트 탐색

foreach (string comport in SerialPort.GetPortNames())
{
    Console.WriteLine($"사용 가능한 포트: {comport}");
}

c. 데이터 송수신

// 데이터 송신
SP.WriteLine("Hello, RS-232");

// 데이터 수신
string receivedData = SP.ReadLine();
Console.WriteLine($"수신된 데이터: {receivedData}");

d. DataReceived 이벤트 처리

SP.DataReceived += new SerialDataReceivedEventHandler(SP_DataReceived);

private void SP_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    this.Invoke(new Action(() =>
    {
        string receivedData = SP.ReadExisting();
        Console.WriteLine($"수신된 데이터: {receivedData}");
    }));
}

8. RS-232와 TTL 비교

항목 TTL RS-232
전압 범위 0V~3.3V 또는 5V -13V~13V
시작 비트 0V 양전압
정지 비트 전압 레벨 (3.3V, 5V 등) 음전압

정리

  1. RS-232 시리얼 통신은 단순한 하드웨어 구현과 긴 전송 거리가 장점입니다.
  2. C#의 SerialPort 클래스를 활용해 손쉽게 시리얼 통신을 구현할 수 있습니다.
  3. 데이터 송수신 과정과 설정(속도, 데이터 크기 등)을 정확히 이해하고 적용해야 안정적인 통신이 가능합니다.
728x90
728x90

1. DLL (Dynamic Linked Library)

  • 정의:
    DLL은 Dynamic Linked Library의 약자로, 동적 연결 라이브러리를 의미합니다.
    여러 프로그램에서 공통적으로 사용할 수 있는 함수와 클래스를 모아 놓은 파일입니다.
  • 특징:
    • 프로그램 크기 감소: 공통 코드를 DLL로 분리하여 프로그램 크기를 줄임.
    • 재사용 가능: 여러 프로그램이 동일 DLL을 호출하여 코드 재사용.
    • 시스템 기능 제공: C:\WINDOWS\system32 폴더에 포함된 다양한 시스템 DLL 파일은 윈도우 프로그램에 공통 기능 제공.

a. DLL의 예시

  • 메모장, 그림판 등에서 파일 열기 기능은 윈도우 시스템 DLL을 호출하여 구현됩니다.
  • 예: user32.dll, kernel32.dll 등.

b. DLL의 종류

  • MFC (Microsoft Foundation Classes) 기반 DLL:
    1. 정적으로 MFC에 링크하는 기본 DLL: MFC 라이브러리를 정적으로 링크.
    2. 동적으로 MFC에 링크하는 기본 DLL: 실행 시 MFC 라이브러리를 동적으로 로드.
    3. MFC 확장 DLL: 항상 동적으로 MFC에 링크하며, 다른 MFC 프로그램에서 확장 가능.

c. DLL 로드 방법

  • 동적 로드: LoadLibrary와 GetProcAddress를 사용.
  • 정적 로드: .lib 파일을 사용하여 컴파일 시 DLL을 포함.

d. DLL의 장점

  • 코드의 모듈화: 동일한 함수나 클래스를 여러 프로그램에서 사용할 수 있도록 분리.
  • 유지보수 용이성: DLL 파일만 업데이트하여 여러 프로그램의 기능을 변경.

2. COM (Component Object Model)

  • 정의:
    COM은 마이크로소프트가 개발한 컴포넌트 모델로, 재사용 가능한 소프트웨어 객체를 작성하고 사용하기 위한 기술.
  • 특징:
    • 윈도우 운영체제의 기본 모듈.
    • OLE, ActiveX와 같은 기술의 기반.
    • 언어 독립적: 여러 프로그래밍 언어에서 COM 객체를 호출 가능.

a. COM의 역할

  • OLE (Object Linking and Embedding):
    • COM을 기반으로 한 기술로, 문서 내에서 다른 유형의 데이터를 연결하거나 삽입할 수 있도록 지원.
    • 예: 워드 문서에 엑셀 시트를 삽입.
  • ActiveX:
    • 인터넷 환경에서 OLE와 COM 기술을 확장한 기술.
    • 웹 브라우저 내에서 동작하는 컨트롤과 플러그인.

b. COM의 장점

  • 플랫폼 통합: 다양한 애플리케이션이 동일한 인터페이스로 작업 가능.
  • UI 통합: 사용자가 쉽게 인터페이스와 상호작용 가능.

3. DLL과 COM의 관계

  • DLL은 COM의 그릇 역할:
    • COM 객체는 DLL에 포함되어 배포되는 경우가 많음.
    • 프로그램은 DLL을 통해 COM 객체에 접근 가능.

4. DLL 로드 방법

  • LoadLibrary와 GetProcAddress 사용:
    • 런타임에 DLL을 로드하고 특정 함수에 접근.
     
  • 정적 로드:
    • .lib 파일을 사용해 DLL을 정적으로 링크.
     

 


5. DLL과 COM의 활용 사례

  1. 공통 기능 제공:
    • 운영 체제의 핵심 기능은 DLL로 구현됨. (예: kernel32.dll).
  2. 플러그인 시스템:
    • 소프트웨어 확장성을 위해 플러그인 DLL을 로드.
  3. COM을 통한 컴포넌트 사용:
    • 웹 브라우저에서 ActiveX를 통한 미디어 재생.

정리

  • DLL: 동적 연결 라이브러리로 코드 재사용성과 프로그램 크기 감소에 도움.
  • COM: 재사용 가능한 컴포넌트를 작성 및 호출하기 위한 마이크로소프트의 기술.
  • DLL은 COM을 담는 컨테이너 역할을 하며, 다양한 프로그래밍 환경에서 필수적인 역할을 수행.
728x90
728x90

1. 분기문

  • 정의: 프로그램의 흐름을 조건에 따라 변화시키는 구문.

a. if문

  • 하나의 조건을 평가하여 참/거짓에 따라 실행.
  • 형식:
if (조건식) 
{
	// 조건이 참일 때 실행 
} 
else 
{ 
	// 조건이 거짓일 때 실행 
}
  • else if: 추가적인 조건 평가 가능.
if (조건식1)
{
    // 조건1이 참일 때 실행
}
else if (조건식2)
{
    // 조건2가 참일 때 실행
}
else
{
    // 모든 조건이 거짓일 때 실행
}

b. switch문

  • 하나의 조건식을 다양한 결과와 비교.
  • 형식:
switch (조건식)
{
    case 상수1:
        // 실행 코드
        break;
    case 상수2:
        // 실행 코드
        break;
    default:
        // 모든 조건이 거짓일 때 실행
        break;
}
  • 예시:
object obj = 123;
switch (obj)
{
    case int i:
        Console.WriteLine($"정수: {i}");
        break;
    case string s:
        Console.WriteLine($"문자열: {s}");
        break;
    default:
        Console.WriteLine("알 수 없는 타입");
        break;
}

2. 반복문 (루프문)

  • 정의: 특정 조건을 만족하는 동안 코드 블록을 반복 실행.

a. while문

  • 조건이 참일 때 반복 실행.
while (조건식)
{
    // 반복 실행할 코드
}

b. do-while문

  • 조건에 상관없이 코드 블록을 최소 한 번 실행.
do
{
    // 반복 실행할 코드
}
while (조건식);

c. for문

  • 초기화식, 조건식, 반복식을 사용해 정교하게 제어 가능.
for (초기화식; 조건식; 반복식)
{
    // 반복 실행할 코드
}

d. foreach문

  • 배열이나 컬렉션의 요소를 순회.
  • 형식:
foreach (데이터형식 변수명 in 배열 또는 컬렉션)
{
    // 요소별 실행 코드
}
  • 예시:
int[] numbers = { 1, 2, 3, 4, 5 };

foreach (int num in numbers)
{
    Console.WriteLine(num); // 배열의 각 요소 출력
}

e. 무한 반복

  • for문:
for (;;)
{
    // 무한 반복 코드
}
  • while문:
while (true)
{
    // 무한 반복 코드
}

 


3. 점프문

  • 정의: 실행 흐름을 중단하거나 특정 위치로 이동.

a. break문

  • 현재 실행 중인 반복문 또는 switch문을 중단.
for (int i = 0; i < 10; i++)
{
    if (i == 5) break; // 반복문 중단
    Console.WriteLine(i);
}

b. continue문

  • 현재 반복을 건너뛰고 다음 반복으로 이동.
for (int i = 0; i < 10; i++)
{
    if (i % 2 == 0) continue; // 짝수 건너뛰기
    Console.WriteLine(i);
}

c. goto문

  • 지정된 레이블로 바로 이동.
goto 레이블;

레이블:
    Console.WriteLine("레이블로 이동");

d. return문

  • 메서드를 종료하고 값을 반환.
return 값;

e. throw문

  • 예외를 발생.
throw new Exception("예외 발생");

정리

  • 분기문: if, else, switch를 사용하여 조건에 따른 실행 흐름 제어.
  • 반복문: while, do-while, for, foreach를 활용해 반복 처리.
  • 점프문: break, continue, goto, return, throw를 통해 흐름을 제어.
728x90
728x90

1. 랜 케이블의 종류

랜 케이블은 차폐(Shielding) 여부와 구조에 따라 나뉩니다.


a. UTP (Unshielded Twisted Pair)

  • 특징:
    • 쉴드가 없는 케이블로, 2선씩 꼬여 있는 구조.
    • 꼬임은 이더넷 신호의 전자기 유도 간섭을 줄이기 위함.
    • 외부 차폐 없이 전선과 피복만으로 구성.
    • 일반적인 랜 케이블로, 가정용 네트워크에서 널리 사용.
  • 장점:
    • 경제적이고 설치가 용이.
  • 단점:
    • 외부 간섭에 약함.

b. FTP (Foiled Twisted Pair)

  • 특징:
    • 4가닥의 선을 알루미늄 은박으로 감싸 차폐 효과를 제공.
    • S/UTP(Screened UTP)라고도 불림.
    • UTP 대비 외부 간섭 차단 효과가 우수.
  • 사용처:
    • 공장과 같이 전자기 간섭이 많은 환경에서 사용.

c. STP (Shielded Twisted Pair)

  • 특징:
    • 각각의 꼬임쌍이 독립적인 쉴드로 감싸져 있음.
    • 외부에 추가적인 은박 쉴드(S/STP)가 있을 수 있음.
    • 외부 간섭에 가장 강한 성능 제공.
  • 장점:
    • 외부 간섭 및 전기 신호 간섭 차단 효과 최고.
  • 단점:
    • 설치 및 사용이 복잡하며 가격이 높음.
  • 적용:
    • 데이터 센터, 민감한 통신 환경 등.

2. 단선과 연선의 차이

  • 단선:
    • 한 가닥의 구리선.
    • 유연성이 낮고 가격이 저렴.
    • 고정된 환경에서 적합.
  • 연선:
    • 여러 가닥의 얇은 구리선.
    • 유연성이 뛰어나며 변형에 강함.
    • 이동성이 많은 환경에서 적합.

3. 랜 케이블 배열

랜 케이블 배열은 사용 목적에 따라 달라집니다.

a. 다이렉트 랜 케이블 (T568B)

  • 구조:
    • 시작 배열과 끝 배열이 동일.
  • 사용 목적:
    • 서로 다른 기기 간 연결 (예: PC ↔ 스위치).

b. 크로스 랜 케이블 (T568A)

  • 구조:
    • 한쪽은 다이렉트 배열, 다른 쪽은 크로스 배열.
  • 사용 목적:
    • 동일한 기기 간 연결 (예: PC ↔ PC).
  • 황색과 녹색: Tx(송신)와 Rx(수신) 역할을 교차.


4. 각 선의 역할

  • 청색/갈색 선:
    • 기본적으로 데이터 전송에 사용되지 않음.
    • 청색: 전화선으로 사용.
    • 갈색: PoE(Power over Ethernet) 장비에 직류 전원 공급.
  • 2페어 케이블:
    • 청색과 갈색이 없는 랜 케이블.
    • 일반적으로 사용 가능하지만, 기가비트 네트워크에서는 4페어 필요.

5. 랜 케이블 연결 과정

  1. 커넥터 확인: 포트에 맞는 RJ45 커넥터 사용.
  2. 배열 선택: 다이렉트 또는 크로스 배열 확인.
  3. 케이블 제작:
    • UTP 스트리퍼로 피복 제거.
    • 심선을 정렬 후 커넥터에 삽입.
    • 크림핑 도구로 커넥터 고정.

6. 요약

  • UTP, FTP, STP는 각각 외부 간섭 차단 성능에 따라 구분.
  • 다이렉트와 크로스 배열은 연결하려는 기기에 따라 결정.
  • 케이블 제작 시 선의 배열과 목적에 맞는 구성을 이해해야 안정적인 네트워크 구축 가능.
728x90
728x90

1. 산업용 시리얼 통신 기반 프로토콜

시리얼 통신 기반의 PLC 프로토콜은 제조 환경에서 장치 간 데이터를 안정적으로 주고받는 데 사용됩니다.


a. PROFIBUS

  • 특징:
    • 최대 속도: 12Mbps.
    • 최대 126개의 노드 연결 가능.
    • 공정 데이터 및 보조 데이터 전송에 적합.
  • 사용 분야:
    • 제조 및 공정 자동화.

b. CAN 버스

  • 특징:
    • 최대 속도: 1Mbps.
    • 물리 및 데이터 링크 계층 제공.
    • 자동차 및 산업 자동화에 주로 사용.
  • 파생 프로토콜:
    • CANopen: 최대 127개의 노드 지원.
    • DeviceNet: 최대 64개의 노드 지원.

c. Modbus

  • 특징:
    • 최대 속도: 115Kbps.
    • 최대 247개의 노드 연결 가능.
    • 공개된 프로토콜로 로열티 없이 사용 가능.
  • 물리 연결:
    • RS-232 및 RS-485 기반.

d. CC-Link

  • 특징:
    • 최대 속도: 10Mbps.
    • 최대 64개의 노드 연결.
    • 일본 미쓰비시에서 개발된 개방형 네트워크 프로토콜.
  • 물리 연결:
    • RS-485 기반.

2. 산업용 이더넷 통신 프로토콜

산업용 이더넷은 TCP/IP를 기반으로 대기 시간을 줄이고, 결정적 응답성을 제공하는 통신 방식입니다.


a. EtherCAT

  • 특징:
    • Beckhoff에서 개발.
    • 최대 65,535개의 노드 지원.
    • 실시간 이더넷 프로토콜로 낮은 대기 시간 제공.
  • 주요 장점:
    • 하드웨어 기반 처리로 응답시간 극대화.
    • 유연한 네트워크 토폴로지 선택 가능.

b. EtherNet/IP

  • 특징:
    • 응용 계층(Application Layer) 프로토콜.
    • TCP/IP 기반으로 다양한 장치 간 통신 지원.
    • 노드 수 제한 없음.
  • 사용 분야:
    • 공장의 다양한 장치와 네트워크 연결.
  • 한계:
    • 여러 프로토콜 혼용 시 실시간성과 시간결정성 저하.

c. PROFINET

  • 특징:
    • Siemens 주도로 개발.
    • 세 가지 클래스 제공:
      • 클래스 A: 건물 자동화, 사이클 타임 100ms.
      • 클래스 B: 공장 자동화, 사이클 타임 10ms.
      • 클래스 C: 모션 컨트롤, 사이클 타임 1ms 미만.
  • 장점:
    • PROFIBUS와의 원활한 연결 지원.

d. Ethernet POWERLINK

  • 특징:
    • B&R이 개발.
    • IEEE 802.3 기반으로 유연한 네트워크 구성 지원.
    • 낮은 진입장벽과 오픈소스 스택 제공.
  • 사용 사례:
    • PLC 간 통신, 모션 컨트롤 및 I/O 제어.

e. Sercos III

  • 특징:
    • 시리얼 실시간 통신 시스템의 3세대 표준.
    • 사이클 타임: 31.25ms.
    • 데이터 통신 시 대기시간 최소화.
  • 토폴로지:
    • 원형(Ring) 또는 선형(Line).
    • 통신 이중화 지원.

f. CC-Link IE

  • 특징:
    • 최대 120개(컨트롤) 또는 254개(필드) 노드 연결.
    • 미쓰비시 개발, 원형 토폴로지 사용.
  • 장점:
    • 네트워크 이중화 지원.
  • 한계:
    • 노드 수와 네트워크 성능 간 상호 의존성.

g. Modbus/TCP

  • 특징:
    • Modbus의 확장 버전.
    • TCP/IP를 활용해 메시지 전송.
  • 장점:
    • 표준 이더넷 네트워크에서 구현 용이.
  • 한계:
    • 실시간성과 시간결정성 미흡.

3. 프로토콜 비교 요약

프로토콜속도최대 노드 수특징

PROFIBUS 최대 12Mbps 최대 126개 공정 데이터 전송, 디지털 통신 방식.
CAN 버스 최대 1Mbps CANopen: 127개 자동차 및 산업용 자동화 필드버스.
Modbus 최대 115Kbps 최대 247개 단순하고 강력하며 공개된 시리얼 프로토콜.
EtherCAT - 최대 65,535개 빠른 응답시간, 하드웨어 기반 처리.
EtherNet/IP - 제한 없음 TCP/IP 기반 응용 계층 프로토콜.
PROFINET 클래스별 다름 - 클래스 A~C, 실시간성 보장.
Sercos III 31.25ms 511개 서보 드라이브 제어에 최적화.
CC-Link IE - Control: 120개 네트워크 이중화, 원형 토폴로지.
Modbus/TCP - - TCP/IP 기반 확장, 실시간성 부족.

정리

  1. 산업용 시리얼 통신은 안정적인 데이터 전송과 비용 효율성에 강점이 있음.
  2. 산업용 이더넷 통신은 대규모 네트워크 구축과 실시간 데이터 처리가 강점.
  3. 각 프로토콜은 속도, 연결 노드 수, 실시간성 등에서 차이를 보이므로 응용 환경에 적합한 프로토콜을 선택해야 함.
728x90

+ Recent posts