안녕하세요. 오랜만에 질문 올립니다.
어쩌면 남들은 잘 신경 안쓸수도 있는 문제일지도 모르지만,
계속 코딩하다보니 문득 궁금해져서 이 질문을 드립니다.
멤버 변수와 지역 변수에 관련됐다고도 할 수 있는 질문인데요.
바로 본론으로 들어가겠습니다.
(아래 두 코드들은 제 질문을 좀 더 구체화 시키기 위해
임의적으로 간단하게 만들어낸 벽돌깨기 코드 일부입니다.)
1.
mThread = new Thread(new Runnable()
{
@Override
public void run()
{
float ballTop = mBall.getTop();
float ballBottom = mBall.getBottom();
float ballLeft = mBall.getLeft();
float ballRight = mBall.getRight();
// 공의 상하좌우 구하기
if(ballLeft <= 0 || ballRight >= getWidth())
mBall.setSpeedX(-mBall.getSpeedX());
// 공이 가로 벽에 부딪쳤을 경우 속도(정확히는 방향)를 반전 시킨다.
if(mBallTop <= 0 || mBallBottom >= getHeight())
mBall.setSpeedY(-mBall.getSpeedY());
// 공이 세로 벽에 부딪혔을 경우 속도(정확히는 방향)를 반전 시킨다.
Block one = getBlock(x, y);
Block two = getBlock(x, y);
Block three = getBlock(x, y);
// 현재 블록 위치 좌표 값 구해오기
float padTop = mPad.getTop();
float padLeft = mPad.getLeft();
float padRight = mPad.getRight();
if(ballLeft >= padLeft && ballRight <= padRight && ballBottom >= padTop)
mBall.setSpeedY(-mBall.getSpeedY());
// 공이 패드에 충돌했을 경우 Y 좌표 이동 방향을 반전 시킨다.
...
...
...
}
}
2.
mThread = new Thread(new Runnable()
{
@Override
public void run()
{
setBallTBLR();
// 공의 상하좌우 구하기
checkWallCollision();
// 공이 벽에 부딪혔을 경우 속도(정확히는 방향)를 반전 시킨다.
getBlockXY();
// 현재 블록 위치 좌표 값 구해오기
checkPadCollision();
// 공이 패드에 충돌했을 경우 Y 좌표 이동 방향을 반전 시킨다.
...
...
...
}
}
1번 코드는 스레드 안에서 모든 걸 수행합니다.
2번 코드는 스레드 안의 코드를 깔끔하게 정리하기 위해 각 기능별로 메소드를 만들어 수행합니다.
간단명료하게 질문하자면, 여러분들은 위 1번, 2번 두 개의 코드 중 어느 코드를 더 선호하나요?
여러분들이 코딩하는 방식은 1번인지 2번인지 알고 싶습니다.
그냥 자기만의 코딩 스타일로 하면 되지 않냐고 생각하실 수 있겠지만,
다른 사람들은 어떨지 몰라도 저는 그게 쉽지가 않더군요.
전역 변수와 지역 변수의 값을 초기화하고 할당하고 수정하는 모든 과정에서 좀 더 효율적으로 관리하려면
CPU가 어떻고 메모리가 어떻고 등에 대한 하드웨어의 이해도 필요하고, 당장에 검색 조금만 해보셔도 아시겠지만
반복문 또는 쓰레드의 내부에 변수를 선언 및 사용하는 것과 외부에 선언 및 사용하는 것중에
뭐가 더 괜찮은가에 대한 것 조차도 의견들이 많이 엇갈립니다.
오래전부터 이어졌던 논쟁임에도 불구하고 말이죠.
저는 뚜렷한 답을 얻지 못하면 이런 거에 신경 많이 쓰는 피곤한 성격을 가진지라 ...
저만의 코딩 스타일을 만들어 나가는 게 어려운 거 같습니다.
서론이 너무 길었군요. 주절주절 말이 많았지만, 그냥 제가 궁금한 건 딱 하나 입니다.
여러분들은 1번인지 2번인지 ...
뜬금없는 새벽 질문이었습니다. 화이팅 하는 하루 되시길 바랍니다 !