오늘은 프로그래밍에 있어서 정말 중요한 변수에 대해서 학습하고 문제를 페어와 함께 해결하는 시간을 가졌다.
변수를 선언하고 변수를 선언할 때 하드웨어에서는 어떤일이 일어나느지에 대한 원리까지 같이 이해하는 시간을 가졌는데 미리 들은 이야기들이 있었지만 조금더 명확해진 시간이었다. 동적으로 데이터 타입이 결정되는 자바스크립트를 먼저 배운 나에게는 타입을 설정해주는 것이 너무 불편하게 여겨졌었는데 사실 자바스크립트를 공부할 때도 타입이 동적으로 결정되서 오류가 많고 심지어는 런타임 오류로도 많이 이어질 수 있기 때문에 데이터 타입이 포함 된 Typescript(타입스크립트)를 배우라는 이야기를 많이 들었다.
그런 점에 있어서 오히려 Java를 통해서 프로그래밍의 기초를 단단히 할 수 있어 좋은 시간이었다.
나는 Java에 대한 내용을 나도코딩님의 9시간 기본문법 강의를 코드스테이츠 수강 전에 미리 들었고 유료 강의도 구매해서 90%정도 들었기 때문에 다시 한번 복습하는 마음으로 오늘 임했다.
변수 선언
변수, 영어로는 Variable 이라고 하는데 이것을 프로그래밍에서 왜 선언해야 할까?
컴퓨터는 데이터를 외부로 부터 입력 받아서 처리 및 연산을 하고 그 데이터 값을 출력장치를 통해 외부로 출력하는 전자장치이다. 데이터를 외부로 입력 받는 다는 것은 그것을 어딘가에 저장해서 담아 둬야 한다. 그래야 그 데이터를 이리저리 바꿔서 출력장치를 통해 출력해 줄 수 있을 것이다.
이러한 데이터들은 프로그램이 실행되었을 때 메모리에 할당이 된다. 메모리는 여러개의 메모리셀로 이루어져 있어서 각각의 메모리셀은 주소를 가지고 있어서 거기에 데이터가 저장되면 그 메모리 주소를 불러왔을 때 저장되어있는 데이터를 불러올 수 있다.
메모리 주소는 16진수로 0xa7d834f2 이런 메모리 주소를 순서대로 가지고 있다. (이거에 대한 내용은 추후 그림을 그려서 업데이트를 해야겠다)
하지만 우리가 하나의 프로그래밍을 할 때 다뤄야 할 데이터가 얼마나 많으며 재사용해야 할 것도 얼마나 많은가? 그거를 0xa7d834f2 이런 이름을 붙여 놓으면 아무도 어떤게 무엇을 의미하는지 모를 것이다. 그래서 이것을 사람들이 알기 쉽고 그 해당 데이터가 어떤 데이터를 가지고 있는지 의미있는 단어로 변수를 보통 선언한다.
public class VariableExample {
public static void main(String[] args) {
// 아래 부분만 보면 된다
// 변수 선언 -> 데이터 타입 + 변수 이름
// 정수형 데이터 타입 변수 선언
// 데이터의 크기비교 byte < short < int < long
// 요즘은 메모리 용량이 대부분의 PC나 스마트폰이 많이 늘어났기 때문에
// int를 많이 사용
byte test;
short test;
int test;
long test;
// 실수형 데이터 타입 변수 선언
double test;
float test; // float은 소수 뒤에 f를 붙여야함 ex) test = 3.12f
// 문자형 데이터 타입 변수 선언
char test; // character는 한글자를 가리킨다 ""가 아닌 ''로 선언 ex) test = 'A'
// 문자열 데이터 타입 변수 선언
String test; // 문자열을 편집할 수 있는 String class 의 메소드를 사용할 수 있다.
// 참, 거짓(논리형) 데이터 타입 변수 선언
Boolean test;
}
}
오늘 잘 알고 설명이 가능 했던 것
1. 변수가 메모리에 할당 되는 기초적인 원리
2. 변수를 선언하고 값을 할당 하는 것
3. 각 데이터 타입에 대한 이해
4. 문자열 데이터 타입을 편집 할 수 있는 다양한 메소드들
(charAt, compareTo, compareToIgnoreCase, concat, trim, contains, length 등등)
아래는 해당 메소드들을 직접 눈으로 확인해 볼 수 있는 코드이다.
public class Main {
public static void main(String[] args) {
String str = "Java";
System.out.println("문자열 : " + str);
// charAt() - 해당 인덱스의 문자를 불러옴
System.out.println("charAt()");
System.out.println(str.charAt(0));
System.out.println(str.charAt(1));
System.out.println(str.charAt(2));
System.out.println(str.charAt(3));
System.out.println("--------------------------");
// compareTo() - 인수로 전달된 문자열이 같다면 0, 보다 크다면 양수, 작다면 음수
System.out.println("compareTo()");
System.out.println(str.compareTo("Java"));
System.out.println(str.compareTo("javas"));
System.out.println(str.compareTo("abc"));
System.out.println(str.compareTo("JAVA"));
System.out.println("--------------------------");
//compareToIgnoreCase() - 대소문자를 구분하지 않고 비교
System.out.println("compareToIgnoreCase()");
System.out.println(str.compareToIgnoreCase("JAVA"));
System.out.println(str.compareToIgnoreCase("Java"));
System.out.println(str.compareToIgnoreCase("JaVa"));
System.out.println("--------------------------");
// 비교연산자로 비교
System.out.println("비교연산자 비교");
System.out.println(str == "java");
System.out.println(str == "Java");
System.out.println(str == "JAVA");
System.out.println(str == "abcd");
System.out.println("--------------------------");
// concat() - 인수로 전달된 문자열을 추가한 '새로운 문자열' 반환
System.out.println("concat()");
System.out.println(str.concat(" + Python"));
// System.out.println(str.concat()); -- error
System.out.println(str.concat(""));
System.out.println("--------------------------");
// trim() - 문자열의 공백 제거
str = "Java Python C++ JavaScript";
System.out.println("trim");
System.out.println(str.trim());
System.out.println("--------------------------");
// contains() - 인수가 문자열의 포함: true, 포함X: false
System.out.println(str.contains("Python"));
System.out.println(str.contains("python"));
System.out.println("--------------------------");
// length() - 문자열 길이
System.out.println(str.length());
}
}
역시 모든 것은 코드를 직접 손으로 쳐보고 콘솔에 출력해가면서 직접 눈으로 확인하고 값이 어떻게 변하는지 보면서 배우는게 가장 머리에 남는다
오늘 잘 모르고 설명 할 수 없었던 것
1. StringBuilder
2. StringBuffer
3. StringTokenizer
위의 세개 인데 이것들은 좀 더 공부해서 다시 포스팅 하는 것이 좋겠다.
오늘의 한줄평
변수 선언과 할당 그리고 데이터 타입에 대해서 배워서 코플릿으로 페어랑 같이 푸는 문제가 어려울까? 하는 생각이 있었다. 예상을 뛰어넘어 코드스테이츠는 우리가 배우지 않은 내용을 직접 검색해서 풀어야하는 문제들을 꽤 많이 해놨다. 이 방법이 당황스럽기도 하지만 나에게는 오히려 의지를 불타오르게 만들어준다. 다음주도 기대하며 화이팅!
'개발일지' 카테고리의 다른 글
[TIL] JAVA 기초 - 반복문 (0) | 2023.02.22 |
---|---|
[TIL] Java 기초 - If 조건문, 에러 해결 (0) | 2023.02.21 |
[TIL] Git, GitHub 기초 (1) | 2023.02.17 |
[TIL] 리눅스 CLI 기본 명령어 (feat. Ubuntu, WSL) (0) | 2023.02.16 |
[TIL] 컴퓨터 및 프로그래밍의 기초 이해, 웹 (0) | 2023.02.15 |