'#c# #클래스 #객체'에 해당되는 글 1건

  1. 2019.02.09 C#-11. 객체지향에서 용어정리
2019. 2. 9. 17:36

이번장에는 상속을 할려고 했는데, 제가 정리를 잘 못 한탓도 있고, 여러가지 이유로 해서 다시 한번 용어에 대해서 정리하는 시간을 가져봐야 할거 같습니다

결과적으로는 모든 학습은 용어에서 지면 될것도 안된다는것을 항상 명심해야

한다는 말이 생각나는군요 모든 시작은 용어정리입니다.

 

 

1. 클래스와 객체(object)

  - 객체를 만들기 위한 하나의 틀이라고 보시면 됩니다.

  - 먼 미래에 사람을 복제하는 기술이 있다고 치면, 사람이라는 모든 속성(키, 생김새, 피부색)

    이 복사가 되고, 그 사람의 모든 행동(모든 메서드)이 복사가 됩니다.  ( -->> 클래스로

   부터 객체 완성한 부분) 이런것을 만들어주는것이 클래스입니다. 그리고, 우리는 무조건

    똑같을 순 없잖습니까...아무리 복제인간이라해도

    사람이니깐 성격까지는 복사를 못하겠지요,

    그러면서 성격에 따라 밥먹는 습관(메서드)이나, 잠자는 모습(메서드), 노는것(메서드)이

    다 다를 수 있겠지요.

  - 같은 엄마 배속(클래스) 에서 태어난 쌍둥이(객체)라도 성격이 다르니깐 추상적인

    메서드(밥먹기, 놀기)의 내용이 구체적으로 달라지는것이지요

 

  ==> 클래스는 객체를 생성하기 위한 하나의 추상적인 형태 입니다.

 

 

2. 인스턴트화

   - 보통은 코드만으로만 봤을때 new 를 써서 객체를 만듭니다.

   - 그전에 객체란것은 모든 하나의 사물이라지만, 참 애매모호 하시지요?

     >> 객체 : 핸드폰, 나, 너, 라면, TV, 컴퓨터, 개, 고양이, 호랑이, 공룡, 책, 등등

         모든 사물을 객체라고 말합니다.

   - 그렇다면 우리가 열심히 머리 싸메면서 하는 C#에서 객체를 만들었다는것은 내가

     클래스를 바탕으로 객체를 만든것인데 객체가 만들어졌다는것은 메모리에 올라갔다는

    뜻이기도 합니다. 실세계에서 사물(객체)를 사용하기 위해서는  실세계가 존재해야

    하듯, 내가 만든 프로그램이 컴퓨터세계에서 돌기위해선 Ram(메모리)에 적재가

    되야 하는것입니다.

     그것을 우리는 인스턴트화 됐다고 합니다.

  - 인스턴트란 뜻은 즉석식품이 아니라, 엄밀히 따지면 바로 먹을수 있다는것으로,

    바로 사용할수 있다 즉, 이제 사용할수있다.

    그렇기때문에 클래스를 기반으로 만든 객체는 인스턴트화...즉 바로 사용이

   가능하단말입니다.

 

    classA A ;             // 객체를 담을 그릇을 만든것뿐..인스턴트화는 아님

    A = new ClassA() ; // 생성자를 호출해서 인스턴트화가 되었음! 클래스내의

                                // 객체 생성자로 인해서 객체가 만들어짐

                                // 인스턴트화가 되었음.

   

