이 또한 지나가리

[10/12] Java 기초 - 김영한의 자바 무료 입문 강의 본문

개발 일만시간의 법칙

[10/12] Java 기초 - 김영한의 자바 무료 입문 강의

jjiiyoung 2025. 10. 12. 01:09

 

Java를 아예 모르는 것은 아니나 공부를 어디서부터 시작해야할지 모르겠어서 기본 강의 부터 들어보려한다.

첫 강의는 김영한 선생님의 자바 무료 입문 강의이다.

Eclipse만 사용해봤는데 김영한 선생님의 강의는 Intellij로 진행되어 처음으로 Intellij를 써보았다.

기초적인 내용 부터 다뤄주셔서 초심자에게 좋을 것 같고, 나는 배속으로 재생하여 기억을 환기시키는용으로 강의를 들었다.(스킵도 많이 했다ㅎㅎ)

입문 강의는 Java를 처음 접하는 사람에게만 추천할 것 같다.

 

https://www.jetbrains.com/ko-kr/idea/download/?section=windows

 

IntelliJ IDEA 다운로드

 

www.jetbrains.com

 


 

1. hello java 출력하기

- java 언어는 대소문자를 구문한다.

- Intellij에서 psvm = public static void main(String[] args){}

 

2. 주석(Comment)

- '#' : 한 줄 주석(single line comment)

- '/* */' : 범위 주석 (multi line comment)

 

3. Java란?

- 자바 표준 스펙과 구현으로 나누어짐

- 자바 표준 스펙(자바 커뮤니티 프로세스, JCP 통해 관리됨)

  1) 자바 컴파일러

  2) 자바 실행 라이브러리

  3) 자바 가상 머신(JVM)

- 다양한 자바 구현

  - 여러 회사에서 자바 표준 스펙에 맞추어 실제 작동하는 자바 프로그램을 개발한다.

  - ex) 오라클 Open JDK, Amazon Corretto ...

 

4. 컴파일과 실행

- .java -> (complie) -> .class

- .class -> 실행 -> JVM이 실행되면 프로그램 작동

- 컴파일할 때 javac라는 프로그램을 사용하는데, IDE를 통해 코드를 실행하면 자동으로 처리해준다.

 

5. 자바와 운영체제 독립성

- 각각의 OS 환경에 맞춰 자바를 설치하는 것이 가능하다.

 

6. 변수

- 패키지 : 자바 파일 첫 줄에 소속된 패키지 선언해야한다.

- 변할 수 있는 값을 지정

- 변수를 선언하면 컨퓨터의 메모리 공간을 확보해 그곳에 데이터 저장한다.

- 변수 선언 -> 변수 초기화(값을 대입) -> 변수 읽기

- 변수 초기화는 선언과 동시에 진행할 수 있고(int a = 1), 변수 초기화를 하지 않으면 컴파일 에러 발생(java: variable a might not have been initialized)

- 컴파일에러는 자바 문법이 맞지 않았을 때 발생하는 에러이다.

 

6-1. 변수타입1

- 정수(int), 실수(double), boolean(true/false), 문자(char), 문자열(String)

- 변수는 종류에 따라 다양한 형식이 존재하고 이러한 형식을 타입이라 한다.

- literal : 개발자가 직접 적은 고정된 값 나타내는 프로그래밍 용어(정수 리터럴, 실수 리터럴 ...)

 

6-2. 변수타입2

- 정수 : byte(-128 ~ 127, 2^8) < short(-32,767 ~ 32,767,2^16) < int(2^32) < long(2^64)

- 실수 : float < double

- 표현 범위에 따라 메모리 공간을 차지한다.

- 메모리 용량은 매우 저렴하여 메모리 용량을 약간 절약하기 보다는 개발 속도나 효율에 초점을 맞추는 것이 더 효과적이다.

- 실수에서 자주 사용하는 타입은 int, long, double, boolean, String

 

6-3. 변수 명명 규칙

