기간 : 220919~220923

220919 Java 기초

이번 주부터는 Java 기초강의를 시작한다.
앞으로 쭉 사용하게 될테니 이번 기회에 확실하게 배우고넘어가고싶다 💯

정리 ✏️

프로그래밍이란?

  • 프로그래밍: 컴퓨터가 일을 수행 하도록 프로그래밍 언어로 명령어 집합(프로그램)을 만드는 일
  • 컴파일 : 프로그래밍 언어를 컴퓨터가 실행 가는한 기계어로 만드는 일
  • 컴파일러 : 기계어로 바꾸어 주는 프로그램 (ex. 자바 컴파일러, gcc)

자바의 특징

  • 객체지향 프로그래밍 언어
  • 컴파일된 코드는 어떤 플랫폼(OS)에서도 실행가능함 <- JVM

    WORA (Write Once, Run Anywhere)

장점

  • 재사용성
  • 유지보수 용이
  • 코드관리가 편리
  • 신뢰성 높은 프로그램
  • JDK : 자바에서 제공되는 개발용 라이브러리. JVM부터 JRE 등을 이용하여 자바가 구동할 수 있도록 도와주는 컨테이너 역할
  • JRE : 자바 프로그램이 실행되는 환경으로 JVM이 실행하는데 필요한 라이브러리를 포함한 최소한의 배포단위
  • JVM : 자바로 만들어진 프로그램 실행도구로 실행환경(JRE)을 위해 필요한 라이브러리와 기타 파일 제공

바이트 코드

  • 중간코드
  • 특정 하드웨어가 아닌 가상머신에서 돌아가는 실행 프로그램을 위한 이진 표현법

리터럴

  • 데이터 값 자체
  • 변수에 담기는 변하지 않는 데이터

변수

자료형 변수명 =;
int score = 100;
  • 변할 수 있는 수를 저장하는 공간 <- '수' 자체는 ❌, 하나의 박스로 기억하자

    명명규칙 ❗️

    • 변수이름은 의미있게 명명
    • 영문자(대소문자 구분), 숫자, _, $ 로만 구성
    • 숫자로 시작될 수 없음
    • 공백 포함 X
    • 미리 정의된 키워드나 예약어는 사용 불가
    • Lower Camel Case 채용 ex) totalScore

상수

final 자료형 변수명 =;
final double PI_CONST = 3.14;
  • 변하지 않고 고정된 값을 담는 변수
  • 변수에 저장된 데이터는 바뀔 수 없다

    어떨 때 이용?

    • 프로그램에서 에러가 난 경우 에러코드/에러메시지를 저장할 때
    • 프로그램의 기본적인 환경설정정보를 저장할 때
    • 고정적으로 들어가는 값에는 상수를 사용
      (코드 변경 시 상수 선언부만 변경하면 모두 변경된다!)

변수는 초기화 되어야 사용할 수 있다❗️


220920 Java 기초

온라인 강의와 오프라인 강의를 같이 진행하다보니 진도가 살짝살짝 안맞는 경우가 발생했다 😅
온라인 강의는 예습용으로 생각하고 블로그에 포스팅할 때는 오프라인 강의를 정리하고 예습했던 온라인 강의의 내용을 보충하여 적어놓기로 😁

정리 ✏️

입력 메소드

  • 콘솔에 사용자 입력 데이터를 입력받을 수 있는 함수
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바이트shortchar--
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는 부동소수점 채택으로 사실상 유효 범위가 훨씬 크다!

자동 타입변환

  • Promotion
  • 묵시적 형 변환
  • 큰 크기 타입 = 작은 크기 타입 큰 신발에 작은 발은 들어간다.
  • 형 변환 되어도 데이터의 손실이 없다
  • 서로 다른 타입의 피연산자의 연산 시 두 피연산자 중 큰 타입으로 자동 형 변환 후 연산

    문자열 + 문자열 = 문자열
    문자열 + 숫자 = 문자열

강제 타입변환

  • Casting
  • 명시적 형 변환
  • 작은 크기 타입 = (작은 크기 타입) 큰 크기 타입
  • 형 변환 시 데이터 손실 발생
  • 데이터 손실에 항상 주의❗️

연산자

  • 산술: +, -, *, /, %
  • 부호: +, -
  • 문자열 연결: +
  • 대입: =, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=
    -> 우변의 값을 좌변의 값에 대입,=이 뒤에 나온다.
  • 증감: ++, --
  • 비교: ==, !=, >, <, >=, <=, instanceof
  • 논리: !, &, |, &&, ||, ^
  • 조건: (조건식) ? A : B
    -> 조건식이 참이면 A, 거짓이면 B
  • 비트: ~, &, |, ^
  • 쉬프트: >>, <<, >>>

    연산자 우선순위가 존재하지만 코드의 가독성을 위해 () 를 사용하자 🤗


220921 Java 기초

오늘부터는 실습위주의 강의가 시작되었다 🎉

정리 ✏️

조건문

  • 코드 실행 흐름을 제어하는 제어문 중 하나
  • 조건식에 따라 실행여부가 결정된다

if

if (조건식) { // 실행문이 하나일 때 괄호는 생략가능!
	실행문 // 조건식이 참일 때 실행
} 
  • 조건식의 결과는 boolean이 산출되어야 한다!
    -> boolean값이 직접 들어가도 된다

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 (변수) { // 정수, 문자, 문자열
	case1: // 변수 == 값1
    	실행문;
        break; // case에 맞는 경우 switch문을 벗어남
    case2:
    case3: // 변수 == 값2 or 변수 == 값3
    	실행문;
        break;
    default: // 해당되는 case가 없는 경우
    	실행문;
        break;
  • default는 생략 가능
  • break가 없는 경우 실행된 케이스 이후에 모든 실행문이 실행됨 주의❗️
    -> 이를 이용하여 의도적으로 break를 빼기도 한다.
  • jdk 14+ 부터는 쉼표로 조건을 구분하고 리턴값을 사용 링크

웹 개발에서의 if

  • 보통 입력 데이터가 유효한지 확인하는 용도로 사용!

랜덤 메소드
Math.random()

  • java.lang 패키지에 있어 임포트하지 않아도 사용 가능

  • 0이상 1미만의 랜덤값을 생성
    -> 반환값은 double

  • 범위 설정 방법
    0.0Math.random()<1.00.0 \le Math.random() < 1.0
    0.0Math.random()α<α.00.0 \le Math.random() * \alpha < \alpha.0
    0(int)(Math.random()α)<α0 \le (int)(Math.random() * \alpha) < \alpha
    β(int)(Math.random()α)+β<α+β\beta \le (int)(Math.random() * \alpha) + \beta < \alpha + \beta

java에서 보통 범위를 표현할 때 작은 범위는 포함하고 큰 범위는 포함하지 않는다.

subString (int beginIndex, int endIndex) {
		for (int i = beginIndex; i < endIndex; i++) {
				// 수행식1
		}
}

220922 Java 기초

정리 ✏️

반복문

  • 코드 실행 흐름을 제어하는 제어문 중 하나
  • 조건식에 따라 반복횟수가 정해진다

while

초기화;
while (조건식) { // True 값을 넣을 경우 무한루프
	실행문;
    증감문; // 없을 경우 무한루프에 주의!
}
  • 반복 횟수를 정확하게 모를 경우 유동적으로 사용 가능

for

for (초기화; 조건식; 증감식;) {
	실행문;
}
  • 반복 횟수를 정확히 알고 있을 때
  • for문 생성 시 초기화, 조건식, 증감식이 모여있어 가독성이 좋다

do-while

  • 거의 사용되지 않는다 <- 헷갈릴 경우가 많아!
  • 조건을 나중에 검사
  • 조건과 상관없이 무조건 한번은 실행
do {
	실행문1;
	증감식;
} while (조건식); // 조건식이 참인 경우 실행문 1로 올라간다.
	실행문2; // 조건식이 거짓인 경우 실행 후 do-while문 종료

무한루프

  • 반복문이 멈추지 않고 무한히 도는 반복문
while (true) {
}
for (;;) {
}
  • if문과 같이 사용하여 의도적으로 무한루프를 이용하기도 한다

break

  • 반복문 종료 구문
  • 반복문이 중첩되어 있는 곳에서 사용한 경우
    break문이 포함되어있는 블럭만 벗어난다❗️

continue

  • 반복문 케이스 스킵 구문
  • 반복문의 특정 케이스만 스킵하는것이지 break 처럼 반복문을 종료 하는것이 아니다❗️
  • continue 조건에 걸리면 continue 이후의 문장은 스킵

220923 Java 기초

오늘은 문자열이 어떤 방식으로 메모리를 이용하는지에 대한 수업을 들었다.
아직은 메모리에 대한 개념이 정확하게 이해를 못해서 그런지 어려운 느낌이 들었다. 메모리에 대한 개념을 짚어야겠다 😅

정리 ✏️

참조형 변수

  • 원시 타입
    • 데이터를 변수에 저장
    • 해당 변수는 스택에 존재
    • 정수 / 실수 / 문자 / 논리
  • 참조 타입
    • 객체 메모리의 주소를 변수에 저장
    • 객체는 에 저장
    • 객체 변수는 스택에 존재
    • 주소를 통해 객체 참조
    • 배열 타입 / 열거 타입 / 클래스 / 인터페이스

문자열

  • 초기화
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에 저장
링크


정규 표현식

  • 입력데이터 포맷을 확인하기 좋다
  • if문과 비슷하게 입력 데이터가 들어오자마자 전처리하기 위해 사용

한 주 마무리 📚

이번 주에 들어서부터 다양한 실습 예제를 통해 여러 문제를 풀어보고있다.
그래서 공부할 양이 갑자기 많아진 느낌이다 🤣
그래도 열심히해서 내꺼로 만드는 것이 중요하겠지 화이팅 🎉

0개의 댓글