07/28

이우석·2023년 8월 6일
0

SBS 국기수업

목록 보기
8/120

class의 상속과 한정자
protect나 public 한정자로 선언한 메소드, 멤버변수는 자식 class에서도 사용할 수 있다.
한정자를 선언하지 않으면 기본적으로 private로 지정되기 때문에 자식 class에서 사용할 수 없다.

상속된 Class의 하이딩

namespace LearnCS_ForLearn
{
	class Person
	{
		private string Name;
		private int Age;

		public void InitData(string name, int age)
		{
			Name = Name; 
			Age = age;
		}

		public void ShowMyInfo()
		{
		           Console.WriteLine($"나의 이름은 {Name}이고, {Age}세 입니다.");
		   }
	}
}

namespace LearnCS_ForLearn
{
	internal class Student : Person
	{
		public string SchoolName;

		public void InitData(string name, int age, string schoolName)
		{
			//Person 에 이미 있는 함수와 같은 이름의 함수가 자식 함수에서 선언되면 오버로딩되어 덮어씌워짐
			InitData(name, age);
			SchoolName = schoolName;
		}

		public void ShowMyInfo()
		{
			Console.WriteLine($"나는 {SchoolName}를 다니고 있습니다.");
		}
}

Student 를 생성해서 ShowMyInfo()를 실행하면 Student의 것이 실행됨

namespace LearnCS_ForLearn
{
	class FreeMan : Student
	{
		public void ShowMyInfo()
		{
			Console.WriteLine($"나는 자유인이다.");
		}
	}
}
internal class Program
{
	static void Main(string[] args)
	{
		var me = new FreeMan();
		me.InitData("홍길동", 21, "아버지를아버지라부르지못하고등학교");

		me.ShowMyInfo(); // Person것은 하이딩되어 Freeman의 ShowMyInfo가 실행됨
		Person ps = me; //자동으로 Person 형으로 캐스팅 (Freemanclass가 아니게 된 건 아님 Person 영역만 사용하도록 제한 된 것 뿐)
		ps.ShowMyInfo();
		Student stu = (Student)ps; //부모 class에서 자식 class로 되돌아가는 형변환은 자동으로 되지 않음, 명시적 캐스팅이 필요함
		stu.ShowMyInfo();

		Commend("pause");
	}
}

public static void Commend(string commend)
		{
			if (commend.CompareTo("pause") == 0)
			{
				Console.Write("종료하시려면 아무키나 누르세요...");
				Console.ReadKey();
			}
			else
			{
				Console.WriteLine("존재하지 않는 명령어입니다...");
				System.Threading.Thread.Sleep(5000);
			}
		}

이와 같이 자식의 메소드가 부모의 메소드를 가리기 때문에 하이드라고 함

  • 상속된 Class의 메소드 오버라이딩
  • protect 한정자를 가진 생성자를 통해 상속을 통해서만 만들 수 있는 class 만들기
  • private 한정자를 가진 생성자를 쓰는경우 = 싱글턴 패턴으로 코딩하는 경우
  • 생성자 상속 public child() : base("사람", -1){ / do something / }
  • class 추상화(abstract)
  • class 인터페이스(interface) : 추상화와 비슷하나 좀 더 라이트하게 사용 가능, 멤버 변수 사용 불가, 선언만 가능, 항상 public, 선언된 부분은 모두 구현되어야 함
  • C# 컬렉션 : 자료 구조
    - ArrayList : 선형 구조의 자료구조이다.
    - 배열과 매우 유사하며 연속된 자료의 묶음 형태이다.
    - ArrayList는 모든 자료 구조의 기본형이 되는 자료 구조이다.
    - Array는 공간 용량을 지정하고 사용해야하며 이 탓에 메모리 낭비가 생기는 경우가 있었다.
    - 이를 보완하기 위해 만들어진 것이 ArrayLIst로 Array와 달리 용량이 가변적이다.
    - ArrayList 이름 = new ArrayList();
  • 일반화 컬렉션 : 템플릿이라고도 함

[과제1]
NameCard 클래스를 만들고, 이름, 직급(사원/대리/과장/부장/사장), 연락처, 내선번호, 이메일 정보를 가지게 한다.
단, 반드시 생성자 초기화를 가지고 있어야 한다.
해당 정보를 아래와 같이 출력하라.
┌───────────────────────┐
│ 이름 : OOO │
│ 직급 : OOO │
│ 내선 번호 : OOO - OOOO - OOOO │
│ 휴대폰 번호 : OOO - OOOO - OOOO │
│ 이메일 : test@test.com │
└───────────────────────┘

[과제2]
과제1 에서 만든 클래스를 활용해 2개의 명함 정보가 이미 저장되어 있는 아래와 같은 시스템을 만들어라

결과화면
#개의 명함이 있습니다.
1. 추가
2. 삭제
3. 확인
4. 나가기
원하시는 동작의 번호를 입력하세요 : #
(추가)
이름을 입력하세요 : (이름은 중복체크)
1. 사원
2. 대리
3. 과장
4. 부장
5. 사장
직급 번호를 입력하세요. :
내선 번호를 입력하세요. (없다면 999) :
휴대폰 번호를 입력하세요. :
이메일을 입력하세요 :
OOO님의 명함이 추가 되었습니다.
#개의 명함이 있습니다.
1. 추가
2. 삭제
3. 확인
4. 나가기
원하시는 동작의 번호를 입력하세요 : #
(삭제)
1. OOO
2. OOO
...
n. 취소
삭제하실 명함 번호를 입력하세요 : #
#개의 명함이 있습니다.
1. 추가
2. 삭제
3. 확인
4. 나가기
원하시는 동작의 번호를 입력하세요 : #
(확인)
1. OOO
2. OOO
...
n. 취소
(나머지는 알잘딱깔센)

HashTable
HashTable은 해시함수를 이용하여 자료를 정리하는 구조를 가지고 있다.
키와 값이 쌍으로 이루어진 노드를 저장하는 형태로 키에 의해 자료를 찾을 수 있다.
탐색 속도가 빠른 장점이 있다. 내부의 자료를 검색해야 하는 경우에 사용이 권장된다.
문법
Hashtable 이름 = new Hashtable();

[과제3]
과제1, 과제2를 hashTable로 만들어볼 것

profile
게임 개발자 지망생, 유니티 공부중!

0개의 댓글