- 규칙

  1) 변수 이름은 숫자로 시작할 수 없음

  2) 자바 예약어로 이름 사용할 수 없다.

  3) 변수 이름에는 영문자, 숫자, '$', '_' 만 사용 가능

- 관례

  1) 소문자로 시작하는 낙타 표기법

      my account -> myAccount

- 변수 이름은 의미있고 용도를 명확하게 설명해야 한다.

- 클래스는 첫글자를 대문자로 시작하고 나머지는 다 소문자로 첫글자를 시작한다.

- 예외는 상수(모두 대문자)와 패키지(모두 소문자)

 

7. 연산자

- % : 나머지를 구하는 연산자

- 연산자 우선순위 (다 외우기 보단 상식선에서 우선순위 적용하면 된다)

  1) 괄호

  2) 단항 연산자( ++. --, ~ !, new, (type))

  3) 산술 연산자( *, /, %  -> +, - )

  4) Shift 연산자 ( <<, >> >>>)

  5) 비교 연산자(<. <=, >, >=, instanceof)

  6) 등식 연산자(==, !=)

  7) 비트 연산자(&, ^, |)

  8) 논리 연산자(&&- and, ||-or, !)

  9) 삼항 연산자(? :)

 10) 대입 연산자(=, +=, -=, *=, /=, %= ...)

 

8. 조건문(if else)

- 조건이 참인지 확인하고 참일 경우 코드 블럭을 실행한다.

- else문은 if문에서 만족하는 조건이 없을 때 실행하는 코드를 제공한다.

- else if

- if문 명령이 한개일 경우 중괄호 생략해도 되지만 가독성과 유지보수성을 위해 중괄호를 써주는게 좋다.

 

8-1. switch문

- 단순히 값이 같은지 비교할 수 있다.

- break가 없으면 다음 case를 실행한다.

public class Switch1 {
    public static void main(String[] args) {
    
        int grade = 2;
        int coupon;

        switch (grade) {
            case 1:
                coupon = 1000;
                break;
            case 2:
                coupon = 2000;
                break;
            case 3:
                coupon = 3000;
                break;
            default:
                coupon = 500;
        }
        System.out.println(coupon);
    }
}


- java 14에는 새로운 switch문이 도입되었다.('->' 사용)

public class Switch2 {
    public static void main(String[] args) {
        int grade = 2;

        int coupon = switch (grade) {
            case 1 -> 1000;
            case 2 -> 2000;
            case 3 -> 3000;
            default -> 500;
        };
        System.out.println(coupon);
    }
}

 

 

8-2. 삼항연산자

- 단순히 참과 거짓에 따라 특정 값을 구하는 경우에 사용한다.

- (조건) ? 참_표현식 : 거짓_표현식

public class CondOp1 {
    public static void main(String[] args) {
        int age = 18;
        String status = (age >= 18) ? "성인" : "미성년자";
        System.out.println(status);
    }
}

 

9. 반복문

9-1. while문

- while(조건식) {코드};

-조건식이 true일때 코드 반복한다.

 

9-2. do-while문

- do {코드} while (조건식);

- while문과 비슷하지만 조건에 상관없이 무조건 한 번은 코드를 실행한다. 

- continue, break

 

9-3. for문

- 초기화, 조건검사, 반복 후 작업이 한 줄에 모두 들어있어 코드를 이해하기 쉽다.

- 중첩 반복문

 

10. Scope(범위)

- 변수는 선언한 위치에 따라 지역 변수, 멤버 변수(클래스 변수, 인스턴스 변수)와 같이 분류된다.

- 지역변수는 특정 지역 즉, 특정 코드 블럭에서만 사용 가능한 변수이다.

- 변수의 범위를 한정하여 비효율적인 메모리 사용을 줄이고 코드 복합성을 막는다.

 

11. 형변환

- 작은 범위에서 큰 범위로 대입은 허용한다.

- 큰 범위를 작은 범위에 대입하려하면 컴파일 에러가 발생한다.

- 명시적 형변환 

