01.  클래스 생성

1)    하나의 파일에 여러 개의 클래스 생성

콘솔 응용 프로그램의 기본 파일 Program.cs namespace 안에 클래스 작성

2)    클래스 내부에 클래스 생성

Program.cs 내부의 Program 클래스 내부에 추가적인 클래스 만들 수 있음

3)    서로 다른 파일에 클래스 생성

원하는 위치에 New Item이나 클래스 추가해 줌

확장자가 cs인 클래스 파일이 만들어 짐

 

02.  클래스 변수

m  인스턴스 변수

n  [인스턴스].[변수 이름]

n  [접근 제한자] [자료형] [이름]

n  인스턴스 생성할 때 원하는 변수를 원하는 값으로 초기화 할 수 있음!!!!!

Class Product

{

string name;

int price;

}

Product prdtA = new Product() {name = “감자”, price = 2000};

Product prdtB = new Product() {name = “고구마”, price = 3000};

 

m  클래스 변수

n  인스턴스 생성 없이 클래스 이름으로 바로 사용할 수 있는 변수와 메서드

n  static 키워드 사용

[접근 제어자] static [자료형] [이름]

 

'C# > 이론' 카테고리의 다른 글

[C#][이론] 조건문과 반복문 활용  (0) 2020.08.04
[C#][이론] 변수와 자료형  (0) 2020.07.31
[C#][이론] C# 플랫폼과 프로그래밍 언어  (0) 2020.07.31

11 다형성

다형성

○ 다형성 : 여러 가지 형태를 가질 수 있는 능력

한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 프로그램적으로 구현

조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있도록 함

 

○ 같은 타입의 참조변수와 조상타입 참조변수 접근의 차이

둘 다 같은 타입의 인스턴스이지만 참조변수 타입에 따라 사용할 수 있는 멤버 개수가 다름

자손 타입의 참조변수가 접근할 수 있는 멤버가 더 많음

조상 타입으로 접근 시 조상타입의 멤버만 접근 가능

 

○ 자손 타입의 참조변수로 조상 타입 인스턴스 참조는 불가능

존재하지 않는 멤버를 사용하고자 할 가능성이 있어서 불허용

참조변수가 사용할 수 있는 멤버 개수는 인스턴스 멤버 개수보다 같거나 적어야 함

클래스는 상속을 통해 확장만 가능, 축소는 불가능 -> 멤버 개수가 조상이 더 적음

 

참조변수의 형 변환

○ 서로 상속관계에 있는 클래스 사이에서만 형 변환 가능

자손 타입 -> 조상 타입 : 형 변환 생략 (큰 거에서 작은 거로 가므로 가능)

조상 타입 -> 자손 타입 : 형 변환 생략 불가

조상 인스턴스가 자손 -> 조상 으로 변화해서 자손 타입 멤버가 존재는 하지만 접근할 수 없었던 상태일 때 가능

자손 타입으로는 조상을 참조하지 못함!

 

형 변환 수행 전 instanceof연산자 사용

참조 변수가 참조하고 있는 실제 인스턴스의 타입 확인하는 연산자

 

○ 형 변환은 참조변수의 타입을 변환하는 것이지 인스턴스의 타입을 변환하는 것이 아님

참조 변수 형 변환은 인스턴스에 영향 없음

참조하고 있는 인스턴스에서 사용할 수 있는 멤버의 범위가 조절되는 것 뿐!

 

● instanceof 연산자

○ 참조변수 instanceof 타입

○ 연산 결과로 boolean 반환

True : 참조변수가 겁사한 타입으로 형변환 가능 false : 참조변수가 검사한 타입으로 형변환 불가능

값이 null인참조변수에 대해 instanceof연산 수행하면 false 나옴

 

○ 참조변수.getClass().getName() : 참조변수가 가리키고 있는 인스턴스의 클래스 이름을 문자열로 반환

 

참조변수와 인스턴스의 연결

○ 멤버변수가 조상 클래스와 자손 클래스에 중복 정의된 경우

-> 조상 참조타입 사용하면 조상꺼, 자손 참조타입 사용하면 자손꺼 사용

메서드는 오버라이딩 되니까! 노상관

Parent p = new Child();

Child c = new Child();

일 때 p.x, c.x로 서로 같은 이름 변수를 참조한다

○ 구분자 super, this

조상 타입일 때 super.x

자손 타입일 때 this.x

 

매개변수의 다형성

○ 메서드의 매개변수에도 다형성 적용!

○ 부모 타입 참조변수를 메서드의 매개변수로 선언하면 자식 타입을 전부 메서드의 매개변수로 사용할 수 있음

PrintStream 클래스의 print(Object o)메서드도 매개변수가 Object 객체이므로 모든 것을 다 넣으면 다 출력하는 것이지!

 

여러 종류의 객체를 배열로 다루기

○ 조상 타입의 참조변수 배열 사용해 자손 타입 객체들을 한 배열로 묶을 수 있음

○ 묶어서 다루고 싶은 객체들의 상속관계 따져서 공통조상 클래스 타입 참조변수 배열 생성하면 됨

Vector 클래스

내부적으로 Object타입 배열 가지고 있는 클래스(모든 타입 가능하다는 거!)

배열의 크기를 알아서 관리해주기에 저장할 인스턴스의 개수 신경 안쓰임

즉 동적으로 크기가 관리되는 객체배열!

주요 메서드들

□ Vector() : 10개 객체 저장할 수 있는 Vector객체 생성(크기 자동 조절)

□ Boolean add(Object o) : Vector에 객체 추가. 성공 시 true, 실패 시 false 반환

□ Boolean remove(Object o) : Vector에 저장된 객체 제거. 성공 시 true, 실패 시 false 반환

□ Boolean isEmpty(Object o) : Vector가 비어있는지 검사. 빈 거면 true, 안 빈 거면 false 반환

□ Object get(int index) : index에 위치한 객체 반환. 반환 후 형 변환 필요(Object 타입이므로)

□ int size() : Vector에 저장된 객체 개수 반환

 

'JAVA > 이론' 카테고리의 다른 글

[java][이론] 013 예외처리  (0) 2020.08.12
[java][이론] 012 추상클래스와 인터페이스  (0) 2020.08.12
[java][이론] 010 제어자  (0) 2020.07.08
[java][이론] 009 package와 import  (0) 2020.07.06
[java][이론] 008 상속  (0) 2020.07.06
  1. 조건문을 사용한 다양한 응용

  • DateTime.Now. 의 멤버

    Year, Month, Day, Hour, Minute, Second

 

  • String.Contains() 메서드

  • Bool string.Contains(string value)

  • 이문자열 내에서 지정한 System.String 개체가 발생하는지 여부를 나타내는 값 반환

    즉 어떤 문자열에 해당 문자열이 들어 있는지 검색하고 참 거짓 반환

String hello = “Hello”;

If(hello.Contains(“He”))

{

      Console.WriteLine(“true”);

}

 

  • 키입력 구분

  • Console.ReadKey()메서드

  • ConsoleKeyInfo Console.ReadKey(bool intercept)

  • 다음 문자나 사용자가 누른 기능 키를 가져옴. 누른 키는 선택적으로 콘솔 창에 표시 됨

  • ConsoleKeyInfo객체 내부의 KeyChar속성을 사용하면 어떤 키를 입력 하는지 알 수 있음 (char자료형)

  • ConsoleKeyInfo객체 내부의 Key속성은 ConsoleKey객체. 현재 System.ConsoleKeyInfo 개체가 나타내는 콘솔 키를 가져옴

  • ConsoleKey객체는 안에 키보드에 있는 키를 입력받을 수 있음

    ConsoleKeyInfo info = Console.ReadKey(); // 누른 키 읽어 옴

    Info.Key -> 누른 키를 저장한 객체 안에서 key속성을 사용

    그 속성은 ConsoleKey형태로 반환 됨

 

 

02. 배열

  • 배열의 Length속성 / List Count 속성 사용

 

  • IndexOutOfRangeException

  • 배열의 범위를 벗어나는 인덱스로 접근하면 발생하는 예외

  • 음수를 넣어도 발생

 

  • 배열의 초기화

  • 자료형의 기본값으로 공간 채워짐

  • 숫자 자료형 : 0 / 문자열 자료형 : 빈 문자열 / 객체 : (null)

 

  1. 반복문

  • for 반복문으로 한글 전부 출력하기

    for(int i = ‘‘ ; i <= ‘’ ; i++)

    {Console.WriteLine((char) i );} // i char로 형변환 해서 출력

 

  • 외부 요인으로 조건 변경

  • 보통 while반복문이 외부 요인으로 조건이 변경되는 경우 사용

  • 예시_DateTime.Now.Ticks속성 사용하여 조건식의 조건을 외부에서 가지고 옴

  • DateTime.Now.Ticks속성 : 0001 1 1 12:00:00 자정 이후 경과된 100나노초 간격의 수 구함

    while(300000 > DateTime.Now.Ticks){ } // Ticks속성으로 조건문의 조건이 외부에서 들어옴

 

  • for 반복문

    조건 반복자의 수를 반대로 흐르게 하면 됨

 

  • foreach 반복문

  • foreach(자료형 변수 in 컬렉션)

  • 보통 var키워드랑 함께 많이 씀

    foreach(var something in arrayA)

 

  • 코드 조각

  • 자주 사용되는 코드를 정의해서 쉽게 사용할 수 있게 만든 것

  • 자동 완성이 될 때까지 쓴 뒤 tab을 두 번 누르면 자동으로 조각이 완성 됨

  • If,while, for, foreach 다 됨

 

  • Break, continue

  • Break : 가장 가까운 반복문 벗어나기

  • goto : 원하는 반복문 벗어나기

    레이블을 벗어나고 싶은 반복문 뒤에 달아 둠goto 레이블명 을 만나면 레이블로 이동함

  • Continue : 현재 반복을 먼추고 다음 반복을 진행하도록 조건식으로 돌아감

 

  • 문자열 처리

  • 문자열 처리 메서드는 자신을 변경하지 않고 반환 -> 비파괴적 메서드

  1. 대문자화와 소문자화

  • ToUpper() : 문자열 내부의 문자를 모두 대문자로 변경

  • ToLower() : 문자열 내부의 문자를 모두 소문자로 변경

string input = “salad”;

Console.WriteLine(input.ToUpper());

input.ToUpper(); // 자기 자신 변화 XConsole.WriteLine(input); // 따라서 이건 소용 없음

 

  1. 문자열 자르기

  • Split() : 문자열을 특정한 문자 또는 문자열로 자름

  • 매개변수로 자르는 기준(공백, 문자, 기호 등)을 넣어주면 그거 대로 잘림

  • 문자 배열, 문자열 배열로 매개변수 넣어도 됨

       

string input = "양상추 토마토,치즈 계란+드레싱";
        string[] inputs = input.Split(new char[] {' ',',','+'});
        foreach (var item in inputs)
        {
 	Console.WriteLine(item);
}
  1. 문자열 양 옆의 공백 제거

  • Trim() : 문자열 양 옆의 공백을 제거

  • TrimStart() : 문자열 앞의 공백을 제거

  • TrimEnd() : 문자열 뒤의 공백을 제거

 

  1. 배열을 문자열로 변환

  • string.Join() : 배열의 요소를 뭉쳐 문자열로 변경

  • 매개변수로 구분자도 삽입 되고, 조인할 배열 넣어줌

    string[] array={“”, ””, ””, ””};

    Console.WriteLine(string.Join(‘ , ’, array)); // ‘ , ’ : 뭉친 애들 사이에 넣어줄 구분들

     

  • 그 외 콘솔 메서드들

  • Console.Clear() : 콘솔 화면을 지움

 

  • Console.SetCursorPosition() : 콘솔 화면의 특정한 위치로 커서 이동

    Console.SetCursorPosition(5, 5); // 좌표가 매개변수

     

  • Thread.Sleep() : 특정한 시간만큼 스레드 정지

  • 괄호 내부에 프로그램을 정지시키고 싶은 시간만큼 밀리초 단위로 입력

  • 밀리초! 1/1000

  • Using System.Threading; 해줘야 함-> import와 같은건가 본데 Thread 클래스 사용해야 하므로!

Console.WriteLine("첫 번째 출력");
Thread.Sleep(2000);
Console.WriteLine("두 번째 출력");
Thread.Sleep(2000);
Console.WriteLine("세 번째 출력");

 

  • 이동하는 골뱅이 만들기

앞으로 나가는 거 만들어 보자…. ㅋㅋㅋㅋㅋ 하 깜찍하네 진짜 예제

int x = 1;

            while (x < 30)
            {

                Console.Clear();
                Console.SetCursorPosition(x,5);

                if (x % 3 == 0)
                    Console.WriteLine("__@");

                else if(x % 3 == 1)
                    Console.WriteLine("_^@");

                else
                    Console.WriteLine("^_@");

                 Thread.Sleep(500);
                x++;
            }

 

 

  • switch 조건문과 무한 반복문으로 방향키입력 예제

bool state = true;
            int x = 0;
            int y = 0;

            while(state)
            {
                ConsoleKeyInfo info = Console.ReadKey();
                switch (info.Key)
                {
                    case ConsoleKey.UpArrow:
                        y--;
                        if (y < 0)
                        {
                            Console.WriteLine("갈 곳이 없어요");
                            y++;
                        }
                        else
                        {
                            Console.Clear();
                            Console.SetCursorPosition(x, y);
                            Console.WriteLine("@");
                        }

                        break;
                    case ConsoleKey.DownArrow:
                        y++;
                        if (y > 50)
                        {
                            Console.WriteLine("갈 곳이 없어요");
                            y--;
                        }
                        else
                        {
                            Console.Clear();
                            Console.SetCursorPosition(x, y);
                            Console.WriteLine("@");
                        }
                        break;
                    case ConsoleKey.LeftArrow:
                        x--;
                        if (x < 0)
                        {
                            Console.WriteLine("갈 곳이 없어요");
                            x++;
                        }
                        else
                        {
                            Console.Clear();
                            Console.SetCursorPosition(x, y);
                            Console.WriteLine("@");
                        }
                        break;
                    case ConsoleKey.RightArrow:
                        x++;
                        if (x > 50)
                        {
                            Console.WriteLine("갈 곳이 없어요");
                            x--;
                        }
                        else
                        {
                            Console.Clear();
                            Console.SetCursorPosition(x, y);
                            Console.WriteLine("@");
                        }
                        break;
                    case ConsoleKey.X:
                        state = false;
                        break;
                }
            }

 

 

 

 

'C# > 이론' 카테고리의 다른 글

[C#][이론] 클래스  (0) 2020.08.06
[C#][이론] 변수와 자료형  (0) 2020.07.31
[C#][이론] C# 플랫폼과 프로그래밍 언어  (0) 2020.07.31

chap_2

01.  변수와 자료형

m  자료형

 

n  unsigned 자료형

u  부호 없는 정수형 자료형

u  uint / ulong

 

n  MaxValue , MinValue

u  정수형 자료형의 최댓값과 최솟값 알아내는 코드

u  int.MaxValue , int.MinValue / long.MaxValue , long.MinValue

 

n  L

u  long 자료형을 나타내는 기호

u  소문자 l 1()과 헷갈리므로 L(대문자)로 사용

 

m  변수는 선언과 초기화를 해야 됨

 

m  문자열 변수와 문자 변수

n  sizeof연산자 : 자료형의 크기 나옴

u  string sizeof로 구할 수 없음

u  string의 원형 class System.String 클래스!

u  나머지 자료형의 원형 struct System의 멤버

int : struct System.Int32 / long : struct System Int64 /

float : struct System.Single / double : struct System.Double

char : struct System.Char

 

n  문자 덧셈 연산

u  문자열은 + 로 연결 가능

u  문자는 + 로 연결되지 않고 각 문자의 코드 값이 더해져서 숫자가 출력됨

 

02.  자료형 검사

m  자료형 검사

n  마우스 가져다 대면 자동으로 확인 가능

n  GetType()메서드 : 자료형 추출 메서드

변수 뿐 아니라 숫자 문자열에 직접 적용 가능

int num1 = 52;

string num2 = “52”;

(num1).GetType -> int / (num2).GetType -> string

(52).GetType -> int / (“52”).GetType -> string

 

03.  var 키워드

m  var 키워드 : 변수의 자료형을 자동으로 지정(javascript와 비슷하군)

n  초기화 할 때 지정한 자료형으로 자동 지정

n  한 번 지정된 자료형은 계속 유지됨

바꾸기 불가능!

n  var 키워드 조건

(1)   지역 변수로 선언하는 경우

인스턴스 변수일 경우 키워드 사용 불가

(2)   변수를 선언과 동시에 초기화 하는 경우

n  var 키워드 선언

u  다양한 자료형으로 선언이 가능

var numA = 100L; // long 자료형

var numB = 100.0; // double 자료형 (기본인갑소)

var numC = 100.0FL; // float 자료형

 

04.  입력과 출력

m  Console.ReadLine() : 입력 메서드

n  표준 입력 스트림에서 사용자로부터 한 줄의 문자열을 입력 받음

n  String 자료형으로 반환

m  Console.WriteLine() : 출력 메서드

 

05.  자료형 변환

m  강제 자료형 변환

m  자동 자료형 변환

 

m  문자열을 숫자로 변환

n  메서드들의 괄호 안에 숫자로 변환될 수 있는 객체 넣어주면 됨

u  int.Parse() : 다른 자료형을 int 자료형으로 변경

u  long.Parse() : 다른 자료형을 long 자료형으로 변경

u  float.Parse() : 다른 자료형을 float 자료형으로 변경

u  double.Parse() : 다른 자료형을 double 자료형으로 변경

(“52”).GetType -> string / (int.Parse(“52”)).GetType -> int

n  FormatException 예외

u  숫자로 변환할 수 없는 문자열을 변환하는 경우

Console.WriteLine(int.Parse(“abc”):

FormatException 발생! -> 변환 가능한 문자열을 넣어야 함

 

m  다른 자료형을 문자로 변환

n  ToString()메서드로 문자열로 변환

u  모든 자료형들은 ToString 메서드 가지고 있음

((52.273).ToString()).GetType -> String

((‘a’).ToString()).GetType -> String

((true).ToString()).GetType -> String

 

n  소수점 제거

u  실수의 소수점을 원하는 곳까지 출력 가능

u  ToString(매개변수) 의 매개변수에 0.00형태의 문자열 입력하면 됨

u  잘려진 부분은 반올림 됨

double number = 52.273103;

Console.WriteLine(number.ToString(“0.0”)); -> 52.3(반올림 됨)

Console.WriteLine(number.ToString(“0.000”)); -> 52.273

 

n  숫자와 문자열 덧셈

u  숫자와 문자열 놓고 + 기호 사용

u  문자열 덧셈 연산자가 우선되기 때문 -> 숫자가 자동으로 문자열로 변환

Console.WriteLine(52+273); -> 325 (숫자 더하기)

Console.WriteLine(“52”+273); -> 52273 (문자열이 되고 문자열 연결)

Console.WriteLine(52+”273”); -> 52273 (문자열이 되고 문자열 연결)

 

m  문자열을 불로 변환

n  bool.Parse() : 문자열을 불 자료형으로 변환

bool.Parse(“true”); / bool.Parse(“FALSE”);

 

m  음수밖에 없는 숫자

n  자료형의 최솟값은 그에 대응되는 양수가 없음(ex. int.MinValue=-2147483648)

n  자료형의 표현 범위는 2의 보수로 음수 표현하므로 자바랑 똑같음

n  -2147483648은 음수는 있지만 2147483648은 없음(int.MaxValue = 2147483647)

'C# > 이론' 카테고리의 다른 글

[C#][이론] 클래스  (0) 2020.08.06
[C#][이론] 조건문과 반복문 활용  (0) 2020.08.04
[C#][이론] C# 플랫폼과 프로그래밍 언어  (0) 2020.07.31

chap_1

01 플랫폼과 프로그래밍 언어

l  C#은 다양한 목적의 프로그램을 만들 수 있는 환경을 제공하는 형식 안정적인 객체 지향 언어

l  플랫폼

m  소프트웨어 응용 플랫폼을 실행하는데 사용되는 하드웨어와 소프트웨어 집합

m  과거에는 플랫폼 = 운영체제 였으나 현재는 하드웨어 플랫폼과 소프트웨어 플랫폼 함께 봐야 함

m  응용프로그램과 운영 체제 사이에 소프트웨어 플랫폼을 끼우는. .가상머신!

m  자바는 자바 가상 머신

m  액션 스크립트는 플래스 응용프로그램 만들고 플래시 위에서 실행!

m  닷넷 : 마이크로소프트사가 만든 소프트웨어 플랫폼

n  CLI(Common language infrastructure :공통 언어 인프라)를 구현한 CLR(Common language runtime)

n  닷넷 프레임 워크 : 닷넷 플랫폼과 클래스 라이브러리 제공!

응용 프로그램 프레임워크 : 윈도 폼, WPF, 윈도 10 유니버셜 응용 프로그램

웹 응용 프로그램 프레임 워크 : 실버라이트

웹 서버 프레임 워크 : ASP, NET, ASP.NET, MVC

웹 서비스 프레임 워크 : WCF

 

window– c# window / linux– c# ASP.NET / mac– c# WCF / ios– C# unity / android– c# xamarin

 

l  라이브러리와 프레임 워크

m  라이브러리는 다 알고

m  프레임워크

n  제어 역전이 있는 대규모의 라이브러리

n  제어역전 : 개발자가 제어하던 코드를 프레임 워크가 제어하는 것

n  기본 틀을 모두 제공해 줌

 

l  C#으로 할 수 있는 일

m  gui, web, 게임, IoT

 

l  예외

m  디버그 모드 : 비주얼 스튜디오에서 오류 등 수정하는 목적의 모드

m  릴리즈 모드 : 실제 배포될 때 프로그램이 어떻게 동작하는지 확인할 수 있는 모드

m  코드 실행 중 발생하는 오류 : 예외(exception), 런타임 오류(runtime error)라고 함

 

l  프로젝트 생성과 실행

m  생성

n  콘솔 응용 프로그램!

n  확장자 .cs -> 프로그램의 중심이 되는 파일

m  실행

n  디버깅! F5 단축키

실행 되었다가 바로 종료되어 아무것도 못 봄

n  디버그 하지 않고 시작! ctrl + F5

 

 

'C# > 이론' 카테고리의 다른 글

[C#][이론] 클래스  (0) 2020.08.06
[C#][이론] 조건문과 반복문 활용  (0) 2020.08.04
[C#][이론] 변수와 자료형  (0) 2020.07.31

1절  배열의 개요

l  동일한 크기와 성질을 가지고 있는 몇 개의 원소를 일정한 규칙에 따라 나열하는 형태로 표현하고 이 값들을 인덱스로 구분

n  인덱스 : 배열의 원소를 간단히 구별하기 위해 사용하는 번호

C언어의 인덱스는 0부터 시작

n  <인덱스, > 쌍의 집합

l  한꺼번에 많은 자료를 표현해야 하는 경우 배열 사용 가능

l  여러 개의 동일한 자료형의 데이터를 한꺼번에 만들 때 사용

l  선언할 때 초기화 가능해서 앞에서부터 초기화 하고 남는 것들은 0으로 초기화됨

l  배열

n  배열의 원소들은 순차적인 방법으로 기억장소에 저장됨

n  임의의 원소에 접근하려면 배열의 인덱스를 지정하여 구분

n  자료형이 같은 자료를 나열하여 메모리에 연속적으로 저장하여 만든 자료 그룹

n  비슷한 특성을 가진 자료를 묶어 놓은 집합

n  같은 형의 변수를 여러 개 만드는 경우 사용

n  모든 자료형 배열로 구성 가능

n  형태에 따라 1차원, 2차원, … 배열 가능

n  기억장소 위치와 크기 계산할 사상방법 필요

 

1.     1차원 배열

1)     자료형 배열이름 [배열 개수] ;

u  자료형 : 배열 원소들은 모든 원소들이 같은 자료형으로 이루어짐

u  배열 이름 : 배열의 원소에 접근 할 수 있는 유일한 이름 변수. 변수 이름과 같은 규칙

u  배열의 개수 : 원소 개수 나타내는 정수. 인덱스는 0 ~ 원소개수-1 이 됨

2)     모든 원소들이 메모리의 연속된 공간에 저장됨

3)     int A[5] = {123, 456, 789};

 

2.     2차원 배열

4)     2개의 1차원 배열로 구성. 첨자는 2

5)     (row) : 가로줄 / (column) : 세로줄

6)     자료형 배열이름[행 수][열 수] ;

7)     int B[3][4]

 

3.     3차원 배열

8)     , , 3개의 첨자 사용

9)     자료형 배열이름[면 개수][행 개수][열 개수];

10)   int C[3][3][4]

 

2절  순서리스트

1.     개요

11)   리스트(list)

u  관련된 자료들이 일정한 순서를 이루어 나열되어 있는 구조

u  순서가 붙여진 0개 이상의 원소들의 집합

u  크기가 가변적이면서 원소가 순서를 이루는 응용에 적합한 구조

o  필요에 따라 확장 축소 가능

o  어느 위치에서나 원소를 삽입하거나 삭제 가능

u  인덱스나 포인터를 이용하여 비순서적으로 검색 가능

 

12)   순서 리스트

u  자료들 간에 순서를 갖는 리스트

u  물리적으로 일렬로 연결되어 있는 자료 구조 -> 배열로 구현 가능

 

13)   순차 자료구조와 배열

