재_패캠Java/Spring - 1주차

하파타카·2023년 7월 13일
0

패캠JAVA, Spring과정

목록 보기
12/20

Part1.생각하기 표현하기 코딩하기

TPC

T thinking 생각하기

P presentation 표현하기

메모리에서 어떻게 동작이 되는지 이해하는 단계.(문법, 용어, 기술)

C coding 구현하기

따라하기-스스로 하기-응용하기 단계로 학습예정.


JavaSE 프로젝트 만들기

jvm: 자바가상머신. 자바 프로그램을 실행해주는 프로세서(엔진).
jre: 자바실행환경.
jdk: 자바개발환경. 설치 시 jvm, api, tool이 pc에 설치된다.

java언어는 객체지향언어이므로 객체(Object)단위로 프로그래밍해야함.
java에서의 객체는 곧 클래스 단위이므로 실제로는 클래스(Class)단위로 프로그래밍하게 됨.

  • 클래스 내에 기능(method)이 포함되는 형태.

  • 메인클래스: main메서드를 가지고 있는 클래스. 메인 클래스로부터 프로그램이 시작된다.
    즉, 메인 클래스는 클래스(.class) 당 하나만 존재함.

  • method: 동작을 처리하는 함수(Function). 자바에서의 메서드와 함수는 같다고 보면 된다. 동작의 이름(매개변수){ 처리 }

JavaSE 프로젝트 구조 살펴보기

  • 관례상 클래스의 첫문자는 대문자로 한다.(기본적으로 camelcase 방법 사용)

참고_intelliJ에서 System.out.println()의 단축명령어는 sout
실행단축키는 shift+f10

src 프로젝트: java 소스코드(파일)가 저장되는 폴더. 소스파일은 이름.java로 저장한다.
컴파일: 개발자가 입력한 소스코드(고급언어)인 .java파일을 실행가능한 .class파일(저급언어)로 변환시키는 과정.
java에서 실행가능한 코드 .class를 byte code라고 한다.

참고_intelliJ로 파일을 실행시키면 생기는 out폴더는 실행파일인 .class파일이 저장되는 폴더임.

  • 터미널에서 컴파일하기
    프로젝트명\src>javac.exe -d ..\out\production\FestCampus HelloWorld.java
    한글이 포함되어있는 경우 -encoding UTF-8 을 마지막에 이어붙여 실행한다.
    이때 컴파일에 시간이 걸리므로 주의.

  • 터미널에서 실행하기
    프로젝트명\src>java.exe -classpath ..\out\production\FestCampus HelloWorld

JVM과 자바의 구동방식

상단의 실습에서 java.exe는 jvm을 호출하는 명령어이다.
jdk를 설치하면 jre가 내포되어 있다.
jre에 jvm도 포함되어 있음.
jre는 자바의 실행환경이며 jvm은 자바의 실행머신이기 때문.

JVM의 특징

  • OS에 독립적인 개발이 가능하다.(확장성이 좋음.)
    1차 컴파일 된 bytecode(.class, 중간어 코드라고도 함)를 자신의 os에 맞게 2차 컴파일하여 (.exe) 메모리에 로딩하여 실행하는 구조.
    즉, 윈도우에서 만든 프로그램을 다른 os에서도 실행이 가능하다.
    실행 전 무조건 컴파일이 필요하므로 실행속도는 즉각실행하는 다른 언어에 비해서 느리다.

  • 자동으로 메모리를 관리한다.
    Thread 내의 Method Area Heap Area Stack Area Runtime Constant Pool 메모리 영역 중 적합한 메모리를 골라 jvm이 알아서 관리 및 배분한다.


자바 기초 다지기 #1

변수: 데이터를 저장하는 메모리 공간의 이름
자료형: 변수의 크기와 어떤종류의 데이터를 저장할지를 결정하는 것
할당: 변수에 데이터를 저장하는 것

자료형을 보면 변수의 크기(예-int의 경우 4byte)와 종류를 알 수 있다.

변수

변수명 짓는 규칙

  • 변수명은 숫자로 시작할 수 없다.
  • 대소문자를 구분하며 길이제한이 없다.
  • $, _이외의 특수문자 사용이 불가하다.
  • 예약어는 변수명으로 사용할 수 없다.(예-int, double, return, class 등)

변수를 만드려면(메모리에 기억공간을 만드려면) 선언이 필요하다.

자료형

기본 자료형(int, float, char 등)과 사용자정의 자료형(Movie, Book, Member 등)이 존재.

  • 기본자료형(PDT): 프로그램에서 기본적으로 제공해주는 자료형. 소문자로 시작한다. (int, double, char 등)
  • 사용자정의 자료형(UDDP): 사용자가 만들어 사용하는 자료형(class를 이용해 만듦). 대문자로 시작한다. (String, System 등)
DataType크기데이터(종류)Default Value
byte1byte정수0
short2byte정수0
int4byte정수0
long8byte정수0L
float4byte실수0.0f
double8byte실수0.0d
char8byte문자\u0000, null
boolean1byte참, 거짓fasle
  • 정수는 int, 실수는 double, 문자는 char, 참거짓 boolaen 의 4가지가 기본형이다.

