지금까지 배웠던 것들중 가장 길었던 Unit5 JAVA기초 파트가 끝이났다.
이 파트에서는 주로 개념에 대해 공부하고 코플릿으로 코딩을 해보는 시간을 갖는다. 코딩할땐 시간이 정말 빨리 간다.. 하루하루가 너무 빨라.. 또한 난이도가 올라가고 있다는것을 온몸으로 느끼고 있다. 점점 어려워져 ㅠㅠ
자바 파트로 들어온 첫날 같이 하시던 페어분께서 하차를 신청했다고 했다.
그렇게 짝을 잃어 버리고 낙동강 오리알이 되버린 나는 같은 그룹내 기존 그룹에 3인으로 들어가게 되었고, 새로운 활동을 시작하였다.
기존 그룹에서는 페어분이 전공자셔서 서로 코드를 리뷰하는 활동밖에 없었는데, 새로운 그룹에선 나말고 전부 비전공자분이셔서 나도 부족하지만 알려줄수 있는 부분에서는 최선을 다하여 알려주었다. 내 설명이 도움이 되었을땐 엄청 뿌듯하더라...
그렇게 페어 활동이 종료되었고 마무리로 딥토크 라는 그룹내 사람들끼리 서로를 알아가는 시간을 갖게 되었다. 비록 어색한 시간이였지만 다양한 분들이 여러 목적을 갖고 부트캠프를 지원하게 된점, 목표 등 알고 나니 큰 힘이 된 것 같다. 열심히 해야지!
JAVA
자바는 1996년 1월에 세상에 나온 객체지향 프로그래밍(Object Oriented Programming, OOP) 언어이며, 전자정부 프레임워크 등에 사용되면서 백엔드 개발 분야에서 가장 보편적으로 사용되고 있는 언어
운영체제에 독립적 - 자바 이전의 언어들은 특정 CPU에서만 작동하거나 특정 OS에 따라 다르게 작성해야 하는(C, C++) 언어들이 대부분, 자바는 이 문제를 해결하고자 JRE(Java Runtime Environment: JVM(자바 가상머신) + 표준 클래스 라이브러리)가 설치되어 있는 모든 운영체제에서 실행이 가능하도록 만들어졌다
객체 지향 언어(Object Oriented Programming, OOP) - 유지보수가 쉽고 확장성이 높다
함수형 프로그래밍 지원
자동 메모리 관리(Garbage Collection) - 가비지 컬렉터(Garbage Collector)를 실행시켜 자동으로 사용하지 않는 메모리를 수거
JVM(Java Virtual Machine) - 자바 프로그램을 실행시키는 도구 , 자바가 운영체제에 독립적인 것은 JVM이 있기 때문에 가능
JVM은 자바 코드로 작성한 프로그램을 해석해 실행하는 별도의 프로그램입니다. 즉, 프로그램을 실행하는 프로그램.
JRE(Java Runtime Environment) : JVM + 표준 클래스 라이브러리
JDK(Java Development Kit) : JRE + 개발에 필요한 도구
주로 사용하는 자바버전 3가지 - JDK 8 , 11 , 17
변수
변수(Variable) : 값이 변할 수 있는 데이터를 임시적으로 저장하기 위한 수단
변수 선언 - 저장하고자 하는 값의 데이터 타입과 함께 변수 이름을 작성 ex) int num
값 할당 - 변수에 값을 저장하는 것을 할당 또는 대입 ex) num = 1
변수를 선언하면서 동시에 초기화 가능 ex) int num = 1
상수
상수(Constant) : 변하지 말아야 할 데이터를 임시적으로 저장하기 위한 수단
상수는 final이라는 키워드를 사용해 선언할 수 있으며, 관례적으로 대문자에 언더바를 넣어 구분하는 SCREAMING_SNAKE_CASE를 사용 ex) final double CALCULATOR_PI = 3.14;
타입
타입은 어떤 값의 유형 및 종류를 의미하며, 타입에 따라 값이 차지하는 메모리 공간의 크기와, 값이 저장되는 방식이 결정
기본 타입(primitive type)
참조 타입(reference type)
리터럴
사전적으로 리터럴(Literal)은 ‘문자 그대로의'라는 뜻을 가집니다. 프로그래밍에서 리터럴이란 문자가 가리키는 값 그 자체를 의미
ex) int num = 1 에서 1이 리터럴
정수 타입
정수 타입은 숫자를 나타내는 타입으로, byte, short, int, long 의 총 4개의 타입으로 분류됩니다. 이들은 각각 차지하는 메모리의 크기가 다르며, 그에 따라 나타낼 수 있는 숫자의 범위가 다르다.
오버플로우
언더플로우
실수 타입
실수는 소수점을 가지는 값을 의미하며, float형과 double형으로 분류
오버플로우
언더플로우
논리 타입
논리 타입의 종류는 boolean형 한가지, boolean형은 참 또는 거짓을 저장할 수 있는 데이터 타입으로, 오직 true 혹은 false를 값으로 가진다.
단순히 참과 거짓을 표현하기 위해서는 1bit만 있으면 되지만, JVM이 다룰 수 있는 데이터의 최소 단위가 1byte이기 때문에 boolean형은 1byte(8bit)의 크기를 가진다.
문자 타입
문자 타입은 2byte 크기의 char형 오직 하나 , 문자형 리터럴을 작성할 때에는 반드시 큰 따옴표(””)가 아닌 작은 따옴표(’’)를 사용
String 타입
기본적으로 String 타입은 큰따옴표("")로 감싸진 문자열을 의미
선언한 변수에 문자열을 할당하는 방법
charAt() 메서드 - charAt() 메서드는 해당 문자열의 특정 인덱스에 해당하는 문자를 반환
compareTo() 메서드 - compareTo() 메서드는 해당 문자열을 인수로 전달된 문자열과 사전 편찬 순으로 비교, 만약 두 문자열이 같다면 0을 반환하며, 해당 문자열이 인수로 전달된 문자열보다 작으면 음수를, 크면 양수를 반환
concat() 메서드 - concat() 메서드는 해당 문자열의 뒤에 인수로 전달된 문자열을 추가한 새로운 문자열을 반환
indexOf() 메서드 - indexOf() 메서드는 해당 문자열에서 특정 문자나 문자열이 처음으로 등장하는 위치의 인덱스를 반환
trim() 메서드 - 해당 문자열의 맨 앞과 맨 뒤에 포함된 모든 공백 문자를 제거
toLowerCase() 메서드 - 해당 문자열의 모든 문자를 소문자로 변환.
toUpperCase() 메서드 - 해당 문자열의 모든 문자를 대문자로 변환.
연산자
비교 연산자는 boolean 타입으로 평가될 수 있는 조건식에 사용되며, 크게 대소 비교(>, <, <=, >=)연산자와 등가 비교(==, !=) 연산자로 분류
논리 연산자는 AND 연산자 &&, OR 연산자 ||, NOT 연산자 !를 포함하며, 공통적으로 boolean 타입을 반환
콘솔 출력
콘솔 입력
import java.util.Scanner; // Scanner 클래스를 가져옵니다.
Scanner scanner = new Scanner(System.in); // Scanner 클래스의 인스턴스를 생성합니다.
String inputValue = scanner.nextLine(); // 입력한 내용이 inputValue에 저장됩니다.
System.out.println(inputValue); // 입력한 문자열이 출력됩니다.
Scanner 클래스를 활용
scanner에는 문자열을 입력받는 nextLine()뿐만 아니라, 정수형을 입력받을 수 있는 nextInt(), 실수형을 입력받을 수 있는 nextFloat()등의 메서드들도 존재한다.
조건문
if문의 소괄호 안에는 boolean 값으로 평가될 수 있는 조건식을 넣어주고, 중괄호 안의 실행 블록에는 조건식이 참일 때 실행하고자 하는 코드를 적어준다
if (조건식) {
//조건식이 참이라면 실행되는 블록
}
if(조건식1) {
//조건식1이 참이라면, 실행되는 블록.
}
else if (조건식2) {
//조건식1이 참이 아니면서 조건식2가 참일 때, 실행되는 블록.
}
else {
//조건식1과 2가 모두 참이 아닐 때, 실행되는 블록.
//else문은 생략 가능.
}
switch문은 if문처럼 조건식이 true일 경우에 블록 내부의 실행문을 실행하는 것이 아니라, 변수가 어떤 값을 갖느냐에 따라 실행문이 선택된다.
switch(입력변수) {
case 입력값1: ...
break;
case 입력값2: ...
break;
...
default: ...
break;
}
반복문
for문은 조건식이 참인 동안 주어진 횟수만큼 실행문을 반복적으로 수행
public class Main {
public static void main(String[] args) {
int sum = 0;
// for (초기화; 조건식; 증감식)
for(int num = 0; num < 10; num++) {
sum += num;
}
System.out.println(sum); // 1~9의 합인 45가 출력됩니다.
}
}
for문이 정해진 횟수만큼 반복한다면, while문은 조건식이 true일 경우에 계속해서 반복한다.
for문과 while문은 초기화, 증감식의 위치만 다를 뿐 상호 대체가 가능.
(초기화);
while(조건식) {
실행문; //조건식이 참인 동안 실행
증감식;
}
while문은 조건식이 참일 때 코드가 실행되는 반면에, do while 반복문은 무조건 한번 이상 실행
do {
(1)실행문 //처음 한 번은 무조건 실행
} while((2)조건식);
break문은 반복문인 for문, while문, do-while문을 실행 중지할 때 사용
break문은 대개 if문과 같이 사용되며, if문의 조건식에 따라 for / while문을 종료 할 때 사용
for (...) {
break;
}
continue문은 반복문인 for문, while문, do-while문에서만 사용, continue문은 반복문을 종료하지 않고 다음 차례로 넘어가 계속 반복을 수행, break문과 마찬가지로 continue문도 보통 if문과 함께 사용하는데, if문의 조건을 만족하는 경우 continue문을 실행하여 그 이후의 코드를 실행하지 않고 다음 반복으로 넘어간다
public class Main {
public static void main(String[] args) throws Exception {
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) { //나머지가 0일 경우는
continue; //다음 반복으로 넘어간다.
}
System.out.println(i); //홀수만 출력
}
}
}
배열
배열이란, 동일한 타입의 값들을 하나의 묶음으로 묶은 자료 구조를 의미
1차원 배열을 선언할 때에는 다음과 같이 타입 뒤에 대괄호를 붙여서 선언하고 초기화할 수 있다
double[] temperatureOfJuly;
temperatureOfJuly = new double[31];
double[] temperatureOfJuly = { 27.4, 30.1, 31.1, 32.4, ..., 31.8 };
배열이 가진 요소의 개수를 배열의 길이 또는 크기라고 합니다. 배열의 길이는 배열참조변수_이름.length로 얻을 수 있다.
double[] temperatureOfJuly = new double[31];
System.out.println(temperatureOfJuly.length); // 31
int[][] kcal;
kcal = new int[31][3];
2차원 이상의 다차원 배열에서는 1차원보다는 자유로운 형태로 배열을 만들 수 있다. 즉, 배열이 2차원 이상일 때, 마지막 차수에 해당하는 배열의 길이를 고정하지 않아도 되며, 이러한 배열을 가변 배열이라고 한다.
int[][] ages = new int[5][];
이처럼 마지막 차수에 해당하는 배열의 크기를 지정하지 않으면 가변 배열이 생성
반복문을 활용하여 배열을 탐색할 수 있으며, 기본적으로 인덱스와 배열의 크기(length)를 활용하여 탐색한다는 점에서 문자열 탐색과 비슷하다.
int[] scores = { 100, 90, 85, 95, 100 };
int sum = 0;
for (int i = 0; i < scores.length; i++) {
sum += scores[i];
}
System.out.println(sum); // 470
int[] scores = { 100, 90, 85, 95, 100 };
int sum = 0;
int i = 0;
while (i < scores.length) {
sum += scores[i++];
}
System.out.println(sum); // 470