u  순차 자료구조 : 원소들의 논리적 순서 = 원소들 저장된 물리적 순서

u  배열 : 프로그래밍 언어에서 리스트 저장하는 자료형

 

2.     표현 방법

14)   리스트 이름 = (원소1, 원소2, … ,원소n); (괄호가 ( ) )

15)   순서 리스트는 원소들의 논리적 순서와 물리적 순서가 같음

학생 = (김철수, 이지연, 박영철)

16)   공백 리스트 : 원소가 하나도 없는 리스트. 빈 괄호로 표현

공백 리스트 이름 = ( )

17)   순차 자료구조의 원소 위치 계산

u  순서리스트가 저장된 시작 위치 : a

u  원소의 길이 : l

u  i번째 원소의 위치 : a + ( i – 1) * l

 

18)   원소의 삽입과 삭제

u  원소의 삽입

o  삽입할 빈자리를 만들기 위해 삽입할 자리 이후 원소들 한자리씩 뒤로 이동

o  (n + 1)개의 원소로 이루어진 순서 리스트( 0 ~ n ) 에서 k번째 자리에 원소 삽입

k번째 위치부터 마지막 n번 원소까지 (n – k + 1)개의 원소 이동

보기 좋게 ! : (n+1) – k = (원소 개수) – k (맨 뒤부터 k번째 원소까지가 이동 대상)