- 오버플로어가 발생하면 변수 타입 범위 내에서 처음부터 다시 시작한다.(마치 시계가 도는 것처럼)

- 오버플로어가 발생하면 계산하지 말고 타입을 바꾸는게 좋다.

- 같은 타입끼리의 계산은 같은 타입의 결과를 낸다.

- 서로 다른 타입의 계산은 큰 범위로 자동 형변환 된다. 

  ex) int + long => long + long 으로 자동 형변환

 

12. Scanner

- System.in을 통해 사용자의 입력을 받을 수 있다.

- 자바는 Scanner라는 클래스를 제공하여 사용자의 입력을 편리하게  받을 수 있게 한다.

import java.util.Scanner;

public class Scanner1 {
    public static void main(String[] args) {
    
        Scanner scanner = new Scanner(System.in);
        
        System.out.print("문자열을 입력하세요:");
        String str = scanner.nextLine();
        System.out.println("입력한 문자열 " + str);
    }
}

 

 

13. 배열(Array)

- 같은 타입의 변수를 편하게 사용하기 위해 묶어둔 것

- 배열 선언 ( int[] students), 배열 생성 및 초기화(new int[4])

- 배열을 생성하고 나면 자바는 메모리 어딘가에 배열에 접근할 수 있는 참조값(주소)을 반환한다.

- int[] students를 선언하면 변수는 배열의 참조값을 보관한다.

public class Array1 {
    public static void main(String[] args) {
		
        //배열 선언
        int[] students;
        //배열 생성과 초기화
        students = new int[] {90, 80, 70, 60, 50};
        
        //배열 선언, 생성 초기화
        //int[] students = {90, 80, 70, 60, 50};
		
        //변수 값 사용
        for(int i = 0; i < students.length; i++) {
            System.out.println("student" + (i + 1) + "점수는 : " + students[i]);
        }
    }
}

 

- 배열의 위치를 나타내는 숫자를 인덱스(index)라고 한다.

- 변수에 값을 직접 넣을 수 있는 기본형, 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입을 참조형이라 한다.

  배열은 참조형!

- 2차원 배열 : arr[행][열]

public class Array2 {
    public static void main(String[] args) {

        int[][] arr = {
            {1,2,3},
            {4,5,6}
        };

        for (int row = 0; row < arr.length; row++) {
            for (int column = 0; column < arr[row].length; column++) {
                System.out.print(arr[row][column] + " ");
            }
            System.out.println();
        }
    }
}

 

14. 향상된 for문

- 배열의 처음부터 끝까지 탐색한다.

- ':' 오른쪽에 탐색할 배열을 선택하고 , 왼쪽에는 찾은 값을 저장할 변수를 지정한다.

- 증가하는 index값이 필요할 경우 for-each문을 사용할 수 없다.

public class EnhancedFor1 {
    public static void main(String[] args) {
    
        int[] numbers = {1,2,3,4,5};

        for (int num : numbers) {
            System.out.println(num);
        }
    }
}

 

 

 

 

 

*유투브 강의

https://www.youtube.com/watch?v=JEzBDk0E9Rw&t=24901s

 

*인프런

https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%9E%90%EB%B0%94-%EC%9E%85%EB%AC%B8/dashboard

 

[지금 무료]김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음| 김영한 - 인프런 강의

현재 평점 5.0점 수강생 52,238명인 강의를 만나보세요. 프로그래밍에 처음 입문하는 분들을 위한 자바 강의입니다. 코드를 따라하면서 손쉽게 자바를 배울 수 있습니다. 자바(Java) 프로그래밍 언

www.inflearn.com

 

'개발 일만시간의 법칙' 카테고리의 다른 글

[JAVA Study02] List / Set / Map  (0) 2026.02.22
[JAVA Study01] 기본형과 참조형  (1) 2026.02.22
Codex 사용하기  (0) 2026.01.25
JDK 환경 변수 세팅(IDE STS 5, JDK25)  (1) 2026.01.05