기간 : 220919~220923
이번 주부터는 Java 기초강의를 시작한다.
앞으로 쭉 사용하게 될테니 이번 기회에 확실하게 배우고넘어가고싶다 💯
프로그래밍이란?
자바의 특징
WORA (Write Once, Run Anywhere)
장점
바이트 코드
리터럴
변수
자료형 변수명 = 값;
int score = 100;
공간
<- '수' 자체는 ❌, 하나의 박스로 기억하자명명규칙 ❗️
- 변수이름은 의미있게 명명
- 영문자(대소문자 구분), 숫자, _, $ 로만 구성
- 숫자로 시작될 수 없음
- 공백 포함 X
- 미리 정의된 키워드나 예약어는 사용 불가
- Lower Camel Case 채용 ex) totalScore
상수
final 자료형 변수명 = 값;
final double PI_CONST = 3.14;
어떨 때 이용?
- 프로그램에서 에러가 난 경우 에러코드/에러메시지를 저장할 때
- 프로그램의 기본적인 환경설정정보를 저장할 때
- 고정적으로 들어가는 값에는 상수를 사용
(코드 변경 시 상수 선언부만 변경하면 모두 변경된다!)
변수는 초기화 되어야 사용할 수 있다❗️
온라인 강의와 오프라인 강의를 같이 진행하다보니 진도가 살짝살짝 안맞는 경우가 발생했다 😅
온라인 강의는 예습용으로 생각하고 블로그에 포스팅할 때는 오프라인 강의를 정리하고 예습했던 온라인 강의의 내용을 보충하여 적어놓기로 😁
입력 메소드
사용자 입력 데이터
를 입력받을 수 있는 함수import java.util.scanner; // import를 통해 scanner 클래스를 가져온다
public class InputExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// System.in으로 입력한 값을 바이트 단위로 읽음
String name;
System.out.print("이름을 입력하세요: ");
name = sc.next();
}
}
문자 하나만 입력받고 싶은 경우 (문자열을 입력받는 함수는 존재 ❌)
char character = scan.next().charAt(0); // -> 문자열 중 0번째 단어부터인데 어차피 한글자만 들어간다
출력 메소드
System.out.println()
: 문장 마지막에 엔터를 포함하여 출력System.out.print()
: 문장 마지막에 엔터를 미포함하여 출력System.out.printf()
: 포맷에 맞춰 문장을 출력하는 함수%3d
: 출력할 전체 자리수 지정(오른쪽 정렬)%03d
: 전체 자리수가 지정된 경우 왼쪽의 남는 자리에 0을 출력 %-3d
: 왼쪽 정렬하고 빈칸에 공백 출력3.2f
: 소수점 아래 자리수 지정. 잘리는 소수점 자리수는 반올림%b
: boolean 형식으로 출력%d
: 정수 형식으로 출력%o
: 8진수 정수 형식으로 출력%x or %X
: 16진수 정수 형식으로 출력%f
: 실수 형식으로 출력%c
: 문자 형식으로 출력%s
: 문자열 형식으로 출력%n
: 줄바꿈 기능%e or %E
: 지수 표현식의 형식으로 출력자료형
원시 타입 : boolean, char, byte, short, int, long, float, double
참조 타입 : String (String은 클래스❗️)
정수형 | 문자형 | 실수형 | 논리형 | |
---|---|---|---|---|
1바이트 | byte | - | - | boolean |
2바이트 | short | char | - | - |
4바이트 | int | - | float | - |
8바이트 | long | - | double | - |
자료형.MIN_VALUE / 자료형.MAX_VALUE
System.out.println(Integer.MIN_VALUE + " ~ " + Integer.MAX_VALUE);
언더플로우, 오버플로우
String
자료형 크기 비교
byte (1) < short (2) < int (4) < long (8) < float (4) < double (8) < String
long
이 왜float
보다 작을까?? 링크
-> float는 부동소수점 채택으로 사실상 유효 범위가 훨씬 크다!
자동 타입변환
큰 크기 타입 = 작은 크기 타입
큰 신발에 작은 발은 들어간다.문자열 + 문자열 = 문자열
문자열 + 숫자 = 문자열
강제 타입변환
작은 크기 타입 = (작은 크기 타입) 큰 크기 타입
연산자
+, -, *, /, %
+, -
+
=, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=
=
이 뒤에 나온다.++, --
==, !=, >, <, >=, <=, instanceof
!, &, |, &&, ||, ^
(조건식) ? A : B
~, &, |, ^
>>, <<, >>>
연산자 우선순위가 존재하지만 코드의 가독성을 위해
()
를 사용하자 🤗
오늘부터는 실습위주의 강의가 시작되었다 🎉
조건문
if
if (조건식) { // 실행문이 하나일 때 괄호는 생략가능!
실행문 // 조건식이 참일 때 실행
}
if-else
if (조건식) {
실행문1 // 조건식이 참일 때 실행
} else {
실행문2 // 조건식이 거짓일 때 실행
}
if-else if-else
if (조건식1) {
실행문1 // 조건식 1이 참일 때 실행
} else if (조건식2) {
실행문2 // 조건식 1이 거짓, 조건식 2가 참일 때 실행
} else {
실행문3 // 조건식 1, 2 모두 거짓일 때 실행
}
else if
는 무한히 길어질 수 있다else
는 생략가능switch-case
switch (변수) { // 정수, 문자, 문자열
case 값1: // 변수 == 값1
실행문;
break; // case에 맞는 경우 switch문을 벗어남
case 값2:
case 값3: // 변수 == 값2 or 변수 == 값3
실행문;
break;
default: // 해당되는 case가 없는 경우
실행문;
break;
default
는 생략 가능break
가 없는 경우 실행된 케이스 이후에 모든 실행문이 실행됨 주의❗️웹 개발에서의 if
문
랜덤 메소드
Math.random()
java.lang 패키지에 있어 임포트하지 않아도 사용 가능
0이상 1미만의 랜덤값을 생성
-> 반환값은 double
형
범위 설정 방법
java에서 보통 범위를 표현할 때 작은 범위는 포함하고 큰 범위는 포함하지 않는다.
subString (int beginIndex, int endIndex) { for (int i = beginIndex; i < endIndex; i++) { // 수행식1 } }
반복문
while
초기화;
while (조건식) { // True 값을 넣을 경우 무한루프
실행문;
증감문; // 없을 경우 무한루프에 주의!
}
for
for (초기화; 조건식; 증감식;) {
실행문;
}
do-while
do {
실행문1;
증감식;
} while (조건식); // 조건식이 참인 경우 실행문 1로 올라간다.
실행문2; // 조건식이 거짓인 경우 실행 후 do-while문 종료
무한루프
while (true) {
}
for (;;) {
}
break
break
문이 포함되어있는 블럭만 벗어난다❗️continue
break
처럼 반복문을 종료 하는것이 아니다❗️continue
조건에 걸리면 continue
이후의 문장은 스킵오늘은 문자열이 어떤 방식으로 메모리를 이용하는지에 대한 수업을 들었다.
아직은 메모리에 대한 개념이 정확하게 이해를 못해서 그런지 어려운 느낌이 들었다. 메모리에 대한 개념을 짚어야겠다 😅
참조형 변수
스택
에 존재힙
에 저장스택
에 존재문자열
String s1 = "hello";
String s2 = new String("hello");
s1 != s2 ❗️
s1은 초기화 시 상수풀에 hello라는 문자열이 있는지 확인 후, 없으면 상수풀에 새로 만든다
s2는 확인 절차 없이 힙 영역에 새로운 "hello"라는 객체를 생성한다.
byte배열
로 저장스택
공간에 저장String pool
에 저장String s = "hello";
// s.charAt(0) = 'H' 에러 . 상수적 특징을 가지므로 재할당을 통해서만 변경 가능
아직 완성되지 않은 문자열 처리를 위해
StringBuffer
,StringBuilder
사용
-> heap에 저장
링크
이번 주에 들어서부터 다양한 실습 예제를 통해 여러 문제를 풀어보고있다.
그래서 공부할 양이 갑자기 많아진 느낌이다 🤣
그래도 열심히해서 내꺼로 만드는 것이 중요하겠지 화이팅 🎉