인프런 커뮤니티 질문&답변

김인도님의 프로필 이미지
김인도

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

질문

해결된 질문

작성

·

118

·

수정됨

0

System.out.printin("str1==str2:"+(str1==str2));

여기서 출력값이 왜 true혹은 false로 나오는건가요? 앞에 +가 참거짓을 나타나게해주는건가요? 디테일한 설명이 없어서 따라가기가 힘듭니다..

 

 

강의수준에는 입문이라고 되어있는데

전혀 입문강의가 아니네요ㅜㅜ

지금 강의 하나만 계속 반복해서 듣고 저게 무슨말이지 하면서 진도를 나갈수가없네요.

열심히 따라가고 싶은데 힘드네요.

답변 1

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

안녕하세요, 수강해주셔서 감사드립니다.

 

출력 부분에서 제가 좀 더 섬세한 설명을 했어야 했나 싶습니다.

 

질문 주신 부분은 타입캐스팅 (형변환)이라고 합니다.

굳이 다루지 않은 이유는 모든 형변환을 외울 시간에 다른 로직과 연산자를 배우는 것이

짧은 기간 안에 합격(60점)으로 가는 지름길이라고 생각했기 때문입니다.

형변환을 모든 언어에서 모든 타입으로 다루기에는 생각보다 배워야 할 것이 넓고 깊습니다.

 



해설:

일단 ==, <=, >= , != 와 같이 비교하는 연산자의 경우에는

C언어에서는 거짓이면 0, 참이면 1을 리턴(돌려준다)합니다.

Java에서는 true, false를 반환합니다.

 

프로그래밍 언어에서 보통 참/거짓을 저장하는 데이터는 boolean 형태라고 하는데,

이 형태는 문자와 더하는 순간 형변환이 발생합니다.

형태가 바뀐다는 것이죠.

('나는 boolean이었는데 문자하고 더하라고 하네? 그러면 내가 문자로 바뀌어야겠다.')

 

그래서 문자열로 변환해서 앞에 있는 문자 뒤에 붙입니다.

(문자끼리는 더하면 붙기 때문입니다.)

 

C언어는 Java와 달리 출력합니다.

왜냐하면 애초에 출력하는 템플릿 자체가 문자열인데,

거기에다가 출력할 값의 형태만 지정하기 때문입니다.

#include <stdio.h>

int main() {
    int a = 5;
    int b = 10;
    
    // 비교 연산자 결과
    int result = (a == b);
    
    // 비교 결과와 함께 문자열 출력
    printf("a == b: %d\n", result);
    
    // 다른 예시
    result = (a < b);
    printf("a < b: %d\n", result);
    
    result = (a > b);
    printf("a > b: %d\n", result);
    
    result = (a != b);
    printf("a != b: %d\n", result);
    
    result = (a <= b);
    printf("a <= b: %d\n", result);
    
    result = (a >= b);
    printf("a >= b: %d\n", result);
    
    return 0;
}

코드의 출력값:

a == b: 0

a < b: 1

a > b: 0

a != b: 1

a <= b: 1

a >= b: 0

 

이 경우에는 문자열 a (연산값) b: %d\n 로 템플릿이 지정되어 있습니다.

C언어에서는 boolean값과 문자를 더할 수는 없습니다.

 

다만, 특정 헤더(header)파일을 가져오게 되면 더해질 수도 있습니다.

헤더파일이란 우리가 매번 맨 위에서 지정하는 ㅇㅇㅇ.h 파일을 말합니다.

특정 헤더파일을 가져와야 우리가 C언어에서 제공하는 다양한 함수를 사용할 수 있습니다.

#include <stdio.h>
#include <stdbool.h> // C99 표준 이후

int main() {
    bool flag = true;  // 또는 int flag = 1;
    char letter = 'A'; // 아스키 코드 값 65

    // flag 값과 letter 값을 더하기
    char result = letter + flag;

    // 결과 출력
    printf("The value of letter: %c (ASCII: %d)\n", letter, letter);
    printf("The value of flag: %d\n", flag);
    printf("The result of letter + flag: %c (ASCII: %d)\n", result, result);

    return 0;
}

이 경우에는 출력값이

The value of letter: A (ASCII: 65)

The value of flag: 1

The result of letter + flag: B (ASCII: 66)

이렇게 나옵니다. false를 더하는 경우 그대로 65입니다. (0으로 취급)

 

 

요약하자면,

비교 연산자의 결과값은 true 혹은 false일텐데

이것을 문자와 더하는 순간 문자 형태로 바뀝니다.

 

감사합니다.

김인도님의 프로필 이미지
김인도

작성한 질문수

질문하기