상세 컨텐츠

본문 제목

step5 c#기초- OOP (Object Oriented Programming)

본문

반응형

구조체

구조체는 데이터, 함수의 집합체 입니다. 클래스 역시 데이터와 함수의 집합체입니다.

다만 차이는 저장되는 형식이 다릅니다.

구조체는 스택 저장(Value), 클래스는 참조 (Reference) 힙 저장

 

구조체의 사용은 다음과 같습니다.

 

public struct Student{
   public int number;
   public float average;
   public string name;
}


public class School{

    public static void Main(){
      
        Student st1;
        st1.number = 10;
        st1.average = 30f;
        st1.name = "김랜덤";
    }
}

 

* 구조체는 상속이 불가능합니다! 

 

 

개체 지향 프로그램?

컴퓨터 프로그램 을 독립적인 단위 "객체" 들의 모임으로 파악하는것이고, 객체가 메시지를 주고받고 데이터를 처리함.

프로그램을 객체 단위로 구조하고, 프로그램의 유연한 변화, 재사용성, 유지보주를 간편화 하게 해준다.

 

즉, 클래스를 활용하여 프로그램을 객체단위로 구조화 하는것을 말합니다.

 

 

 

OOP 개채 지향 프로그래밍

- 캡슐화

- 멤버

- 접근 제한자

- 상속

- 인터페이스

- 정적방식

- 제네릭 형식

- 부분형식

- 익명 형식

- 확장 메서드

 

 

개체 지향 프로그램?

컴퓨터 프로그램 을 독립적인 단위 "객체" 들의 모임으로 파악하는것이고, 객체가 메시지를 주고받고 데이터를 처리함.

프로그램을 객체 단위로 구조하고, 프로그램의 유연한 변화, 재사용성, 유지보주를 간편화 하게 해준다.

 

즉, 클래스를 활용하여 프로그램을 객체단위로 구조화 하는것을 말합니다.

 

클래스

클래스는 객체지향 프로그램에서 설계도와 같습니다.

클래스만 만들어선 프로그램이 동작하지 않습니다.

 

클래스로 만든 설계도가 실제로 구현하기 위해선 인스턴스 ( 객체)로 만들어야합니다.

 

클래스는 접근제한자로 클래스의 접근 여부를 조정할수 있습니다.

 

- 접근 제한자

keyword Range
public 어디서든 접근가능
protected 상속받은 대상에서만 접근가능
private 본인 만 접근가능 
internal 같은 모듈내부에선 접근가능

 

클래스의 객체화는 다음과 같다.

 

class A{
  public void FooA(){
     Console.WriteLine("Hello A");
  }
}

class B{
   private void FooB(){
      Conosle.WriteLine("Hello B");
   }
   
}

class C{
   protected void FooC(){
        Console.WriteLine("Hello C");
   }
}

class MainClass{

   public static void Main(){
       A a = new A();
       B b = new B();
       C c = new C();
       
       a.FooA(); // OK
       b.FooB(); //  Error
       c.FooC();  // Error

   }
}

 

클래스 내부에 있는 함수들을 메서드라고 합니다.

Main 클래스에서 클래스를 사용하기위해 

 

new 키워드를 이용해 객체화(실체화) 해줘야 직접 사용할수 있습니다.

 

객체의 메서드(행동)을 사용하기위해선 . [dot]를 이용해 객체 내부에 접근 할수 있습니다.

 

단. private, protected는 조건에 따라 접근 할수 없습니다.

 

또한 객체의 접근제한자를 비울경우 기본값이 private 입니다.

 

public class MyClass{


   private int number;
   int myNumber;
   
   
}

 

MyClass 내부에 있는 number, myNumber 모두 priavte 접근자이므로,

외부 에서 접근이 불가능합니다.

 

 

생성자

생성자는 클래스를 객체화 할때  해당되는 생성자를 생성합니다. 생성자를 선언하지 않으면 정적 생성자가 생성됩니다.

 

public class MyClass{
    
    // 정적생성자
	MyClass(){
    
	}
    
    
    MyClass(int number){
    	
    }
    
    
}

기본생성자가 생성될때도, 개발자가 세부 내용을 구현하면 기본생성자가 실행됩니다.

 

 

 

혼자 해보기문제

 

1. 성적 클래스를 만드세요.

 

학생은 이름, 학번,  과목 3개의 속성을 가지고 있습니다.

 

과목은 국어, 영어, 수학 점수를 가지고 있습니다. 

과목은 점수와, 평점을가지고 있습니다.

 

학생의 이름은 문자열

학번은 정수

 

과목의 점수는 정수

과목의 평점은 실수

 

 

 

2. 1번 클래스를 만들고 프로그램을 실행하면 다음과 같이 출력하는 메뉴를 만들으세요.

 

1. 학생 등록

2. 학생 명단 출력

3 프로그램 종료

 

 

1. 학생 이름, 학번, 과목 3개를 입력받는다.

2. 학생 명단을 출력합니다.

단. 학생의 명단 출력시 다음과 같이 출력합니다.

  * 평점 = 3개의 과목 의 평균이 평점임

 

   학번-학생 이름-(평점) /n

   학번-학생 이름-(평점) /n

   학번-학생 이름-(평점) /n

 

3. 프로그램을 종료합니다.

 

 

 

 

 

 

 

Reference

https://docs.microsoft.com/

 

개발자 도구, 기술 설명서 및 코딩 예제

개발자와 기술 전문가용 Microsoft 설명서 및 학습을 위한 홈입니다.

docs.microsoft.com

 

반응형

관련글 더보기

댓글 영역