본문 바로가기
with my rubber duck/errors

boolean method 와 return과의 전쟁 기록

by stilinski 2022. 4. 1.
728x90

이 에러는 에러문이 나오는 그런 에러는 아니고,,
지극히 개인적인 logic error다.






반복문 안의 return값은 인식 못하는 불리언 메서드

반복문 안에있는 return값은 밖에서 인식 못 함.

그래서 타입을 void로 바꿨더니 이번엔 리턴 값이 있으면 안 된다 난리.^^
어쩌라는겨


반복문 빼주면 리턴타입 =오류 없어짐




그러나 그것은 내가 원하는 로직이 아니었으므로...
이것저것 시도해보다가 그럴싸해 보이지만 심각한 오류를 갖고 있는 코드를 짜게 됨...






잘못된 로직을 소개합니다^^

이 코드는 완전히 잘못됨

가장 문제되는 부분은 이것. 이 코드은 항상 false를 리턴할 수밖에 없음.
나는 if문을 써서 해당 조건에 false면 false가 나오게 하고 아니면 if문을 빠져나와 밑에 있는 true를 리턴해주길 바랬음. (else붙여서 return true 쓰면 method가 boolean값 리턴하라고 난리 쳐서 저렇게 써버림;;) 근데 이건 완전히 잘못된 생각이었다.




반복문에서 return을 만나면 그 반복문은 종료된다!

반복문뿐만 아니라 해당 메서드 자체에서 빠져나옴.

내가 작성한 상태가 심각해 보이는 코드의 치명적 오류는 이렇다.
return true는 반복문의 밖에있기때문에... 반복문에서 값이 if조건에 맞아 return false를 만나게되면 밑에까지는 오지도않는다...!!


만약 저기 arr의 길이가 2라고 해보자
그리고 arr[0] 에는 if조건에 true를 리턴해야 할 값이 들어있고 arr[1]에는 false를 리턴해야할 값이 들어있다고 치자.
반복문이 돌면 최종 리턴은 false다. true를 반환하는 리턴은 밖에있다. 마지막 값이 false니까 이건 그렇다 치자.
근데 반대의 경우 0 = false고 1 = true 값이어도 최종 리턴 값은 false임.
왜냐면 0번째에서 false를 만났을 때 반복문에서 나가버림. 1번째 반복문을 돌리지 않고 끝나버리니까
뭘 해도 false만 나옴.



그러니 이 메서드를 호출한 부분인 이부분

이부분에서 반복문을 몇번을 돌리건간에 저곳에 대입되는 값은 false일 수 밖에 없음.

이런경우 불리언 메서드에 배열을 넣어서 반복문을 돌리는 게 아니라 값을 넣어야 할 거 같다.

이러한 불리언메서드 + for + if조건문은 뭔가 그 데이터안에 무언가 하나라도 다른것이 있으면 안되는경우..?에 쓰는 거 같다.



사실 이 코드를 보고 내가 위에서 짠 불리언 메서드가 자체 잘못된 것이 아니라 그 전체 로직이 잘못된 것임을 깨달았다.
이 불리언 메서드 코드는 내가 위에서 짠거랑 구조가 똑같다.. 반복문 밖에 리턴값이 하나 더 있는 구조.
근데 이건 의도대로 잘 돌아감.

여기서 이 코드는 문자열을 받아서 그 문자열이 숫자인지 문자인지 구분하는 코드이다. (문자열에 문자가 하나라도 있으면 문자로 간주 ex) 245-24)
문자하나하나를 조건문에 받아서 차례로 확인해보다가 거기서 문자가 하나라도 나오면 false를 반환하고 반복문이랑 메서드에서 아예 빠져나온다. 뒤에거는 보지도 않는다.
만약 문자가 없다면 반복문을 다 돌고나와서 밑에있는 트루를 리턴한다.





아오 진짜 이거 문제 해결 못해서 다음 거 하기 너무 찝찝해가지고 계속 붙들고 있었는데 속 시원하다 행벅 ㅎ

728x90

댓글