[패스트캠퍼스] 자바&스프링 강의 2주차

YunGyu Choi·2023년 5월 29일
0

FastCampus JavaSpring

목록 보기
2/8

웹 개발 역량강화를 위해 내일배움카드로 수강할 수 있는 백엔드 교육과정을 찾아보았다. 남궁성&박매일 님의 '나도 할 수 있는 Java & Spring 웹 개발 종합반'이 교육일정이나 커리큘럼이 무난한 것 같아서 수강하게 되었다. 8주 총 65시간의 과정을 포스팅하고자 한다.

커리큘럼

주차학습 내용
1주차생각,표현,코딩하기란?
2주차Java 기초 다지기1
3주차Java 기초 다지기2
4주차객체지향 프로그래밍 시작하기
추가1객체지향 프로그래밍 설계하기
5주차Spring 시작하기
6주차Spring MVC part1
7주차Spring MVC part2
8주차Spring MVC part3
추가2Spring DI 와 AOP
파이널 프로젝트

자바 개발환경(플랫폼) 구축하기

자바 언어로 만들 수 있는 프로그램의 유형은 크게 3가지이고, 그 유형에 따라 구축할 개발환경이 다르다.

  • 데스크톱 응용 소프트웨어 : JavaSE 플랫폼 구축
  • 웹 기반 응용 소프트웨어 : JavaEE 플랫폼 구축
  • 모바일 기반 응용 소프트웨어 : JavaME 플랫폼 구축

첫 자바 프로그래밍 도전

  • 객체지향 프로그래밍
    자바는 객체지향 언어이다. 여기서 객체 지향이란 객체(Class)단위로 프로그래밍하는 것을 뜻한다. 이것은 인간 중심 관점이다. 클래스 내부에서 변수는 명사와 비슷하고 메소드는 동사와 비슷하다. 그리고 객체 지향 프로그래밍은 클래스들 간의 유기적인 연동으로 프로그램이 짜여진다.

    메인 클래스 만들기 : 시작점이 되는 메인 메서드를 가지고 있는 클래스 만든다.
    (JavaEE는 Service에서 시작한다.)
    메인 메서드에 기능 구현하기 : 메인 클래스 안에 동작을 구현한다.
    (다른 클래스와 다른 메서드가 필요할 수 있다.)

변수와 타입

1) 변수

컴퓨터 메모리(RAM)는 수많은 번지들로 구성된 데이터 저장 공간이다. 프로그램은 데이터를 메모리에 저장하고 읽는 작업을 빈번히 수행한다. 이때 데이터를 어디에, 어떻게 저장할지 정해져 있지 않다면 메모리 관리가 무척 어려워진다. 프로그래밍 언어는 변수를 사용해 이 문제를 해결한다.
변수는 하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름이다. 변수를 통해 프로그램은 메모리 번지에 값을 저장하고 읽을 수 있다.

변수의 선언

변수를 사용하기 위해서 자바는 먼저 변수를 선언해야한다. 변수 선언은 어떤 타입의 데이터를 저장할 것인지 그리고 변수 이름이 무엇인지를 선언한다.
변수 선언은 저장되는 값의 타입과 이름만 결정한다. 선언만 이루어진 상태에서는 아직 메모리에 할당이 이루어진 것은 아니다.

변수에 대입

변수가 선언되면 대입연산자 =를 활용 하여 해당 변수에 값을 대입할 수 있다. 그리고 변수에 값이 최초로 대입될 때 메모리에 값이 저장된다.

변수 초기화

변수에 최초로 값을 대입하는 행위를 변수 초기화라고 한다.

변수 타입

변수는 선언될 때 타입에 따라 저장할 수 있는 값의 종류와 허용 범위가 달라진다. 자바는 정수, 실수, 논리값을 저장할 수 있는 기본 타입 8개를 다음과 같이 제공한다.

