[포스코x코딩온] 스마트팩토리 2주차 회고 | C++ 클래스

이남웅·2023년 4월 9일
0

이번 시간에는 이전 글에서 말했던 클래스에 대해서 공부한 내용을 정리한다.

1. 클래스 기본 개념

C++의 클래스는 C++의 특징인 객체지향 프로그래밍을 활용할 수 있는 방식으로 필요한 데이터와 코드를 묶어 하나의 객체로 만든 객체들 간에 상호작용을 하도록 프로그래밍을 하는 방식을 말한다.

다음은 기본 사용 방법이다.

#include <iostream>
using namespace std;

class Position
{
	int x = 5;	// 필드
	int y = 7;

public:		// 접근 제어자
	Position(){}	// 생성자
    
    void print()	// 메소드
    {
    	cout << x << " " << y;
    }
};

int main(void)
{
	Position p;	// p 객체 생성
    p.print();
    
    return (0);
}

다음 코드는 x와 y의 값을 클래스를 활용하여 출력하는 코드이다. 클래스를 사용할 때에는 함수와 사용하는 방법이 비슷비슷하지만 몇가지가 크게 다르다.

  1. 클래스의 중괄호 닫아줄 때 중괄호 뒤에 ;(세미콜론)을 붙어주어야 한다.
  2. 메인함수에서 클래스를 사용하기 위해서는 객체를 먼저 생성을 해주어야 한다.
  3. 클래스에서 메인함수에서 사용하기 위해서는 접근제어자를 public으로 설정해주어야 한다.

클래스에서는 기존에 사용하던 변수나 함수의 명칭도 바뀌게 된다.

필드(변수): 클래스에서 값을 저장하는 변수
메소드: 클래스에서 선언된 함수
생성자: 객체가 생성될 때 자동으로 호출되는 메소드
접근제어자: 멤버 변수나 함수에 직접적인 접근을 막거나 허용하는 기능

2. 접근제어자

클래스를 처음 생성 후 변수나 함수를 생성할 때 접근제어자를 따로 작성하지 않으면 기본값으로 private가 설정된다. private는 다른 객체가 멤버를 알지 못하고 직접적인 접근 또한 차단하는 설정이다. public은 private와 반대로 멤버가 외부로 공개되어 제약없이 접근이 가능하다. 메인함수에서 클래스의 변수나 함수에 접근하기 위해서는 접근제어자의 적절한 설정이 중요하다.

private: 멤버가 외부로 공개되지 않고 직접적인 접근 불가
public: 멤버가 외부로 공개되어 제약없이 접근 가능
protected: private와 기능은 동일하지만 상송한 하위 클래스에 한해서 접근 가능

3. 생성자

생성자는 클래스와 같은 이름을 가진 메소드로 객체가 생성되면 자동으로 호출이 된다. 위의 코드에서는 생성자를 어떤 값이 없이 작성해주었지만 따로 작성하지 않아도 객체는 정상적으로 생성되고, 생성자는 자동으로 호출이 된다. 생성자는 객체를 생성 할때 넘겨 받은 값을 필드로 대입할 때 자주 사용한다.

#include <iostream>
using namespace std;

class Position
{
    int x = 0;
    int y = 0;

public:
    Position(int x, int y)
    {
        this->x = x;
        this->y = y;
    }

    void print()
    {
        cout << x << " " << y;
    }
};

int main(void)
{
    int x = 0;
    int y = 0;

    cout << "x와 y 값을 입력해주세요.";
    cin >> x >> y;
    Position p = Position(x, y); // p 객체 생성
    p.print();

    return (0);
}

클래스에서는 생성자뿐만 아니라 소멸자도 존재한다. 생성자와 형태는 비슷하며 마찬가지로 객체를 생성하면 자동으로 호출이 된다. 클래스 이름 앞에 "~"를 넣어주면 된다.

~Position()
{
	cout << "프로그램 종료";
}

4. getter & setter

getter, setter는 private 설정으로 클래스의 변수를 접근하지 못할 때 메소드를 통해 접근하는 방법이다. getter는 클래스의 변수를 반환해주는 메소드를 getter라고 하고, setter는 클래스의 변수에 값을 활당해주는 메소드를 setter라고 한다.

#include <iostream>
using namespace std;

class Position
{
	int x = 5;
	int y = 7;

public:
	Position(){}
    
    void print()
    {
    	cout << x << " " << y;
    }
    int getX()
    {
    	return(x);
    }
    void setX(int x)
    {
    	this->x = x;
    }
    
};

int main(void)
{
	Position p;
    p.print();
    cout << p.getX();
    p.setX(7);	// x를 7로 변경
    cout << p.getX();
    
    return (0);
}

위의 코드를 보면 함수를 생성하는 것 같이 메소드를 생성해주고 객체에서 메소드를 불러오는 방식으로 사용을 해주어 반환값을 private로 설정되어있는 필드를 반환하면 private의 변수도 접근할 수 있다. 값을 바꿔주는 것도 마찬가지로 메소드를 생성해주고, 매개변수로 받은 값을 private로 설정되어있는 필드로 초기화를 해주면 private가 설정되어있는 필드를 읽기뿐만 아니라 수정도 할 수 있게 된다.

오늘은 클래스의 기본적인 개념과 사용법을 배웠다. C언어에서 프로그래밍을 했던 것처럼 절차 지향 프로그래밍을 하면 직관적이고 코드를 해석하기가 쉽다. 하지만 코드의 길이가 길어질수록 관리해야하는 변수와 함수도 많아지는 만큼 유지보수가 힘들어진다. 프로그래밍을 할 때 클래스 없이 프로그래밍이 충분히 가능하지만 C++에서는 클래스를 충분히 활용하는 방안으로 프로그래밍을 하면 좋을 것 같다. 3주차부터는 지금까지 배운 내용을 바탕으로 요구하는 문제를 풀어보는 개인 프로젝트 시간을 갖게 되어 3주차에서는 작성한 코드를 설명하는 시간이 될 것 같다.

0개의 댓글