당니의 개발자 스토리

1/9 본문

LG CNS/필기노트

1/9

clainy 2025. 1. 9. 15:00

참고

Do it 자바 완전 정복 동영상 강의

https://www.youtube.com/channel/UCpgzQcpmvAk9FdNhdTkw6ug/videos

 

Do it 자바 완전 정복 동영상 강의

Do it 자바 완전 정복 동영상 강의입니다.

www.youtube.com

 

 

프로그래밍 언어가 일반적으로 위에서 아래로 순서대로 실행됨

 

중간에 반복적으로 나오는 것들이 있더라.

f1() {

4

}

1

2

3

f1()

5

f1()

f1()

6

7

5

8

 

함수를 이용해서 코드의 중복, 반복 이런 것들을 줄여나가는 겁니다.

x 라는 데이터를 x'로 바꾸는 작업을 함

f() {

4

x <= x`

}

 

1

2

3

f()

5

f()

f()

6

7

5

8

 

함수하고 데이터가 떨어지게 된다면 데이터가 의도하지 않게 데이터 변경이 일어나서

로직이 꼬일 수 있다는 것이다.

클래스라는 개념으로 묶는 거죠. 데이터하고 그 데이터를 조작하는 함수를 묶어놓는 거예요.

class c {
x

f() {
		4
	x <= x`
}
}


1
2
3
f()
5
f()
f()
6
7
5
8

해당하는 클래스에 있는 함수 내에서 x를 변경하는 규칙들을 통제하는 거다.

나이를 변경하는 함수를 따로 만들어서 이 함수를 사용하도록 강제하는 거다

나이라고 하는 데이터를 바꾸려면 f 라는 함수를 써야된다고 강제함으로써 나이가 잘못 설정되는 걸 막음

여기에 객체 라는 개념이 나옴.

 

그때 데이터와 데이터를 조작하는 함수를 묶어줌으로써

데이터가 잘못된 형태로 가는걸 막아줌.

 

객체지향언어는 객체를 define 하는 문법들이 제공됨

자바는 대표적인 객체 지향 언어

객체를 만드는 방법들을 익히는 거다

객체를 다른 객체와 연관짓는 방법

객체를 다른 객체로 옮기는 방법

 

조금만 익숙해지면 스프링이나 스프링 부트는 아주 쉽게 넘어갈 수 있음.

세부적인 문법들, 세세한 것까지는 보기 힘들고

개인학습이 필요함

 

 

모든 프로그래밍 언어는 문법에 너무 목숨걸지 x

많이 만들어보고 실행하면 됨

 

리액트 문서 내용을 좀 바꿨다 CRA에서 코드를 짰었는데 Vite로 바꿨다.

비트는 빌더도구이다.

비트 기반으로 바꿔놨다.

 

기존에 있는 코드에서 변경해야될 부분은

 

 

JDK, JRE

 

JDK는 자바 개발 도구입니다.

JRE는 자바 실행 환경인데, JDK가 JRE를 포함하는 넓은 의미로 생각할 수 있습니다.

JDK에서 자바 파일을 컴파일하면 .class 파일이 생성됩니다.

이 때 사용하는 도구가 javac입니다.

그리고 .class 파일은 java라는 명령어를 통해 JVM에서 실행됩니다.

기본적으로 자바는 제공해주는 클래스 파일을 사용하고, 라이브러리 등은 JRE에서 제공합니다.

그래서 컴파일된 이후에는 .class 파일을 읽고 해석할 수 있는 JRE만 있으면 실행할 수 있습니다.

javac는 개발 도구들이 포함된 JDK에서 사용하고, .class 파일을 실행하려면 JRE만 있으면 됩니다.

JDK와 JRE의 차이점은 면접에서 자주 물어보니까 잘 기억해 두셔야 합니다.

자바 개발을 위해서는 JDK를 설치해야 하고, 개발 도구는 우리 수업에서 이클립스를 사용할 예정입니다.

 

 

https://www.oracle.com/kr/java/technologies/javase/jdk11-archive-downloads.html

 

Java Archive Downloads - Java SE 11 | Oracle 대한민국

WARNING: Older versions of the JDK are provided to help developers debug issues in older systems. They are not updated with the latest security patches and are not recommended for use in production. For production use Oracle recommends downloading the late

www.oracle.com

 

 

IDE ⇒ Eclipse

 

IDE(통합 개발 환경) ⇒ Eclipse

개발에 필요한 것들은 소스 코드들 editing 할 수 있어야 함. 아이디를 이용해서 코드를 작성할 때 여러가지 어시스트를 받을 수 있다.

나머지 이 부분을 완성해줌.

 

두 번째로, 우리가 만든 코드를 빌드할 때 도움을 받을 수 있는 도구가 바로 이클립스입니다.
이클립스를 사용하면 개발을 더 효율적으로 할 수 있습니다.

기업용 서비스는 보통 불특정 다수를 대상으로 하는데, 이런 서비스 중 하나가 바로 웹입니다.

이클립스에서는 다양한 작업을 할 때 필요한 도구들을 한 번에 볼 수 있는 'perspective'라는 기능이 있습니다.
'perspective'는 내가 어떤 작업을 할 때 그 작업에 맞는 도구들을 모아 놓은 것입니다.

그리고, 자바는 한 번 만들어진 코드를 JVM에서 실행합니다.
이것이 자바가 인기를 끌었던 큰 이유입니다.

JVM은 다운로드하면 운영체제와 아키텍처별로 다양한 버전을 제공합니다.
환경에 맞는 JVM을 설치하면, 그 환경에서 자바 프로그램을 실행할 수 있습니다.

 

하지만 이론상 JVM만 있으면 어디에서든 자바 프로그램이 실행된다고 하지만,
실제로는 그렇지 않은 경우가 있습니다.
이런 문제를 해결하기 위해 나온 것이 바로 컨테이너 기술입니다.

JDK는 자바 개발에 필요한 도구들을 모아 놓은 것이고,
그 아래에는 JRE가 있습니다.
JRE는 JVM을 포함하고 있는 실행 환경입니다.

자바 프로젝트를 생성하고 실행하려면, 먼저 기준 디렉토리를 만들고,
그 안에 소스 코드를 작성해야 합니다.
프로젝트 디렉토리 안에는 여러 가지 파일들이 있을 수 있습니다.

자바 소스 코드는 javac라는 명령어를 사용해 바이트 코드인 .class 파일로 컴파일합니다.

자바 프로그램에서 main이라는 함수가 있는 소스 코드가 실행의 시작점이 됩니다.
이 main 함수 안에 우리가 실행하고자 하는 코드가 들어가게 됩니다.

마지막으로 System은 자바에서 출력 등을 처리할 때 사용하는 중요한 클래스입니다.

 

이클립스 단축키

프로젝트 및 클래스 생성

Ctrl + n + java project : 새 프로젝트 생성

Ctrl + n + java class : 새 클래스 생성

프로그램 실행

Ctrl + fn + f11 : 프로그램 실행

코드 자동 정리

Ctrl + Shift + O : 자동으로 import 하기, import 코드 정리

Ctrl + Shift + F : 코드 자동 정리; 코드 내용을 문법 템플릿에 맞게 포맷팅(들여쓰기) 해준다.

자동 완성

Ctrl + Space : 자동 완성 기능

  • ma+Ctrl+Space+Enter: public static void main(String[] args) {}
  • sysout + Ctrl + Space : System.out.println();

코드 이동 및 수정

Ctrl + D : 한줄 삭제

Ctrl + L : 특정 소스라인으로 이동

Alt + 방향키(위, 아래) : 특정 라인 한 줄 이동

Ctrl + Alt + 방향키(위, 아래) : 특정 라인 코드 복사 (위 누르면 위로 복사 아래 누르면 아래로 복사)

주석 달기

Ctrl + / : 한줄 주석 처리 또는 제거

Ctrl + Shift + / : 블록 주석(/* */)

Ctrl + Shift + \ : 블록 주석 제거

검색

Ctrl + H : 프로젝트 전체에서 특정 문구(텍스트) 포함 File 검색

기타

Alt + Shift + R : class 이름 refactoring
Ctrl + # : commit
fn + f3 : 클래스나 메소드 혹은 멤버를 정의한 곳으로 이동 (Open Declaration)

 

자바의 특징

 

플랫폼 독립적이라는 것은, 버추얼 머신만 있으면 내가 만든 코드를 어디서든 실행할 수 있다는 뜻입니다.

즉, 버추얼 머신만 설치되어 있으면 내가 작성한 소스코드와 컴파일된 클래스 파일이 다른 환경에서도 동일하게 동작한다는 말입니다.

하지만 다른 방법들은 제약이 많아서 그렇게 간단하지 않습니다.

 

플랫폼 종속적이라는 것은, 특정 운영체제에 맞춰서 결과물이 만들어진다는 뜻입니다.

따라서 그 결과물은 오직 해당 운영체제에서만 동작할 수 있다는 것입니다.

플랫폼 독립

 

운영체제와 애플리케이션을 이어주는 중간 다리 역할을 하는 것이 바로 JVM입니다.

파일을 연다거나, 파일을 쓴다거나, 파일에 있는 내용을 읽는 작업을 JVM이 대신 해줍니다. 그래서 우리는 이 .class를 만들 수 있는 거죠.

예를 들어, 윈도우용 JVM은 윈도우에서 파일을 읽고 쓰는 방식으로 이 작업을 처리해 주고, 그 작업을 윈도우 형식에 맞춰 실행시켜 줍니다.

만약 JVM이 각 운영체제에 맞게 설치되어 있다면, 내가 만든 클래스 프로그램은 그저 JVM과만 상호작용을 하게 됩니다.

그래서 프로그램이 윈도우에서도 동작하고, 맥에서도 동작하고, 리눅스에서도 동작할 수 있게 되는 거죠. 그 역할을 하는 것이 바로 JVM입니다.

 

기존에는 애플리케이션을 만들 때, 윈도우에서 컴파일하면 윈도우의 API를 직접 호출해야 했습니다. 하지만 이제는 프로그램을 만들 때 JVM의 API를 호출합니다. 그러면 JVM이 각각의 운영체제에 맞는 API로 변환하여 실행시켜 주는 거죠.

이렇게 되면 한 번 만들어진 코드는 JVM만 있다면, 운영체제와 플랫폼에 관계없이 동일한 기능을 제공할 수 있게 됩니다.

API는 어떤 기능을 요청하고 결과를 받는 방법을 정의한 약속이라고 이해하면 됩니다.

 

JDK, JRE

JDK, JRE, JVM의 차이

  1. JDK (Java Development Kit)
    JDK는 자바 프로그램을 개발할 때 필요한 모든 도구가 들어있는 도구 모음이에요. 여기에는 자바 컴파일러, 디버깅 도구, 그리고 자바 API들이 포함되어 있어요. 자바 프로그램을 작성하고 실행할 수 있게 해주는 툴입니다.
  2. JRE (Java Runtime Environment)
    JRE는 자바 프로그램을 실행할 수 있게 해주는 환경이에요. 자바로 작성된 프로그램을 실행하려면 JRE가 있어야 해요. JDK 안에 포함되어 있지만, JRE만 따로 설치하면 자바 프로그램을 실행할 수 있습니다.
  3. JVM (Java Virtual Machine)
    JVM은 자바 프로그램을 실제로 실행하는 엔진이에요. 자바 프로그램은 바이트코드로 컴파일되고, JVM이 그 바이트코드를 실행합니다. 그래서 JVM은 운영체제에 관계없이 자바 프로그램을 실행할 수 있게 해주는 핵심적인 역할을 해요.

 

자바 프로젝트 생성 및 실행

 

 

mac에서는 tree . 사용

package mypack;

public class Test {
	public static void main(String[] args) {
		System.out.println("Hello, java");
	}

}

 

 

 

 

도메인 이름은 중복되지 않으니까.

 

주석 (comment)

 

println(), print(), printf() 메서드

 

package com.test;

public class MyTest {
	public static void main(String[] args) {
		// System.out.println() => 인자값을 콘솔에 출력하고 개행문자를 처리
		System.out.println(); // 한줄 띄우기
		System.out.println("문자열");
		System.out.println(1234);
		System.out.println(true);
		System.out.println();

	}
}

 

동일한 이름의 함수에서들을 다양한 데이터 타입으로 사용할 수 있도록 재정이 하는 것을 메서드 오버로딩 이라고 합니다.

메서드 오버로딩

 

엄격한 Data Type 적용

자바 스크립트와의 차이점

 

 

변수 이름 규칙 = 상수 이름과 메서드 이름 규칙과 동일

package com.test;

public class MyTest {
    public static void main(String[] args) {
        // 변수 명명법
        boolean aBcD;       // O 가능하지만 권고 위배
        byte 가나다;         // O
        short abcd;          // O
        char $abcd;          // O
        int 3abcd;           // X 숫자로 시작
        long abcd3;          // O
        float int;           // X 예약어를 사용
        double main;         // O
        int myWork;          // X 공백을 포함
        String myClassName;  // O
        int ABC;             // O 가능하지만 권고 위배 (상수 표기법)

        // 상수 명명법
        final double PI;     // O
        final int MYDATA;    // O
        final float myData;  // O 가능하지만 권고 위배 (변수 표기법)
    }
}

 

 

변수의 생존기간(scope)

package com.test;

public class MyTest {
    public static void main(String[] args) {
        int a = 10;
        System.out.println("#1 : " + a); // 10
        
        {
            int b = 20;
            System.out.println("#2 : " + a);  // 10
            System.out.println("#3 : " + b);  // 20
        }
        
        {
            int b = 30;
            System.out.println("#4 : " + a); // 10
            System.out.println("#5 : " + b); // 10
                                        
        }
        
        System.out.println("#6 : " + a); // 10
        System.out.println("#7 : " + b); // b cannot be resolved to a variable
    }
}

 

 

 

