[ 개발 잡소리 ] 객체 지향 프로그래 밍

2024. 3. 5. 15:47개발잡소리

객체 지향 프로그래밍이 뭘까?

그전에 객체는 무엇일까?

 

객체란?

사물이다.

사물? 우리 주변에 있는 사물을 말하는 건가?

 

그렇다. 객체는 우리 주변의 사물(객체)을 기준으로 프로그래밍하는 방식이다.

 

이게 무슨 말이지?

자세히 알아보자


사람 한 명의 객체가 있다고 쳐보자

 

이 사람은 어떤 속성을 가지고 있을까?

이 사람은 아마 이름과 나이를 가지고 있을 것이다.

 

음.. 그리고 이 사람은 무엇을 할 수 있을까?

 

이 사람은 먹고, 걸어 다닐 수 있다.

그렇다. 이러한 개념들은 묶어서 가지고 있는 이 Human이라는 것은 객체인 것이다.

 

Human은 name, age '속성'과

Eat, Walk행동을 하는 '메서드'를 가지고 있다.

 

그런데 세상에 사람이 한 명만 있는가?

 

아니다. 사람은 무수히 많으며

여러 사람이 공통으로 저 속성들을 가지고 있고

먹고, 걸어 다닐 수 있다. 

 

그럼 사람(Human)이라는 객체는 굉장히 많이 존재할 것이다.

하지만 매번 저렇게 하나하나 손수 Human객체를 매번 만들 수는 없기에 존재하는 것이 있다.

그것이 Class라는 것이다.

보통 Class를 붕어빵 틀로 객체를 붕어빵으로 비유하여 주로 설명하는데

Class를 통해 새로운 객체를 계속해서 같은 형태로 찍어낼 수 있기 때문이다.

 

다시 돌아와서.

저 인간 객체를 뽑아내기 위한 클래스의 형태를 보자면

class Human // C#이다
{
    public string name;
    public int age;
    public void Eat()
    {
    	// 냠냠 굿
    }
    
    public void Walk()
    {
    	// 뚜벅이 ON
    }

}

이런 식으로 된다.

 

이 클래스로 객체를 찍어낼 때는

Human human1 = new Human() { name = "human"};
Human human2 = new Human();

human1.Eat();

이런 식으로  C#에서는 new 키워드를 붙여 찍어내어 사용할 수 있다.

 

그러나 안에 있는 name과 age값을 처음부터 지정해 주기 위해서

new Human() 뒤에 중괄호 안에서 값을 할당해 주었는데

이는 가독성은 어쩌면 좋을 수 있지만 더 편하고 좋은 방법이 있다.

 

그것은 생성자라는 것인데

저기 비어있는 소괄호를 활용하여 함수처럼 객체를 만들 때 필요한 값들을 받아오는 것이다.

class Human // C#이다
{
    public string name;
    public int age;
    
    public void Eat()
    {
    	// 냠냠 굿
    }
    
    public void Walk()
    {
    	// 뚜벅이 ON
    }
    
    public Human(string name, int age)
    {
    	this.name = name;
        this.age = age;`
    }
}

 

이렇게 Human 클래스의 생성자를 만들어주면

Human human1 = new Human("mingling", 17);

생성할 때 이런 식으로 간단하게 객체를 만들 수 있다.

 

어. 가독성이 더 떨어진 거 아닌가?

싶다면 명시적으로 매개변수를 넣어줘도 된다.

Human human1 = new Human(name:"mingling", age:17);

근데 굳이 쓰진 않는다.

매개변수 2,3개까지는 크게 헷갈릴 일이 없다.

애초에 생성자나 함수의 매개변수의 개수가 막 5개 10개씩 넘어가면

거의 절차지향 수준의 코딩을 하고 있는 실패한 코드인 것이다..

 


 

그래서 결론은

객체 지향 프로그래밍은 이런 객체(사물)의 기준에서 기능을 구현하는 것이다.