타입메모리 크기저장되는 값의 허용 범위
boolean1byte(8bit)ture, false
char2byte(16bit)유니코드 문자
byte1byte(8bit)-128 ~ 127
short2byte(16bit)-32,768 ~ 32,767
int4byte(32bit)-2,147,483,648 ~ 2,147,483,647
long8byte(64bit)-2^63 ~ (2^63-1)
float4byte(32bit)유효 소수 이하자리 7자리
double8byte(64bit)유효 소수 이하자리 15자리

리터럴(Literal)

코드에서 프로그래머가 직접 입력한 값이다.

2) 타입

정수 타입

변수에 대입할 정수 리터럴은 진수에 따라 작성법이 다르다. 아래는 13을 다르게 표현한 것이다.

int bin = **0b**1101; // 2진수
int oct = **0**15;	// 8진수
int deci = 13;		// 10진수
int hex = **0x**D;	// 16진수

컴파일러는 int로 간주하기 때문에 l을 붙여서 long type 임을 컴파일러에게 알려줘야 한다.

long var1 = 1000000000000;	// 컴파일 오류
long var2 = 1000000000000**l**;	// Long 타입 인식

문자 타입

하나의 문자를 작은따옴표(')로 감싼 것을 문자 리터럴이라고 한다. 문자 리터럴은 유니코드로 변환되어 저장되는데, 유니코드는 세계 각국의 문자를 0~65535 숫자로 매핑한 국제 표준 규약이다.

char var1 = 'A';	// 유니코드 65로 대입
char var2 = '가';	// 유니코드 44032로 대입 

유니코드도 정수이므로 char 타입도 정수 타입에 속한다. 따라서 char 변수에 작은 따옴표로 감싼 문자가 아니라 유니코드 숫자를 직접 대입할 수도 있다.

char var3 = 65;	//문자 'A'
char var4 = **0x**0041	// 문자 'A'

자바는 ''; 빈 문자를 대입하면 컴파일 에러가 발생한다.

실수 타입

실수 타입에는 float과 double이 있다. 그리고 '정밀도(precision)'라는 개념이 존재한다. 정밀도는 소수점 이하 숫자의 자리수를 의미한다. float의 정밀도는 6~7자리 정도이고, double의 정밀도는 15자리 정도이다. 그러나 정밀도는 상황에 따라서 떨어질 수 있다.

자바는 IEEE 754 표준에 근거해서 float타입과 double타입의 값을 부동 소수점 방식으로 메모리에 저장한다.
부동 소수점 표현은 실수를 정확하게 표현하기 위해 가수지수를 이용하여 값을 근사적으로 표현한다.

가수는 소수점 앞 또는 뒤에 있는 유효숫자를 의미한다. 예를 들어, 123.45라는 수를 부동소수점 형식으로 표현하면 1.2345 x 10^2와 같이 표현할 수 있고 이때 12345가 가수에 해당한다.

지수는 10의 몇제곱인지를 나타내는 숫자로, 가수에서 소수점의 위치를 조절하는 역할을 한다. 지수는 양수일 수도 있고, 음수일 수도 있다. 음수일 경우 소수점을 앞으로 이동시키고 양수일 경우 소수점을 뒤로 이동시킨다. 이를 지수 표기법으로 나타내면 1.2345e+2 이다.

부호는 음수인지 양수인지 결정하는 것으로 최상위 1bit가 결정한다.

실수 타입도 정수 타입의 long와 비슷한 경우가 있다. 컴파일러는 기본적으로 double로 인식하기 때문에 float 인 경우 'f'로 컴파이러에게 알려줘야 한다.

float f1 = 3.14;   //  컴파일러가 double로 인식
float f2 = 3.14**f**;  // 컴파일러가 float으로 인식

논리 타입

참과 거짓을 의미하는 논리 리터럴은 true와 false이다. 논리 리터럴은 boolean 타입 변수에 다음과 같이 대입할 수 있다. 연산식 중에서 비교 및 논리 연산의 산출값은 true 또는 false이므로 boolean 타입 변수에 다음과 같이 대입할 수 있다.

문자열 타입

작은따옴표(')로 감싼 한 개의 문자는 char타입이지만, 큰따옴표(")로 감싼 한 개의 문자나 작은따옴표(')로 감싼 여러 개의 문자들은 유니코드로 변환되지 않는다.

char var1 = "A";  	// 컴파일 에러
char var2 = 'abc';	// 컴파일 에러
char var1 = 'A';

문자들의 모임을 문자열이라 하고 문자열은 큰따옴표(")로 감싼다. 문자열을 변수에 저장하고 싶다면 String타입을 사용해야 한다.
String은 자바 기본 타입에 속하지 않는 '참조 타입'이다.

자동 타입 변환

자동 타입 변환은 말 그대로 자동으로 타입 변환이 일어나는 것을 말한다. 자동 타입 변환은 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 대입될 때 발생한다.
기본 타입을 허용 범위 순

  • byte < short,char < int < long < float < double

정수 타입이 실수 타입으로 대입되는 경우 무조건 자동 타입 변환된다.

long longValue = 5000000000L;
float floatValue = longValue;		// 5.0e9f로 저장됨
double doubleValue = longValue;		// 5.0e9로 저장됨

char 타입의 경우 int 타입으로 자동 변환되면 유니코드 값이 int타입에 대입된다.

char charValue = 'A';
int intValue = charValue;	// 65가 저장됨

강제 타입 변환

큰 허용 범위 타입은 작은 허용 범위 타입으로 자동 타입 변환될 수 없다. 마치 큰 그릇을 작은 그릇 안에 넣을 수 없는 것과 같은 이치이다. 하지만 큰 그릇을 작은 그릇 단위로 쪼개서 한 조각만 작은 그릇에 넣는 것은 가능하다.

  • int ➡️ byte
    int intValue = 10
    byte byteValue = (byte) intValue;	// 캐스팅으로 강제 변환
  • long ➡️ int
    long longValue = 300;
    int intValue = (int) longValue;	// 강제타입 변환후 300 그대로 유지
  • int ➡️ char
    int int Value = 65;
    char charValue = (char) intValue;	// 'A'
  • 실수 ➡️ 정수
    double doubleValue = 3.14;
    int intValue = (int) doubleValue;	// 정수 부분인 3만 저장

문자열을 기본 타입으로 변환

참조 타입인 문자열을 기본 타입으로 바꾸기 위해서는 parse를 사용해야한다.
바꿀기본타입 변수명 = 바꿀기본타입.parse바꿀기본타입(문자열)과 같은 형태로 사용한다.
다만, 기본타입을 문자열로 바꾸려면 String.valueOf(기본타입)과 같은 형태로 사용한다.

  • String ➡️ byte
    String str = "10";
    byte value = Byte.parseByte(str);
  • String ➡️ short
    String str = "200";
    short value = Short.parseShort(str);
  • String ➡️ int
    String str = "300000";
    int value = Integer.parseInt(str);
  • String ➡️ long
    String str = "40000000000";
    long value = Long.parseLong(str);
  • String ➡️ float
    String str = "12.345";
    float value = Float.parseFloat(str);
  • String ➡️ double
    String str = "12.345";
    double value = Double.parseDouble(str);
  • String ➡️ boolean
    String str = "true";
    boolean value = Boolean.parseBoolean(str);
  • 기본 타입 값 ➡️ String
    String str = String.valueOf(기본 타입 값);

느낀점

프로그래밍을 완전 처음 접하는 사람을 기준으로 강의가 제작된 것 같다. 이미 Python으로 입문해서 C언어나 Java, Javascript기초 문법을 경험하고 프로젝트도 몇 번 해봐서 복습한다는 느낌으로 가볍게 들었다. 하지만 Java로 처음 입문하는 사람에게는 좋은 강의일 것 같다.

profile
velog에는 이론을 주로 정리하고, 코드와 관련된 것은 Git-hub로 관리하고 있어요. 포트폴리오는 링크된 Yun Lab 홈페이지를 참고해주시면 감사하겠습니다!

0개의 댓글