3. 추상화

   - 미술분야에서 추상화를 많이 말을 하는데, 추상적으로....라는말이 참...애매모호 합니다.

   - 추상을 정의하게 전에 예를 들어보죠

      >> 먹는다, 잔다, 공부한다.

     무슨 말인지는 알겠지만, 뜻이 참 함축적입니다. 구체적으으로 뭘 먹는다는거고,

     언제자고 어떻게 언제 잘래,  뭘 공부해서 어떻게 공부해서 얼마나 무엇을 위해서 공부한다

     라고 구체적으로 다시 말하면 좀더 낫지요

     구체화의 반대말로 접근하시면 이해가 빠를거 같습니다.

   

     잔다 -> 낮잠을 잔다 -> 코를 걸면서 잔다 -> 코를 걸고, 잠꼬대를 하면서 잔다 ->

                코걸고, 잠꼬대에 옆으로 누워잔다.

     잔다 : 상당히 추상적이지요?(어떻게 해석이 될지 잠재력이 대단히 많지요?)

 

     코골면서 잠꼬대하면서 옆으로 누워서 낮잠을 잔다 : 상당히 구체적입니다.

 

     결국은 추상적으로 객체를 표현해야 되는것입니다.

     일일히 사람에 대해서 다 표현을 하자면 무지하게 많습니다.

    사람에 대한 속성과 행동은 누구나 공통적인것이  있을것입니다.

    그것을 메서드(함수)로 표현합니다.

 

     왜 그럼 추상적으로 표현해야 하나?? 너무 구체적이면  어떻게 될까요?

     사람이라는 클래스를 만든다면, 이제 그 클래스로 여러가지 사람을 나타낼수가 있는데,

     너무 구체적으로 사람을 정의 하면 클래스 자체가 함수가 되어버립니다.

     함수는 특정 기능을 절차적으로 완벽한 답을 도출해야 하기때문이지요

    

     눈사람을 만들때 딱 눈사람 모형만 만들면 거기서 꾸밀것이 참 많습니다.

    하지만 눈사람을 완전히 사람같이 구체적으로 만들고, 옷입히고, 눈코입 그리고,

    장갑끼우고 신발 입히고, 색칠하면,,,,좋겠지만,

    그 눈사람은 그냥 사람이 되어버리는것이지요, 클래스 재사용도 불가능합니다.

 

     결국은 추상화란 구체적이지 않는 사물의 일반적이고,

     얼마든지 구체적으로 만들수있는가를 준비하는 방법이지요

    

 4. Static (정적)

   - 모든 프로그램에서 매우 중요하게 쓰이는 용어입니다. 여기서는 하드웨어에 대한 지식이

     약간 필요합니다.

   - 결국은 static을 앞에 쓰고 안쓰고 차이는 엄청난 차이가 납니다.

   - static을 앞에 붙인 메소드나, 변수는 무조건 프로그램이 실행되면,

    메모리에 로딩이 되어, 제일 먼저 생성이 됩니다.

     그렇기 때문에 언제든지 사용이 가능해집니다.

     전역변수와 같이 똑같은 의미로 사용되어 지는데, 전역변수(javascript)에서 했었지요?

      어느 함수나 어느 영역에도

     포함되지 않는 변수였지요, 어느 함수에서든지 호출해서 사용할수 있는 변수였습니다.

     프로그램이 실행되자마자 Main() 메서드와 똑같이 생성되어 프로그램이 끝날때

    까지 메모리에 계속 상주하게 되어, 자유롭게 쓸수있습니다.

 

Class A

{

      public int a;

      public void Write(){ Console.WriteLine("안녕");}

}

Class B

{

      public static int b;

      public static void Write() {Console.WriteLine("정적 안녕"); }

}

 

여기서 A클래스를 사용하기 위해선 객체를 만들어야 사용할수있습니다.

 

A a = new A() ; 반드시 인스턴트화...객체를 만들어(메모리에 적재시킨뒤)

사용이 가능합니다.

이렇게 ... a.Write(); a.a = 3;

 

하지만 정적은 이미 메모리에 적재가 되어있기때문에

인스턴트화가 필요없이 B.Write()라고만 하지면 메소드가 호출이 됩니다.

그리고 정적변수... B.b 이건 이렇게 사용하게 전역변수처럼 쓸수있습니다.

 

 

5. 필드 / 메소드

  - 클래스에서 속성이 정의된 영역을 필드라 부르고,

    행위가 정의된 것을 메소드라고 합니다.

 

class Dog

{

      protected string TypeDog;  // 개종류

      protected string gender;    // 암수구분

      protected string name ;     // 개이름

      protected int age       ;      // 개나이

      // 저위에 4개의 속성이 필드영역입니다. 필드라고 합니다.

 

      // 나머지 Dog의 행위가 있는 밑을 메소드라고 합니다.

      public void Cry() {....};          // 짖는행위

      public void Run() {....};         // 달리는 행위

      public void Sleep() {....};       // 자는 행위

      pubilc void Fee(){....};           // 먹이를 먹는 행위

 

}

 

이렇게 아주 기초적이면서 매우 자주쓰이며, 중요한 부분만 나름대로...많이 부족하네요

다시 읽어보니...저도 아직 많이 부족해서 설명이 참......쉽지가 않네요

틀린부분은 언제든 지적감사드리면, 다같이 힘내시기 바랍니다!!

'프로그래밍 > C#' 카테고리의 다른 글

C# - 보충 : 함수와 return  (0) 2019.02.18
C#-10. 클래스의 정적멤버  (0) 2019.02.06
C#-9. 생성자  (0) 2019.02.05
C#-8. C# 응용프로그램의 기본구조  (0) 2019.02.03
C#-7. 객체지향과 클래스  (0) 2019.01.31
Posted by 토실토실천재