마지막 원소 n 3번째인 순서 리스트 에서 k = 2 일 때 이동하는 원소 개수?

 

u  원소의 삭제

o  리스트에서 원소 삭제 후 삭제한 자리 이후의 원소들을 한자리씩 앞으로 이동

o  (n + 1)개의 원소로 이루어진 순서 리스트( 0 ~ n ) 에서 k번째 자리의 원소 삭제

(k + 1)번 원소부터 마지막 n번 원소까지 (n – (k+1) +1)개 원소 이동

보기 좋게 ! : (n+1) – (k+1) = (원소 개수) – (k + 1) (k 다음부터 맨 끝 원소까지 이동대상)

마지막 원소 n 4번째인 순서 리스트 에서 k = 2 일 때 이동하는 원소 개수?

 

u  원소를 삽입하거나 삭제할 경우 원소들이 뒤로 밀거나 앞으로 당겨서 연속 저장순서 유지해야 함

è 오버헤드 발생

è 연결 리스트로 구현하는 것이 낫다!

 

3절  배열의 표현

1.     다차원 배열의 행우선과 열우선

19)   1차원 배열은 물리적 저장 순서가 논리적 저장순서와 같음 (선형!)

20)   다차원 배열은 행 우선과 열 우선 방식이 있음

1)    행 우선 방식

