Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[1주차] Getter와 Setter는 필요한가? #4

Open
HyeonJun-Jung opened this issue Nov 21, 2024 · 2 comments
Open

[1주차] Getter와 Setter는 필요한가? #4

HyeonJun-Jung opened this issue Nov 21, 2024 · 2 comments
Assignees
Labels

Comments

@HyeonJun-Jung
Copy link
Collaborator

HyeonJun-Jung commented Nov 21, 2024

페이지

p 30

궁금한 내용

책을 읽으면서 Getter와 Setter의 존재가 객체 지향적인 설계에 있어서 어떤 영향을 미치는가에 대해서 생각해보았습니다.

Getter만 존재하는 경우에는 크게 문제가 없다고 생각됩니다. 외부에서 인자 설정을 위해 값을 얻어오는 경우도 있으니까요. 하지만 Getter와 Setter가 둘 다 존재하는 경우에는 변수를 public으로 설정한 것과 별 다를 바가 없다는 생각이 듭니다.

Setter로 인하여 클래스 외부에서 변경되는 경우가 생긴다면 값이 바뀌는 시점을 정확하게 추정할 수 없게 됩니다. 또한 다른 객체에서 로직을 수행하는 경우도 생기게 되어 책임이 분산되는 결과로도 이어지게 된다고 생각됩니다.
따라서 Setter를 쓰는 대신, 내부적인 함수 로직 내에서만 변경할 수 있도록 하는 것이 좀 더 코드의 유지보수 측면에서 유리하다고 생각됩니다.

아래의 Bag 코드에서도 SetTicket 함수가 굳이 필요하나? 라는 생각이 듭니다.

class Bag
{
public:
	Bag(long inAmount) : amount(inAmount)
	{}

	Bag(long inAmount, Invitation* inInvitation) : amount(inAmount), invitation(inInvitation)
	{}

public:
	long hold(Ticket* inTicket)
	{
		if (HasInvitation())
		{
			SetTicket(inTicket);
			return 0;
		}
		else
		{
			SetTicket(inTicket);
			MinusAmount(inTicket->GetFee());
			return inTicket->GetFee();
		}
	}

	bool HasInvitation() { return invitation != nullptr; }
	bool HasTicket() { return ticket != nullptr; }
	void SetInvitation(Invitation* inInvitation) { invitation = inInvitation; }
	void SetTicket(Ticket* inTicket) { ticket = inTicket; }
	void MinusAmount(long inAmount) { amount -= inAmount; }
	void PlusAmount(long inAmount) { amount += inAmount; }

private:
	long amount;
	Invitation* invitation = nullptr;
	Ticket* ticket = nullptr;
};

여러분들의 의견은 어떤가요?

@HyeonJun-Jung HyeonJun-Jung self-assigned this Nov 21, 2024
@9kyo-hwang
Copy link
Collaborator

제가 확인한 블로그 입니다. 읽어봐도 괜찮을 것 같아용

@HyeonJun-Jung
Copy link
Collaborator Author

확실히 Setter 대신에 특정한 기능을 수행하는 함수를 통해서 내부의 프로퍼티를 변경하는 방식이 변화의 Tracking에 있어서 더 좋은 것 같습니다.
Setter가 외부에서 무분별하게 호출되면 Tracking 하기가 힘들어서..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants