-
프로그래머스-옷가게 할인받기를 풀다가 복합할당연산자의 자동형변환에 대해서 알아본 이야기 *-*히딘쓰의 책상/└ java 2023. 7. 13. 16:46
프로그래머스 입문 문제인 옷가게 할인받기를 풀고 있었다
class Solution { public int solution(int price) { int answer = 0; if (price >= 500000) { price = (int) (price * 0.8); } else if (price >= 300000) { price = (int) (price * 0.9); } else if (price >= 100000) { price = (int) (price * 0.95); } return price; } }
나는 요렇게 작성하여 통과를 하긴 했지만,
다른 사람들 풀이를 보는데price = (int) (price * 0.8);위에 것 대신에
price *= 0.8;이렇게 작성한 사람들이 있었다.
보다보니 의문점이 들었다
price *= 0.8도 결국은
price = price * 0.8 과 같은 것 아닌가?
이건 왜 형변환 에러가 안뜨지? 하는 의문 말이다.
그래서 챗 GPT한테 물어봤는데 100% 정확한 답을 안하길래..ㅋㅋㅋㅋㅋㅋㅋ
구글링을 해보았다.역시나 비슷한 생각을 하신 분 발견!
https://cinnamonc.tistory.com/208[공부 쉬어가기] Java: 왜 복합 대입 연산자는 형변환 에러가 발생하지 않을까
Java에서 복합 대입 연산자(+=, -=, *= 등)를 공부하다가 아래와 같은 경우에는 에러가 발생하지 않는다는 사실을 알게 되었다. 상황 설명을 조금 하자면.. num이라는 변수는 데이터 타입이 short형이
cinnamonc.tistory.com
이 분은 short 형인 변수에 long형인 숫자를 더하는 경우였다.short num 10; num = num + 50L;이렇게 코드를 작성하면 에러가 발생하여 강제 형변환을 해주거나 해야하는데
num = num + 50L과 똑같은
num += 50L;요건 에러가 발생하지 않았던 경우.
이 분의 블로그에서 힌트를 얻어 복합연산자의 자동 형변환에 대해 찾아보았다.
다음은 오라클의 공식문서.
https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2
복합 연산자 +=, -=, *=, /= 등에서의 자동형변환에 대한 자바 명세상의 내용을 확인 할 수 있었다
다음과 같은 경우short x = 3; x += 4.6;밑의 (short)같은 형변환이 자동으로 붙게 되어있다.
short x = 3; x = (short)(x + 4.6);왜 그렇게 했는지에 대한 정확한 이유는 적혀있지 않은 것 같다.
그냥 내 생각에는 x += 4.6 같은 경우에는
너무 당연하게 x에다가 4.6을 더하는, x + 4.6을 다시 x에 대입하는, x에만 연산을 하는 식을 쉽게 사용하도록
복합할당연산자를 만들어 놓은 것이니까!!!!
자동으로 x에 맞는 형으로 변환을 시켜주는 것 같다.예를 들어,
short x = 2; x = (short) (x + 4.6) + 3.8;여기서 +3.8이 추가되어 에러가 생기는 경우가
x += 4.6 에는 없을 테니까..?
ㅎㅎ 자바 개발자가 나타나서 시원하게 대답해주고 가면 좋겠다 @0@'히딘쓰의 책상 > └ java' 카테고리의 다른 글
프로그래머스-문자열 내 p와 y의 개수 (0) 2020.12.16 프로그래머스-가운데 글자 가져오기 (0) 2020.12.07