해결된 질문
작성
·
47
답변 2
2
저는 동시성이 실제로 이슈가 되지 않는다면 가독성을 우선시하는 편입니다.
불필요한 상황에서 동시성을 고려한다면 코드가 매우 복잡해지기 때문이죠.
Game 클래스의 경우 하나의 프로세스에서 고립되어 사용될 의도로 만들어졌습니다.
따라서 이 경우 동시성보다는 가독성을 우선시하는게 좋습니다.
특히 지역변수는 머리에서 고려할 요소를 추가할 뿐만 아니라 지역 변수를 기준으로 여러 코드들을 결합시키기 때문에 메서드가 길어지면 리팩터링이 어려위지게 됩니다.
따라서 성능적인 이슈나 말씀하신 동시성처럼 특별한 고려사항이 정말로 이슈가 아니라면 가독성 중심으로 코드를 짜는게 좋습니다.
여기에서는 메서드를 이용해서 가독성을 높이기 위해 필드로 추출했습니다.
답변이 되었는지 모르겠네요. 🙂
그렇다면 가독성을 위해 필드를 만들지 않고 지역 변수를 사용하시는 주의신가요?
말씀하신 내용을 보면 필드는 모든 메서드가 해당 필드를 참조하는지 확인해야 하기 때문에 필드는 자제하고 지역변수를 써야한다는 내용으로 이해됩니다.
불필요한 지역변수는 줄이고 필드를 사용하되 클래스 안의 필드 수를 적게 만드는 방식으로 접근 범위를 제한하는게 좋습니다.
단일 책임 원칙 부분 강의를 보시면 가급적 함께 사용되는 필드와 메서드를 묶어서 클래스를 작게 만드는 원칙에 대해 다루고 있는데 이 부분을 참고하시면 될것 같아요. 🙂
0
안녕하세요, 인프런 AI 인턴입니다. Hika Maeng님, 3-2
강의에서 start()
메서드에서 running
변수를 필드 변수로 승격하는 것에 대해 고민하고 계신 것 같습니다. 이렇게 변수의 스코프를 조정하는 것에는 여러 가지 고려사항이 있을 수 있습니다.
지역 변수(Local Variable): 메소드 내에서 선언된 변수로 해당 메소드가 실행될 때만 메모리를 할당받고 실행이 종료되면 해제됩니다. 따라서, 변수의 범위가 메소드 내로 제한되어 있으므로 해당 메소드 외부에서는 접근할 수 없습니다.
필드 변수(Field/Instance Variable): 클래스의 일부로 선언된 변수로, 객체가 생성될 때 메모리를 할당받고 객체가 존재하는 동안 유지됩니다. 따라서, 해당 클래스 내의 다른 메소드들과 공유할 수 있습니다.
스코프 제한 우선: 지역 변수를 사용할 경우, 해당 변수의 사용 범위가 명시적으로 메소드 내로 제한됩니다. 이는 코드의 이해와 디버깅을 보다 용이하게 만들 수 있습니다.
필드 변수 사용: 변수가 여러 메소드 간에 공유되어야 하거나 객체의 상태를 나타낼 때는 필드 변수로 사용하는 것이 적합합니다. 특히, 객체의 생명 주기 동안 유지해야 할 상태를 표현할 때는 필드 변수가 필요합니다.
필드 변수를 사용할 경우, 특히 다중 스레드 환경에서는 동시성 문제가 발생할 수 있습니다. 예를 들어, 하나의 객체에 대해 여러 스레드가 동시에 접근하여 상태를 변경하려고 할 때, 예상치 못한 동작이 발생하거나 데이터가 일관되지 않을 수 있습니다. 이를 방지하기 위해 synchronized
키워드나 java.util.concurrent
패키지의 클래스를 사용하여 스레드 안전성을 확보할 수 있습니다.
여기 비슷한 주제를 다루고 있는 질문과 토론을 참조하시면 도움이 될 수 있습니다:
이러한 고려사항을 바탕으로, 변수의 사용 목적과 코드의 가독성을 모두 고려하여 적절한 위치에서 변수를 사용하는 것이 좋습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
음 동시성보다는 가독성이 더 문제라고 느껴요. 클래스를 처음 접하는 개발자는 running속성의 여파를 모든 메소드를 확인해야 확신할 수 있으니까요.
하다못해 필드로 승격할거면 isPlayRunning 정도로 한정된 이름을 써야한다는 생각입니다.