u  행의 순서대로 저장되는 방식 (1, 2, 3∙∙∙ 순으로 저장)

2)    열 우선 방식

u  열의 순서대로 저장되는 방식 (1, 2, 3∙∙∙ 순으로 저장)

21)   int A[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9}

 

   

23)   2차원 배열 A[m][n]에서 A[i][j]의 주소

u  시작 주소 : a / 각 데이터 크기 : k / i : 행 번호 j : 열 번호

u  행 우선 방식의 주소 : a + {( i * n ) + j } * k (한 행에 n개 원소 – i 행 존재, 나머지 j)

u  열 우선 방식의 주소 : a + {( j * m ) + i } * k (한 열에 m개 원소 – j 열 존재, 나머지 i)

 

4절  희소 행렬

1.     희소 행렬

1)     mⅹn 행렬 :

u  m개의 행과 n개의 열로 이루어진 행렬

 

 

2)     희소 행렬

u  행렬 안의 많은 항들이 0으로 되어 있는 행렬

u  엄청 큰 희소 행렬이 있으면 메모리 낭비가 심해짐 (쓸데 없이 0을 저장하는 그런?)

u  메모리 낭비를 줄이는 방법! : 배열을 이용, 0이 아닌 원소들만을 나타낸다!

o  0이 아닌 각 원소만을 <, , > 쌍으로 배열에 저장

o  희소 행렬에 대한 원래 정보는 <전체 행의 수, 전체 열의 수, 0이 아닌 원소 수>의 쌍으로 첫 번째 행에 저장

 

 

u  희소 행렬을 배열로 표현할 때의 단점 : 연산 측면에서 반복적인 패턴을 찾을 수 없어 비효율적

ð  희소 행렬의 0이 아닌 값들만 연결 리스트로 표현하면 기억 장소의 효율 높일 수 있음

ð  삽입과 삭제 연산도 자유로워짐

 

 

2.     전치 행렬

n  행렬의 행과 열을 서로 교환하여 구성한 행렬

n  임의의 행렬 A, B의 모든 i, j에 대하여 

이면 B A의 전치 행렬

원소의 위치 (i, j) (j, i)로 교환

n  mⅹn 행렬 A -> nⅹm 행렬 

+ Recent posts