문자열형인 string은 java에서 제공하는 자료형(api)을 사용하면 된다.

참고로 java의 경우 char형이 2byte이므로 비영여권 언어를 표현할 수 있다.
c언어는 char형이 1byte이므로 비영어권 언어를 표현하려면 배열 등의 다른방법이 필요함.

`public class CarTest {
    public static void main(String[] args) {
        // 자동차의 정보를 저장하기 위한 변수를 만드시오.
        String model = "BMW538i";
        System.out.println("model = " + model);
        long distance=1000000;
        System.out.println("distance = " + distance + "Km");
        int price=90000000;
        System.out.println("price = " + price);
        String company ="BMW";
        System.out.println("companys = " + company);
        char type = 'A';
        System.out.println("type = " + type + "Type");
        boolean auto= true;
        System.out.println("auto = "+ auto);
        int year = 2010;
        System.out.println("year = " + year);
        float gasmi = 12.5f;
        System.out.println("gasmi = " + gasmi);
    }
}

변수선언과 할당 및 초기화

변수를 선언하면 변수가 메모리에 만들어진다.

변수선언

int a;

할당

변수에 저장된 데이터타입에 맞게 데이터를 저장(대입)하는 행위.
L-Value = R-Value;

초기화

변수를 만든 후 연산을 하기 전에 값을 저장하는 행위.
초기화를 하지 않으면 찌꺼기값이 들어가게 되며, 연산이 불가능하다.

아래 예시처럼 변수선언과 초기화를 동시에 할 수 있다.
int a = 10;

public class VDATest {
    public static void main(String[] args) {
        // 문제2. 변수a에 10을 저장하고 a에 저장된 값을 변수 b에 10을 곱하여 변수 c에 저장하시오.
        int a = 10; // 변수 초기화
        System.out.println("a = " + a);
        int b = a;
        System.out.println("b = " + b);
        int c= b*10;
        System.out.println("c = " + c);

        // 문제3. sum이라는 변수에 1부터 5까지의 수를 누적하여 출력하시오.
        int sum = 0;
        for(int i = 1; i<6; i++){
            sum+=i;
        }
        System.out.println("sum = "+sum);

        // 문제4. x에 10을, y에 20을 저장하고 변수의 값을 서로 교환(swap)하여 출력하시오.
        int x = 10;
        int y = 20;
        int temp;
        temp = x;
        x = y;
        y = temp;
        System.out.println("x = " + x+", y = " + y);
    }
}

심볼 테이블(symbol table)

변수를 관리하는 테이블. (변수의 이름과 저장된 번지를 테이블형태로 저장하여 관리)
변수가 만들어지려면 변수를 관리하는 테이블에서 변수 정보가 저장된다.

  • 변수를 테이블로 관리하는 이유?
    변수는 메모리에서 생성되기 때문이며, 이 메모리의 번지를 찾아가려면 변수를 관리하는 심볼 테이블이 필요함.
keyvalue(주소값)
a100
b200
c400

key는 변수의 이름, value는 변수가 저장된 번지수를 저장한다.(Symbol table에 값을 바로 저장하는 것이 아님)

예를 들어 선언하지 않은 변수를 이용해 연산 등의 작업을 할 경우 발생하는 에러가 cannot find symbol...이다.
symbol을 찾지 못했다는 의미.


-학습정리 & quiz-
Q1. 변수, 자료형, 할당
Q2. 선언
Q3. float f;
Q4. 1.boolean 6.char 9.short 11.int 12.long 15.float 16.double
Q5. 4byte 정수형
Q6. symbol table


자료형(DataType)

class로 새로운 자료형을 만들어서 사용할 수 있다.

기본자료형이 아닌 string은 java에서 미리 만들어 제공하는 자료형(api)으로, toUpperCase(), toLowerCase(), Trim()등의 메서드를 사용할 수 있다.
string역시 사용자정의 자료형처럼 class의 형태로 만들어져있으나 java가 미리 만들어 제공한다고 생각하면 된다.

기본자료형은 기본적으로 가지고있는 자료형이므로 컴파일러가 바로 찾을 수 있다.
string같은 경우 기본자료형이 아니므로 해당 자료형을 만들어 둔 주소를 가르쳐주어야 한다.
→ 패키지를 import하여 위치를 불러오도록 함.
원래라면 java.lang.String = "a"; 로 선언해야 하지만 앞의 java.lang은 생략된 것.

public class FindAPI {
    public static void main(String[] args) {
        String str = "apple";
        System.out.println("str.length() = " + str.length());
    }
}

2진수는 앞에 0b를, 8진수는 0을, 16진수는 0x를 앞에 붙여주면 해당하는 진법의 숫자형으로 인식한다.

public class BinaryExam {
    public static void main(String[] args) {
        // Q.123을 10진수, 2진수, 8진수, 16진수로 출력하라.
        int decimal = 123;
        System.out.println("decimal = " + decimal);
        String binary = Integer.toBinaryString(decimal);
        System.out.println("binary = " + binary);   // 0b1111011
        String octal = Integer.toOctalString(decimal);
        System.out.println("octal = " + octal); // 0173
        String hexa = Integer.toHexString(decimal);
        System.out.println("hexa = " + hexa);   // 0x7B

        int a = 0b1111011;
        System.out.println("binary = " + a);
        int b = 0173 ;
        System.out.println("octa = " + b);
        int c = 0x7B;
        System.out.println("hexa = " + c);
    }
}

문자 자료형

컴퓨터는 문자도 숫자로 처리한다.
아스키코드를 사용할 경우 A는 65, 문자 0의 코드값은 48에 해당한다. (이 두 가지는 알아두자)
비영어권의 문자를 표기하기 위해 아스키코드(ASCII)보다 확장된 유니코드(Unicode, UTF-8)를 사용한다.

문자형인 charUnicode를 사용.

문자열 저장 시 앞에 \u를 붙이면 유니코드 문자로 인식한다. (2진수, 8진수, 16진수를 입력할때 각각 다른 문자를 앞에 붙여주어 알리는 것과 동일하다.)

자바는 문자 하나에 2byte의 공간을 할당하기 때문에 c언어처럼 배열 등의 방법을 사용하지 않아도 바로 한글을 표현할 수 있다.

유니코드에서 대소문자간의 코드값 차이는 32이다.
문자 A는 65, a는 97의 코드값을 가지며, 프로그램에서 대소문자를 바꿀 경우 대→소문자면 코드값에 +32를, 소→대문자이면 -32를 하는 식으로 대응한다고 생각하면 된다.

예제 1

int a = 'A';
System.out.println("a = " + a);
int b = 'B'+1;
System.out.println("b = " + b);
System.out.println("b = " + (char)b);


→ int자료형에 문자 A를 저장했지만 컴퓨터 내부적으로는 문자도 숫자로 처리하기 때문에 에러가 발생하지 않는다.
마찬가지로 연산도 가능.
int b = 'B'+1;에서 변수b를 출력하면 B의 다음 문자인 C가 출력된다.

예제 2

// Q. '가'라는 한글 한 문자를 변수에 저장하고 출력하시오.
char han = '가';
System.out.println("han = " + han);
System.out.println("int_han = " + (int)han);
int hanU = '\uAC00';
System.out.println("hanU = " + hanU);
System.out.println("hanU = " + (char)hanU);


int hanU = '\uAC00';에서 \u는 해당 문자(여기서는 AC00)가 유니코드 포맷임을 알려주는 문자이다.

예제 3

// Q. '1' + '2' = 3을 구현하시오.
int one = '1';
int two = '2';
int answer = (one-48) + (two-48);
int answer1 = (one-'0') + (two-'0');
System.out.println("answer = " + answer);	// answer = 3
System.out.println("answer1 = " + answer1);	// answer1 = 3

int로 저장한 '1'과 '2'를 단순히 +해서 출력하면 99가 나오게 된다.
그러므로 '1'에서 '0'의 코드값인 48을 빼주거나, 혹은 문자 '0'을 -연산한 결과끼리 더하면 답으로 숫자 3이 나오게 된다.

형 변환(Casting)

작은 타입을 큰 타입에 넣는 것은 문제가 없음. (이때는 자동 형변환이 된다. -예제1 참고)
반대로 큰 타입을 작은 타입에 넣으면 에러가 발생하므로 이때 강제 형변환(Casting)이 필요하다.

형 변환(Casting) 이란?
값의 타입(DataType)을 다른 타입으로 변경하는 것.
(DataType)변수;의 형태로 사용.

boolean타입은 형변환이 불가.

강제 형변환 시 주의점
변경전후의 자료형끼리의 자료의 크기(byte)가 같더라도 표현할 수 있는 값의 범위가 다를 경우 형 변환 시 표현하지 못하는 범위의 데이터에 대한 손실이 발생할 수 있으니 유의.

예제 1

float x = 15.6f;
int y = (int)x; // 강제 형변환 (데이터 손실)
System.out.println("y = " + y);	// y = 15

char c = 'A';
int cc = c;     // 자동 형변환
System.out.println("cc = " + cc);	// cc = 65

-학습정리 & quiz-
1. 기본 자료형, 사용자정의 자료형
2. String
3. 179, 0263, 0xB3
4. int, double
5. ASCII
6. Unicode
7. 32
8. casting (형 변환)
9. float f1 = 56.7f; int f2 = (int)f1;



1주차 수강후기

기초라고 가볍게 넘겼던 부분을 이론위주로 깊게 다뤄주어서 복습하기에 좋은 강의라고 생각한다.
앞으로 나올 개념에 대해 단편적인 지식이라도 있으면 훨씬 이해하기에 도움이 되는 내용이 아닌가 싶다.
특히 형변환과 자료형에 대해서 책보다 깊이 다루어 앞으로 나올 클래스를 사용하는 이유를 확실하게 짚어주어 많은 도움이 되었다.

profile
천 리 길도 가나다라부터

0개의 댓글