System.out.printf("안녕하세요, %s님,", 홍길동)
자바에서는 오류가 나는 코드다.
왜 그럴까?
괄호 안에는 %s는 '문자' 데이터 타입을 입력하겠다는 변수다. 하지만, '홍길동'은 문자로 표현되지 않았다. 그렇게 되려면, "홍길동"이라고 쌍따옴표를 추가해야 한다.
자바는 변수의 데이터타입과 실제로 입력하는 데이터의 타입이 일치해야 제대로 작동한다. 그렇지 않으면 컴파일 오류를 낸다고 한다. 이러한 오류를 피하기 위해서 프로그래머는 int, short, long(정수)같은 코드를 사용해서 데이터타입이 '정수'라고 미리 지정해준다.
System.out.println(3*4)
=12
여기서는 34가 숫자라는 것을 (곱셈연산)를 통해서 알 수 있다. 실제로 입력된 것 역시 숫자다. 덕분에 결과 '12'를 내놓을 수 있는 것이다.
🔎데이터 타입?
자바에서는 변수를 선언할 때 데이터 타입을 지정해줘야 한다. 가령, 정수값에는 int를, 실수값에는 doulb을 표시해준다. 이를 통해 자바는 어떠한 데이터 타입을 저장할 것인지를 예측할 수 있게 된다. 덕분에 잘못된 종류의 값을 변수에 저장시키지 않는다. int 타입의 변수에 문자열을 입력하면 안 된다는 것을 알 수 있다는 뜻!
(❓데이터 타입은 각각 메모리에서 일정한 공간을 차지한다. int는 32비트 정도를 차지한다. 숫자로는 약 -21억에서 21억까지의 정수를 저장할 수 있다. 이러한 범위를 초과하는 숫자를 저장하면 메모리 오버플로우가 발생한다. 잘못된 종류의 값을 변수에 저장하면 이런 문제가 발생할 수 있다)
데이터 타입을 입력함으로써 프로그래머의 의도대로 데이터를 처리할 수 있다는 것이 중요한 포인트. 또한, 코드의 가독성도 높여준다. 제대로된 공식을 사용하면, 그 공식을 아는 사람들이 쉽게 코드 내용을 이해할 수 있으니!
int i = 1;
int j = 1;
for(i = 1 , j = 1 ; i<=10 ; i++ , j++);
초기화 부분에는 변수가 2개가 들어갔다. 조건부분에는 i에 대한 조건만 있다. 결과는 ?
i=11
j=11
🔎 for(초기화 ; 조건 ; 업데이트)
-초기화:반복에 사용될 변수를 초기화하는 데 사용
-조건:반복문이 계속 실행될지 여부를 결정하는 논리적 표현을 작성하는 공간이다. true면 반복문의 내용이 실행. false면 반복 종료.
-업데이트:반복 후에 실행되는 코드를 작성하는 공간
for 반복문에서 조건을 만족하면 초기화 부분에 있는 변수를 계속 업데이트해야 한다. 나는 처음에 i에 대한 조건만 있어서 j에 대한 조건도 넣어야 하는 게 아닌가? 라는 생각을 했다.
답은 "그렇지 않다."이다.
루프를 반복해야 할지 여부를 결정 지을 때는 조건 내용이 true인지 false인지를 따진다. 즉, i가 10보다 작거나 같을 때까지 초기화 부분에 있는 변수들을 계속 업데이트해야 하는 것이다. 이 조건 내용만 true라면 초기화 부분에 있는 변수들 i와 j는 루프가 시작될 때마다 반복된다. 조건문은 단지 루프를 시작할지 말지를 결정짓는 거라서, 꼭 변수j에 대한 조건까지 같이 들어갈 필요는 없다고 한다.
(❓애초에 조건문에는 조건이 하나만 들어가는 것이 좋다고 한다. 여러 개의 조건을 넣으면 어떤 순서로 처리해야 하고, 어떻게 평가해야 하는지 모호해지기 때문이다. 코드의 가독성과 예측 가능성을 유지하기 위해서 기본적으로는 하나의 논리적 표현식만 들어갈 수 있음!)