JAVA

자바 개발자 양성과정 1주차

J휘 2024. 7. 7. 19:29

1주차 강의가 끝났다.

먼저 진도는 객체 전(배열)까지 나갔고 반복문, 조건문 등 배웠는데

일주일 전의 나는 고작 아는 거라곤 자료형, if문 형태, for문 형태 밖에 몰랐다.

전엔 for(int i = 0; i<array.length(); i++)  << 이정도의 활용조차 몰랐지만 이젠 너무나도 쉽게 해낼 수 있게 됐고

이대로만 하면 될 것 같다.

 

배우면서 헷갈렸던 것들과 잘 알아둬야 하는 것들을 기록해뒀으니 다시 복습해 보자면

 

1. printf를 이용한 실수형 소수점 컨트롤

printf를 사용해서 실수형을 출력을 할 때는 %.2f 으로 쓰면 소수점 2번째 자리까지 나타낼 수 있다.

 

2.문자(char)입력 받기

char형을 입력받을 때는 sc.nextLine.charAt(0) 으로 써야하는데

먼저 String으로 입력받고 그 뒤에 그걸 charAt(0)을 붙여서 문자열 0번째 인덱스(1개라서 char)을 받아주면 된다.

 

3.문자열 비교

이제는 익숙해졌지만 초반에 헷갈렸던 문자열 비교이다.

문자열은 int형과는 다르게 ==을 이용한 비교가 안 되기 때문에 함수를 이용해야하는데

문자열.equals(비교문자열);  을 이용하면 된다.

그리고 여기서 알아둬야 할 점이 있는데

char형은 int처럼 ==을 이용해서 비교가 가능하다 (아스키코드로 인해 숫자로 변환되기 때문)

 

4. &&연산자에서 왼쪽 False이면 오른쪽은 결과가 어쨌건 결과가 False이기 때문에 실행이 안 된다.

 

5. Math.random()의 사용법

랜덤값을 반환해주는 함수인데 최대, 최소 값을 정하는 식은

(int)(Math.random() * ((최대값 + 1) - 최소값)) + 최소값  이렇게 된다.

앞에 int를 붙히는 이유는 int로 형변환을 하기 위해서고,

다시 Math함수를 크게 소괄호로 감싸는 이유는 연산을 먼저하게 하기 위해서이다.

만약 감싸지 않으면 Math.random이 먼저 int형으로 형변환이 되기 때문(왼쪽 -> 오른쪽 순으로 코드실행)

 

5. 문자열의 i번째 문자 출력

str.charAt(i) 

String 자료형 str의 i번째 위치한 문자를 찾는 코드이다.

인덱스 번호이기 때문에 언제나 0부터 시작한다는 점 인지!

 

=======================================

배열부터는 조금 이제 활용과 메모리에 대해서 조금씩 배우게 돼고

난이도가 조오금 올라갔기 때문에 알아둬야 할 게 좀 있다.

 

변수: 메모리 상에서 자료형으로 공간을 선언하는 것.

그 중에서도 배열은 <참조변수>중 하나인데 

참조변수란 주소를 담고 있는 변수를 말한다. (우리가 지금까지 배웠던 일반변수)

 

참조변수(배열)가 값을 담고있는 일반변수와 다르게 주소를 담고 있는 이유는 

가변적으로 얼마나 커질지 모르기 때문에 크기는 메모리 상에서 존재하고 그 위치를 담아 이용하는 것.

개인적으로 이 개념을 꼭 알아야 할 것 같다. 나중에 다른 개념들을 이해하기 편할 거 같은 느낌..

# 실제로System.out.println(arr); 을 해보면 이상한 문구(자료형, 길이, 주소정보)가 출력된다.

 

그리고 이제 배열에서 가장 많이 쓰이는 패턴이

for(int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}

이런 모양인데 실제로 배열만 나왔다 하면 거의 무조건 쓰인다.

이건 1차원 배열의 경우이고 2차원 배열로 들어가면 조금 길어지는데

arr.length하면 1차원 배열의 길이(행)고,

arr.length[0]하면 2차원 배열의 길이(열)이 된다.

이 다음 3차원 배열부터는 거의 쓰이지 않는다고 한다, 왜냐하면 보통 사람이 3차원 배열을 보고 단번에 위치를 파악해내지 못하기 때문이라고...(강사님 피셜)

 

[배열의 특징]

# 인덱스의 초기화를 하지 않아도 값들이 담겨있다,

ㄴ 왜냐하면 배열은 Heap메모리에 위치해 있는데 이 Heap메모리 공간은 절대 빈 공간을 허용하지 않기 때문.

그래서 JVM( Java Virtual Machine = 자바 가상 머신 )이 기본값으로라도 초기화를 진행(0으로)

String형은 null로 초기화 된다.

 

#참조변수(배열)에 NULL을 넣게 되면 주소가 없어지기 때문에 기존에 연결됐던 배열들은 메모리 상에서 미아가 된다.(풍선의 끈을 놓는 걸 생각하면 편하다)

그리고 주소를 잃어버린 배열들은 Heap영역을 떠돌아다니게 되고 "불러올 수 없는 상태"가 된다.

그리고 시간이 지나면 GC(가비지 컬렉터)가 알아서 지운다고한다..

이런걸 자바에서의 "자동메모리관리"라고 하고 이런 것 덕분에 개발자가 코드에만 집중이 가능하다고...

 

일단 첫주차에서 배운 것들중 헷갈리거나 중요한 것들은 이정도가 되고

이제 객체를 3주 동안 배우게 되는데 

강사님 왈)

객체 열심히 해야돼요.. 못하면 6개월의 반은 타노스 당한다고...(흠..)

객체가 이제 c언어에서의 포인터 같은 포지션인듯

 

 

===============================================================================

[잡담]

 

이렇게 티스토리를 글로만 빽빽하게 채우는 게 맞나 싶긴한데 그렇다고 그림까지 넣어야 할 건 아닌 거 같고,,음..

다른 개발자 준비중인 분들 포스팅을 보면 배웠던거 전부 다 정리하던데 내가 강의해줄 것도 아니고

배웠던 내용을 모두 정리하는건 좀 비효율적이고

이렇게 중요한/헷갈린 요소들만 정리하는 게 맞다고 생각한다. 나의 기록이니까

 

주말에 과제를 주셔서 풀었는데 10번 배열문제가 조금 긴 것 빼고는 딱히 어렵게 내주시지 않은듯

평소에 풀던 문제에 비하면 난이도가 2개는 내려간 느낌..

 

강사님이 전에 얘기 하셨듯 

놓고 있으면 어디서 잡아야 할 지 몰라서 못따라간다는 말

누구보다 내가 가장 잘 알고있다. 10번도 넘게 그랬으니까..

하지만 지금 일주일이 지난 시점에서의 나는 과거의 어떤 나보다도 코딩을 잘 한다.ㅋㅋ(얼마나 못했던거지)

못 따라 갔던 그 위치를 이미 지났다는 것.

 

사실 근데 안 해서 못따라 간 거 였다. (코딩 공부를)안 했었기 때문에 실패했고, 그래서 국비지원을 했다.

제대로 안 해보고 포기하면 "나중에 제대로 해봤다면 됐을까" 라는 공포스러운 궁금증이 생길까봐. 

 

요즘 바쁘지만 불안감이 없어졌다. 잘 하고 있다는 거 겠지 :)

 

세미나 때 중년의 강사님과 현재의 최00강사님 두 분의 말씀대로 

"포기하지만 말자"