본문 바로가기

내일배움캠프/꾸준CS과제

[TIL 24.07.01] 01. 객체와 한정자

.

 

목   차

     


    확인 문제

    using System;
    
    public class Car
    {
        // Properties
        public string Make { get; set; }
        public string Model { get; set; }
        public int Year { get; set; }
    
        // Methods
        public void DisplayInfo()
        {
            Console.WriteLine($"Car Make: {Make}, Model: {Model}, Year: {Year}");
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            Car car1 = new Car();
            car1.Make = "Genesis";
            car1.Model = "G70";
            car1.Year = 2020;
            car1.DisplayInfo();
    
            Car car2 = new Car();
            car2.Make = "Hyundai";
            car2.Model = "Sonata";
            car2.Year = 2022;
            car2.DisplayInfo();
        }
    }

    1. 위 예제코드에서 'Car', 'car1', 'car2'가 각각 나타내는 것은?

    Car는 클래스이고, car1과 car2는 Car라는 클래스를 이용해 선언된 인스턴스, 즉 객체이다.

    2. 위 코드에서 메서드 호출 시 'car1'와 'car2'를 사용하는 이유?

    Car 안에 선언되어 있는 메서드는 Car 자체에 소속된 것이 아니라 나중에 만들어질 인스턴스를 위해 대신 미리 작성해둔 것이기 때문이다. 만약 객체 없이 메서드를 사용할 필요가 있다면 static 한정자를 붙여야 한다.

    3. "Car.SomeMethod()"와 같은 메서드 사용은 static 한정자가 붙었는가? 이유는?

    static 한정자가 붙어있을 것이다. 메서드가 특정 객체에 대해 사용된 것이 아니라 클래스 이름이 메서드 이름 앞에 붙어있기 때문이다.


     

    설명 문제

    1. 객체란 무엇인가요? 클래스와 어떤 연관이 있나요?

    객체란 클래스라는 틀로 찍어낸 붕어빵이다. 클래스는 구조 그 자체로 클래스 하나를 이용해 여러 객체를 만들어낼 수 있다.
    즉, 클래스는 비슷한 것들을 묶어놓은 범주, 객체는 실제 개별 사물이다.

    2. 생성자에 대해 간단하게 설명해주세요.

    생성자는 클래스라는 설계도에 맞게 객체라는 물건을 찍어내는 공장의 역할을 한다.

    3. 접근제한자란 무엇이며, 각각 어떤 차이가 있는지 비교해서 설명해주세요.

    접근제한자는 클래스 안의 각 멤버들에 대한 접근 권한을 의미한다. 
    자주 사용되는 종류로는 public, protected, private이 있다. 
    public은 모든 범주에서, protected는 현재 클래스와 그 클래스의 자식클래스들만, private는 오직 현재 클래스만 접근이 가능하다.

    4. static 한정자에 대해 설명해주세요.

    static 한정자는 해당 요소가 클래스 자체에 속하게 한다. 
    static변수일 경우 여러 메서드에서 접근해서 그 값을 변경해도 변경된 값이 저장된다. 
    static함수라면 별도의 객체 선언 없이 그 클래스의 메서드를 사용할 수 있게 된다.


     

    실습 문제

    using System;
    
    namespace StaticFieldPractice
    {
        public class Item
        {
            // TODO: Item의 개수를 저장하는 static 필드 선언 //
             private static int itemCount = 0;
    
            public string Name { get; set; }
    
            // 생성자 함수
            public Item(string name)
            {
                this.Name = name;
                // TODO: static 필드 값을 증가시키기 //
                 itemCount++;
            }
    
            
            public static int GetItemCount()
            {
                // 현재까지 생성된 Item 개수를 반환  //
                return itemCount;   
            }
        }
    
        class Program
        static void Main(string[] args)
            {
                // Item 인스턴스 생성
                Item item1 = new Item("Item1");
                Item item2 = new Item("Item2");
    
                // 생성된 Item 개수 출력
                Console.WriteLine("Total Items Created: " + Item.GetItemCount());
            }
        }
    }