(TIL)pre-onboarding_01

졍이🥨·2022년 11월 8일
0

개발일지

목록 보기
3/38

2022-11-07 (월)

Chap.01_자바 시작하기

*프로그래밍 언어와 자바

source file(소스파일): 프로그래밍 언어로 작성한 파일

compile(컴파일)= 0과 1로 이루어진 기계어 파일로 번역해줌


자바로 작성된 프로그램은 모두 운영체제에서 실행가능

-> 윈도우에서 개발된 프로그램을 수정하지 않고 바로 리눅스에서도 실행할수 있는 장점


객체지향 프로그래밍(OOP):객체(부품)를 만들고, 이 객체들을 서로 연결해서 더 큰 프로그램을 완성하는 기법


*자바 프로그램 개발 과정

① 소스파일(~.java)을 작성한다.

② javac 명령어로 컴파일한다.

③ java 명령어로 실행한다.

④ 실행결과를 확인한다.


'*.java': 확장명이 java인 모든 파일

-명령프롬프트(cmd)에서 컴파일하고 실행하기-

javac -d[바이트 코드 파일 저장위치][소스경로/module-info.java 소스 경로/*java]

바이트코드는(ex)Hello.clss지만 java명령어로 실행할 때는 .class를 생략한다.

-> java -p [바이트코드 파일 저장 위치][패키지이름...클래스이름]


Chap.02_변수와 타입

변수: 값을 저장할 수 있는 메모리의 특정 번지에 붙이는 이름

자바의 변수는 다양한 타입의 값을 저장할 수 없다.

변수이름은 자바 언어에서 정한 '명명규칙'을 따라야 하고, 예약어는 사용할 수 없음.(혼공자_자바 p.49)

예약어:class, if, else, null, int, float 등


값 저장 -> 대입연산자(=)를 사용. 수학에서는 '='는 '같다'의 의미지만 자바언어에서는 오른쪽값을 왼쪽의 변수에 저장한다는 의미 !

ex) int score; (//변수선언)

score = 90; (//90을 score에 저장, 변수초기화, 90=초기값이 됨)

꼭 변수에 값을 저장해주어야함. 변수에 최초로 값이 저장될 때 변수가 생성되며, 이것을 '변수초기화'라고 함. 이때 사용된 값을 초기값 이라고 함.


자바가 제공하는 기본 타입(총 8개) : 정수타입, 실수타입, 논리타입

정수타입 - byte, char, short, int, long

실수타입 - float, double

논리타입 - boolean

기본적으로 컴파일러는 정수 리터럴을 int 타입으로 간주한다. int의 허용범위를 초과할 경우 long 타입을 사용해야하는데 이 때, 정수 리터럴 뒤에 대문자L을 사용하여 long타입임을 컴파일러에게 알려주어야한다.

long balance = 300000000000; (에러)

long balance = 300000000000L; (정답)


문자리터럴 : 하나의 문자를 작은 따옴표(')로 감싼 것, 유니코드로 변환되어 저장

예를 들어, 'A', 'B', '가', '각' 문자를 char 변수에 저장할 경우 변수에 저장되는 유니코드 값은 다음과 같다.

char var1 = 'A'; //유니코드 65

char var3 = '가'; //유니코드 44032

또한, 유니코드는 정수이므로 char도 정수타입에 속한다. 그래서 작은따옴표(')로 감싼 문자가 아니라, 10진수 또는 16진수 형태로 유니코드를 저장할 수 있다.

char c = 65;

char c = 0x0041;


*작은따옴표(')로 감싼 문자 리터럴은 유니코드로 변환되기 때문에 int 타입 변수에도 저장할 수 있음. char 타입 변수에 저장하려면 자동으로 문자로 매핑되어 출력되지만, int타입변수에 저장하면 유니코드 자체가 출력된다.

char var 1 = 'A';

int var 2 = 'A';

System.out.println(var1); //A를 출력

System.out.println(var2); //65를 출력


문자열 : 자바에서 큰 따옴표(")로 감싼 문자들

큰 따옴표(")로 감싼 문자 또는 여러 개의 문자들은 유니코드로 변환되지 않습니다.

작은 따옴표(')와 큰 따옴표(")는 컴파일러가 문자 리터럴과 문자열 리터럴을 구별하는 기호로 사용됨. 문자열을 변수에 저장하고 싶아면 String 타입을 사용해야한다.

String var 1 = "A";

String var 2 = "홍길동";


이스케이프 문자 : 문자열 내부의 역슬래시(\)

이스케이프 문자를 사용하면 문자열 내부에 특정 문자를 포함시킬 수 있다. (혼공자_자바 p.66)


자바는 실수 리터럴을 기본적으로 double 타입으로 해석하기 때문에 double 타입 변수에 저장해야 한다. 실수 리터럴을 float 타입으로 저장하고 싶다면 리터럴 뒤에 소문자f 또는 대문자F를 붙여서 컴파일러가 float타입임을 알 수 있도록 해야 한다.

float var 1 = 3.14; (오답)

float var 1 = 3.14F; (정답)

double var 2 = 3.14; (정답)


boolean 타입 변수는 주로 두가지 상태값에 따라 조건문과 제어문의 실행 흐름을 변경하는 데 사용함


자동타입변환 : 자동으로 타입변환이 일어나는 것 / 자동타입변환은 값의 허용 범위가 작은 타입이 허용 범위가 큰 타이븡로 저장될 때 발생함.(혼공자_자바 p.72)

byte < short < int < long < float < double

실수 타입은 정수 타입보다 허용 범위가 더 크기 때문에 정수 타입이 실수 타입으로 저장될 경우에는 무조건 자동 타입 변환이 일어남.


char 타입의 경우 int 타입으로 자동 변환되면 유니코드 값이 int 타입에 저장됨.

char charValue = 'A';

int intValue = charValue; //65가 저장됨

System.out.println(intValue); //65를 출력

*char르 보다 허용범위가 작은 byte 타입은 char 타입으로 자동 타입 변환 될 수 없다. => char 타입 허용 범위는 음수르 포함하지 않는데, byte 타입은 음수를 포함하기 때문


강제타입변환 : 큰 허용 범위 타입을 작은 허용 범위 타입으로 강제로 나눠서 저장하는 것 / 강제 타입 변환은 캐스팅 연산자 괄호()를 사용하는데, 괄호 안에 들어가는 타입은 나누는 단위.

작은 허용 범위 타입 = (작은 허용 범위 타입) 큰 허용 범위 타입 //(혼공자_자바 p.74)


int 타입은 char 타입보다 더 큰 허용 범위를 가지기 때문에 자동변환이 되지않는다. 하지만 (char) 캐스팅 연산자를 사용해서 char 타입으로 강제변환 할 수 있다. char 타입으로 변환하는 이유는 문자를 출력할 수 있기 때문이다.

int intValue = 65;

char charvalue = (char) intValue; //강제 타입 변환

System.out.println(intValue); //A가 출력됨


실수타입(float, double)은 정수타입(byte, short, int, long)으로자동변환할 때 소수점 이하 부분은 버려지고, 정수 부분만 저장된다.


*정수 연산에서의 자동 타입 변환

int 타입보다 작은 byte, short 타입의 변수는 산술연산식에서 피연산자로 사용되면 int 타입으로 자동 타입 변환되어 연산을 수행한다.

*특별한 이유가 없는 경우 정수 연산에 사용되는 변수는 오른쪽 예시와 같이 int 타입으로 선언하는 것이 타입 변환을 줄여주는 방법.

byte x = 10;

byte y = 20;

byte result = x + y; (에러)

int result = x + y; (정답)


*int 타입보다 허용 범위가 더 큰 long 타입이 피연산자로 사용되면 다른 피연산자는 '무조건' long타입으로 변환하고 연산을 수행해야함. => 연산 결과를 long타입 변수에 저장해야함


실수 연산에서의 자동 타입 변환 : 정수연산과 마찬가지로 피연산자 중 하나가 double 타입이라면 다른 피연산자도 double 타입으로 자동 타입 변환되어 연산을 수행=>연산 결과는 double 타입이 된다.

만약 꼭 int 타입으로 변환해야 한다면 double 타입을 int 타입으로 강제 변환하고 덧셈 엿산을 수행하면 된다.

int intValue = 10;

double doubleValue = 5.5;

int result = intValue + (int) doubleValue; //result에 15가 저장됨


*특정부분을 먼저 연산하고 싶을 경우

연산은 앞에서 부터 순차적으로 +연산을 수행한다. 그러나, 앞에서부터 순차적으로 +연산을 수행하지 않고 우선 연산하고 싶은 부분이 있다면 해당 부분을 괄호()로 감싸준다. 괄호()는 최우선으로 연산을 수행한다.


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

String에서 int로 변환해보면,

String str = "10";

int value = Integer.parseInt(str);

-

String에서 double로 변환해보면,

String str = "12.345";

double value = Double.parseDouble(str);

-

String에서 boolean으로 변환해보면,

String str = "true";

boolean value = Boolean.parseBoolean(str);


문자열이 숫자가 아닌 알파벳이나 특수 문자, 한글 등을 포함하고 있을 경우 숫자 타입으로 변환을 시도하면 숫자 형식 예외(NumberFormatException)가 발생합니다.

String str = "1a";

int value = Integer.parseInt(str); //NumberFormatException발생


*반대로, 기본타입(byte, short, char, int, long, float, double, boolean)의 값을 문자열로 변경하는 경우, 간단히 String str = valueOf()메소드를 이용하면 된다.

String str = String.valueOf(기본타입값);

ex) String str = String.valueOf(3)을 실행하면 문자열 "3"을 얻을 수 있다.


System.out.println("출력내용"); //표준출력장치

System.in.read("입력내용"); //표준입력장치


*변수와 시스템 입출력 (혼공자_자바 p.90)

println(내용); : 괄호 안의 내용을 출력하고 해을 바꿔라

printf("형식문자열", 값1, 값2, ...); : 괄호 안의 첫 번째 문자열 형식대로 내용을 출력해라

*printf()메소드는 개발자가 원하는 형식화된 문자열을 출력

printf()의 괄호에는 출력 형식 문자열과 제공될 값을 쉼표로 나열한다.(혼공자_자바 p.90 표 참고)

*형식문자열에서 %와 conversation(변환문자)는 필수로 작성, 그 외의 항목은 모두 생략할 수 있다. %는 형식문자열의 시작, conversation에는 제공되는 값의 타입에 따라 d(정수), f(실수), s(문자열)을 입력한다.

형식문자열에 포함될 값이 2개 이상일 경우에는 값의 순번(argument_index$)을 알려주어야한다. ex) $1은 첫번째 값, $2는 두번째 값

flags는 빈자리를 채우는 방법(p.91 표 참고)


키코드를 읽기 위해서는 System.in의 read()를 이용한다.


profile
Front-End :)

0개의 댓글