주간 인기 게시물

총 게시물 6,497건, 최근 0 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[자유]

새벽에 뜬금없는 코딩 스타일 질문

글쓴이 : hsw728 날짜 : 2018-06-05 (화) 02:36 조회 : 1025
글주소 : http://www.androidside.com/B10/65368
 
  한글과컴퓨터학원코딩
영재교육원 정보영재, 정보올림피아드, C언어 프로그래밍, 자바, 파이선, 알고리즘
www.hancomac.com
  아두이노 교육쇼핑몰 에듀이노
아두이노 매뉴얼, 조립서,강의자료 제공, 교육용 키트/스마트카/로봇 특가판매
www.eduino.kr
  코딩 무료교육 캔랩
제 4차 산업혁명을 대비, 어린이 청소년을 위한 전문가들의 재능기부 무료 교육장.
www.canlab.co.kr/
신청하기


안녕하세요. 오랜만에 질문 올립니다.

어쩌면 남들은 잘 신경 안쓸수도 있는 문제일지도 모르지만,
계속 코딩하다보니 문득 궁금해져서 이 질문을 드립니다.

멤버 변수와 지역 변수에 관련됐다고도 할 수 있는 질문인데요.

바로 본론으로 들어가겠습니다.

(아래 두 코드들은 제 질문을 좀 더 구체화 시키기 위해
임의적으로 간단하게 만들어낸 벽돌깨기 코드 일부입니다.)



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번인지 ...

뜬금없는 새벽 질문이었습니다. 화이팅 하는 하루 되시길 바랍니다 !




추천/비추천 클릭하면 추천받으신 분, 추천하신 분 모두에게 포인트가 지급됩니다.

OSKiller 2018-06-05 (화) 08:42
전 케바케인것 같은데요
함수안에 라인이 50라인 이상 되면 그아네서 또 기능을 쪼갤수 있는지 확인 합니다
근데 아무리 길어도 연속성에 있어서 중요하다면 그냥 한덩어리로 놔둘수도 있습니다.
댓글주소 추천 0
은빛파도 2018-06-05 (화) 09:46
개인 프로젝트일 경우

기존 스타일은 중복이 생기거나 큰 틀로 나눠질수 있을 때 함수로 쪼갰었는데

리액티브로 전향한 뒤로는 2번 스타일 선호합니다.

업체 프로젝트일경우

문서를 함수별 정리로 요구하는 곳이 많아서 최대한 함수 안 만듭니다.. -_-;;
댓글주소 추천 0
덧없음 2018-06-05 (화) 10:24
전 유지보수를 중점으로 봅니다. 나중에 변경이 됐을때 대응하기 쉬운가.. 그래서 2번.
댓글주소 추천 0
뉴키 2018-06-07 (목) 07:39
1번처럼 하다가 2번으로 바꾸죠.

그래서 매번 후회..
댓글주소 추천 0
노련한너구리 2018-06-08 (금) 14:34
1/2번 둘다 겸용으로 사용합니다.
단순 반복 위주면 1번, 여러가지의 경우의 수가 많은 다양한 경우는 2번

벽돌깨기도 단순하게 깨기만 있으면 1번
특정 블럭에서 아이템이나 속도변화 같은 이밴트가 있으면 2번
댓글주소 추천 0
어이쿠절언 2018-06-18 (월) 10:37
위에 내용 처럼 내용이 짧으면 스레드 부분만 따로 메소드를 만들 것 같네요..
메소드 내용이 길다면 스레드에서 큰 줄기랑 기능 파트를 나누어서 메소드 제작하구요
댓글주소 추천 0
인절미후후 2018-08-19 (일) 13:10
2번입니다. 기왕이면 함수 멤버변수로 전부 해결하기 보다 인풋과 아웃풋이 있는 함수가 퓨어함수가 될수 있는 좋은 방향이라고 봅니다,
댓글주소 추천 0
이전글  다음글  목록 글쓰기

 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기