자료형(Data Type)

 

 

기본 자료형(primitive) ⇒ 값이 스택에 저장 ⇒ 크기가 고정

참조 자료형(reference) ⇒ 실제 값은 힙에 저장되고, 스택에는 그 주소가 저장 ⇒ 크기가 가변

 

 

JVM 메모리 구조

 

실제로는 레지스터 영역에 있는데, 자료 구조는 이 3가지의 경우만 하셔도 돼요

 

기본 자료형

 

 

문자의 유니코드 검색

https://unicode-table.com/

package com.test;

public class MyTest {
    public static void main(String[] args) {
        char heart = '\u2665';
        System.out.println(heart);
    }
}

 

 

 

기본 자료형 간 타입 변환

double 타입으로 간주되기 때문입니다. 자바에서 실수 리터럴(예: 3.2)은 기본적으로 double 타입으로 취급됩니다.

따라서 floact c = 3.2f 라고 고쳐야 합니다.

 

타입 변환 방법

 

 

 

기본 자료형 간의 연산

 

 

연산자

 

쇼트 서킷(short circuit)

package com.test;

public class MyTest {
    public static void main(String[] args) {
        // | 연산 => 모든 연산을 수행 후 결과를 비교
        /* 돌리면 에러가 발생한다.
        // java.lang.NullPointerException 예외가 발생
        // s는 null인데, null 객체에서 equals 메서드를 호출하면 NullPointerException이 발생합니다.
        String s = null;
        if (5 > 3 | s.equals("abc")) {
            System.out.println("^^;;;");
        }
        */
        
        // || 연산 => 결과가 확정되면 연산을 생략하므로 예외가 발생하지 않음
        String s = null;
        if (5 > 3 || s.equals("abc")) {
            System.out.println("^^;;;");
        }
    }
}

 

이 코드에서 말하는 "쇼트 서킷"은 논리 연산자 ||와 |의 차이와 관련이 있어요. 자바에서는 논리 연산자를 사용할 때 조건에 따라 연산을 최적화하는 방식이 다릅니다.

  1. | 연산자 (논리합: OR)
    | 연산자는 두 조건을 모두 평가합니다. 즉, 두 조건이 모두 실행된 후 그 결과를 비교합니다.
if (5 > 3 | s.equals("abc")) { }

여기에서, 첫 번째 조건인 5 > 3이 true이므로, s.equals("abc")도 실행됩니다. 그런데 s는 null이라서 NullPointerException이 발생합니다. 즉, |는 무조건 두 조건을 모두 평가해서 오류를 일으킬 수 있습니다.

  1. || 연산자 (단락 회로 OR: Short-circuit OR)
    || 연산자는 첫 번째 조건이 true이면, 두 번째 조건을 평가하지 않음으로써 연산을 건너뛰는 최적화 방식을 사용합니다. 이걸 "쇼트 서킷"이라고 부릅니다.
if (5 > 3 || s.equals("abc")) { }

여기에서, 첫 번째 조건인 5 > 3이 true이므로, 두 번째 조건인 s.equals("abc")는 아예 실행되지 않습니다. 자바는 조건이 확정되면 나머지 조건을 실행하지 않기 때문에 s.equals("abc")를 평가할 필요가 없고, 그래서 NullPointerException도 발생하지 않습니다.

결론:

  • |는 두 조건을 무조건 평가하므로, null을 다룰 때 예외가 발생할 수 있습니다.
  • ||는 첫 번째 조건이 true일 경우 두 번째 조건을 건너뛰기 때문에, 예외를 예방할 수 있습니다.

 

대입 연산자 축약 표현

 

제어문과 제어 키워드

 

 

if 제어문

 

switch 제어문

package com.test;

import java.util.Scanner;

public class MyTest {
    public static void main(String[] args) {
    	// cmd + shift + o => 해당 기능(클래스)이 포함된 패키지를 자동으로 추가함
    	Scanner scanner = new Scanner(System.in);
    	
    	int score = scanner.nextInt();
    	switch(score) {
    	/*
    	 .....
    	 */
    	}
    }
}

 

for 반복문

 

 

while 반복문

 

do-while 문
break 제어 키워드

 

continue 제어 키워드

 

 

break LABEL 구문

'LG CNS > 필기노트' 카테고리의 다른 글

프로젝트  (0) 2025.02.27
문제  (0) 2025.02.19
리액트 컴포넌트 만들기 실습  (0) 2025.01.09
12/27  (0) 2025.01.08
1/6  (0) 2025.01.06