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);
}
}
이와 같이 자식의 메소드가 부모의 메소드를 가리기 때문에 하이드라고 함
[과제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로 만들어볼 것