마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

플래그 값 지정할때 set메소드를 이용해서 정의해야 하나요?

0 추천
setMonthly(true);

 

private void setMonthly(boolean isMonthly){

    this.isMonthly = isMonthly;

}

->갖다쓸땐

if(isMonthly())

private boolean isMontly(){

    return this.isMontly;

}

이런식으로 쓰는지요.

아니면 그냥

isMonthly = true;

isMonthly = false;

이런식으로 정의 하고 갖다쓸땐

if(isMonthly)

이렇게 쓰는지요??

어떻게 쓰는게 표준인지 모르겠으니 계속 전자처럼 썼다가, 후자처럼 썼다가 혼동해서 쓰니까

복잡하고, 쓸때마다 어떻게 써야할지 모르겠네요.
슈퍼꽃붕어 (1,600 포인트) 님이 2015년 7월 13일 질문
슈퍼꽃붕어님이 2015년 7월 13일 수정

4개의 답변

+1 추천
윗분 말씀처럼 개발자 맘이죠.ㅎㅎ

 

public boolean isMonthly(){

return this.isMonthly;

}

저같은 경우 이처럼 단순히 변수 반환인 경우, 클래스 내부에서는 함수로 잘 쓰지 않습니다.

(물론 클래스 외부에서 조회해야한다면 쓰고있습니다.)

 

 

if( month > 3 && month < 6 && ( hour > 9 && hour < 18 ) && ( someFlag1 || someFlag2 ) ){

//do something.

}

근데 만약... 위와 같이 복잡한 식으로 구성되어있다면,  소스를 볼때마다 불필요하게 if문을 해석하는 과정을 거쳐야 하기에...

클래스 내부에서도 가독성을 위해 함수로 만들어서 사용합니다. 아래와 같이 함수로 만들고 if문에서는 함수를 호출합니다.

private boolean isMonthly(){

return month > 3 && month < 6 && ( hour > 9 && hour < 18 ) && ( someFlag1 || someFlag2 );

}

...

...

...

if(isMonthly()){

...

}

 

여담으로는 isMonthly()로 변수 반환하는거 보다 isMonthly 변수에 바로 접근하는게 7배정도 빠릅니다.(JIT환경)

구글 안드로이드 퍼포먼스 팁에서도 클래스 내부에서는 getter setter를 피하는게 퍼포먼스에 도움이 된다고 합니다.

http://developer.android.com/intl/ko/training/articles/perf-tips.html#GettersSetters
칠리님 (10,910 포인트) 님이 2015년 7월 13일 답변
0 추천
어떤 상황에서 쓰느냐에 따라 사용방법은 바뀌겠죠.

지금 getter, setter를 만들 필요가 있나요? 다른 객체에서 해당 값을 참조 한다던가 뭐 그런?

필요가 없다면  보통은 getter, setter 안만들고 그냥 사용 하시면 됩니다.

뭐 그래도 어떻게 개발하든지 그건 개발자 마음이라 표준이라고 정해진 것도 없습니다.
익명사용자 님이 2015년 7월 13일 답변
0 추천
public static으로 해놓고 직접 접근하면 편하긴 하죠

하지만 그렇게 추천드리고 싶진 않네요

100번 말로해서 쓰지말라고 해도 실제로 써서 문제가 닥치기 전까지는 잘 모릅니다. 편한데 왜 쓰지말라고 하는지

근데 나중에 문제가 생기면 이 변수를 어디서 바꾸는지 어디서 쓰는지 찾기가 너무 어렵거든요
중견수 (5,600 포인트) 님이 2015년 7월 13일 답변
0 추천
평소에는 속도도 빠르고 코딩도 편하기 때문에 사용하지 않으셔도 상관없으나.
아래 사항에 해당 할 경우에는 적용하시는게 좋습니다. 
 
1. 여러 쓰레드에서 플레그에 동시에 엑서스 할 경우 타이밍에 따라 의도하지 않는 동작이 될 수 있습니다.
그 경우 get/setter를 사용할 경우 synchronized 를 붙이는 등 동기화 처리가 쉬우나
아닐 경우 찾아서 critical section을 만들어주어야 하다보니 코드가 복잡해  질 수 있으며, 오동작이 될수도 있습니다.
 
2. 보안상 이슈로 다른곳에서는 함부로 접근되지 않고
반드시 getter, setter를 통해서만 엑서스 하도록 허용해야 할 경우가 있습니다.
(ex MVP 패턴)
익명사용자 님이 2015년 7월 13일 답변
...