0. JAVA Intro
개요
- 학습 이유
- 가장 보편적인 언어
- 객체지향 프로그래밍 언어(OOP objective oriented programming)
- 학습 목표
- 자바의 4가지 특징 이해
- JVM의 기능과 필요성 이해
- main 메서드가 무엇인지 이해
- 자바의 특징
- 운영체제에 독립적 - C, C++과 다르게 JRE(JVM+표준 라이브러리) 환경에서 실행 가능
- 객체 지향 언어(OOP) - 유지 보수 용이
- 함수형 프로그래밍 지원 - 람다식, 스트림(컬렉션의 요소 필터, 매핑, 집계 용이, 코드 간결화)
- 자동 메모리 관리 - garbage collector 실행하여 자동으로 비사용 메모리 수거
JVM과 JDK
- JVM(JAVA virtual machine)
- compiler를 통해 기계어로 변환하고 jvm으로 각 운영체제에 맞는 기계어로 변환
- jvm은 자바 프로그램 실행하는 도구
- 속도가 c/c++에 비해 느리지만 jvm 내부 jit 컴파일러로 속도 개선
- JDK(java development kit)
- JRE(Java Runtime Environment) : JVM + 표준 클래스 라이브러리
- JDK(Java Development Kit) : JRE + 개발에 필요한 도구
- JDK는 개발자를 위한 도구(OracleJDK, OpenJDK)
Hello, World!
- public class Main{…}
- public 접근제어자 / Main class
- public static void main{String [] args){…}
- method
- 어떤 기능하는 코드의 묶음
- 함수와 비슷하지만 자바는 모든 클래스 내에 작성하기 때문에 method라고 부름
- void
- 반환 타입 return type(반환 값의 종류)
- String[] args
- 매개 변수(parameter) : method 내에 데이터 입력받아 저장하는 변수
- parameter type : String [] 매개변수 타입
- parameter name: args 매개변수 이름
- {…}
- method body : 구체적으로 어떤 기능을 하는지 작성
- return으로 값을 반환
- method
- method 호출
- add(1,2);
- main method
- main은 가장 먼저 실행되는 method → 진입점 함수
- 필수이고 먼저 실행된다
pseudo code(의사 코드)
- 사람의 언어로 코드를 작성
1. variable & type
개요
- 변수 저장 방식
- 메모리 공간 파악 - type
- 메모리 확보
- 값 저장
- 이름 - variable
- 학습 목표
- 타입 개념
- 기본 타입, 참조 타입
- 정수, 실수, 논리, 문자 타입
- 변수, 상수, 리터럴
- 자동 타입 변환
- 수동 타입 변환
변수
- 변수 : 변할 수 있는 데이터를 임시로 저장하는 수단
- 1byte 단위로 저장 - 주소 값을 지정
- 변수 선언과 할당
- 변수 선언 : 저장할 메모리 공간 확보, 인식할 이름 붙이기 ( int num;)
- 값 할당 : 변수에 값을 부여(int num =1;)
- 변수 명명 규칙
- CamelCase라는 규칙 사용
- 단어 첫 부분에 대문자 사용
- 영문자, 숫자, _, $ 사용 가능
- 숫자로 시작하는 변수 불가
- 이미 사용 중인 예약어 사용 불가(byte, class 등등)
- CamelCase라는 규칙 사용
상수
- 상수 : 변하지 말아야 할 데이터를 임시 저장
- 재할당 금지
- 상수 명명 규칙 : SCREAMING_SNAKE_CASE 사용
- 대문자와 _ 사용
- 선언 : final int NUM=1;
- 사용 이유
- 프로그램 실행 중 변하면 안 되는 경우
- 코드 가독성을 높이기 위해
- 코드를 쉽게 유지 관리
타입(type)
- 타입
- 값이 차지하는 메모리 공간의 크기(정수, 실수, 타입)
- 값이 저장되는 방식(기본 타입, 참조 타입)
- 기본 타입(primitive type)
- 실제 데이터 저장
- 정수 타입(byte, short, int, long), 실수 타입(float, double), 문자 타입(char), 논리 타입(boolean)
- 참조 타입(reference type)
- 값이 저장된 주소 값 저장
- 객체의 주소 저장, 8개 기본형 제외 나머지 타입
리터럴
- literal
- 문자가 가리키는 값 자체
- float pi=3.14159f
- long num=2395320L
정수 타입
- byte, short, int, long
- byte :1byte, short: 2byte, int : 4byte, long : 8byte
- 오버플로우
- 최댓값을 넘어서면 최솟값으로 순환
- 언더플로우
- 최솟값을 넘어서면 최댓값으로 순환
- byte 125+10=-121
- byte -125-10=121
- 데이터 타입 크기와 표현 범위
- 4byte의 경우 -2^31 ~ 2^31 - 1까지 표현
- 2’s complement : 2의 보수를 취하고 1을 더해서 부호 변환
- 0111 1111 =127 / 1000 000 000 = -128
실수 타입
- 소수점을 가지는 float, double
- float 타입에는 f를 붙여서 선언
- float num= 3.1415f
- 부동 소수점 방식 사용
- 오차가 존재하는데 double이 더 정밀
- (-1)^sign * (1+fraction) * 2^(exponent-bias)
- bias=2^(bit-1)-1
- denormalized number : 지수부 0 일 경우 → (-1)^sign * (0+fraction) * 2^(bias-1)
- infinity : 지수부 1이고 fraction이 0인 경우
- NaN : 지수부가 1이고 fraction이 0이 아닌 경우
- 실수형 오버플로우, 언더플로우
- 해당 범위를 넘어가면 오버플로우/ 0과 가까이 표현되지 못한 수는 언더플로우
논리 타입
- boolean : tree or false 구분
- 1bit면 되지만 jvm 최소 단위가 1byte 이므로 1byte 차지
문자 타입
- char : 2byte 크기
- 작은따옴표 ‘’ 사용
- 하나 문자만 저장 가능
- 유니코드로 저장
- 숫자 할당할 수 있지만 유니코드에 해당하는 문자열 반환
타입 변환
- 자동 타입 변환
- 바이트 크기가 작은 타입에서 큰 타입으로 변할 때
- 덜 정밀한 타입에서 더 정밀한 타입으로 변할 때
- byte(1) -> short(2)/char(2) -> int(4) -> long(8) -> float(4) -> double(8)
- 수동 타입 변환
- 큰 타입에서 작은 타입으로 변환할 때 자동 타입 변환 불가
- 캐스팅 : ()를 사용하여 수동 변환
- string to int : Integer.parseInt(…)
- int to string : Integer.toString(…)
2. String
개요
- 학습 목표
- String 이해
- String 선언
- String method 이해
- String tokenizer 이해
- String builder, buffer 이해
String 타입의 변수 선언과 할당
- String 선언
- String 타입 선언과 “”(큰 따옴표)로 감싸진 문자열 리터럴 할당
- 문자열 리터럴 할당 : 변수 = “문자열”;
- String 클래스의 인스턴스 할당 : 변수 = new String(”문자열”);
- 참조 타입 변수 : 실제 문자열 값을 가지는 것이 아니라 주소 값 저장
- String 클래스 메서드인 toString()이 자동 호출되어 주소 값에 위치한 인스턴스 내용 문자열 반환
- String 타입 선언과 “”(큰 따옴표)로 감싸진 문자열 리터럴 할당
- ==(좌항 우항 값 같은지 확인) / .equals() (문자열의 내용을 비교)
- 동일한 리터럴 문자열은 같은 문자열의 참조값을 갖게 된다.
- 인스턴스를 생성하는 경우 문자열이 같아도 별개의 인스턴스 생성
String 클래스의 메서드
- charAt()
- 해당 인덱스의 문자 출력
- compareTo()
- 문자열 사전 순으로 비교
- 해당 문자열이 인수보다 작으면 음수, 같으면 0, 크면 양수
- 대소문자 구분이 default
- compareToIgnoreCase()로 대소문자 구분 안 하고 비교 가능
- concat()
- 해당 문자열을 뒤에 인수를 연결
- indexOf()
- 해당 문자열에서 인수에 들어간 문자의 인덱스 출력
- trim()
- 공백 문자 제거
- 원본은 변하지 않음
- toLowerCase() / toUpperCase()
- 소문자로 변경 / 대문자로 변경
- 원본은 변하지 않음
StringTokenizer
- 문자열을 지정한 구분자를 기준으로 쪼개 주는 클래스
- import java.util.StringTokenizer;
- StringTokenizer tokenizer=new StringTokenizer(str, “구분자”);
- default는 공백
- int countTokens()
- 남아있는 토큰의 개수를 반환
- boolean hasMoreElements(), boolean hasMoreTokens()
- 현재 위치 뒤에 있는 문자열 중 하나 이상 토큰을 사용 가능하면 true, 아니면 false 반환
- Object nextElement(), String nextToken()
- 다음 토큰 반환
StringBuilder
- 인스턴스를 계속 더하는 상황에서 사용
- StringBuilder strb=new StringBuilder();
- .append()로 연결해서 사용
- 변수에 저장할 때는 toString()를 사용하여 할당
StringBuffer
- String 클래스는 한번 생성하면 읽기만 가능하고 수정 불가, StringBuffer는 수정 가능
- 기본 16문자에, 생성자에 크기 지정 가능
- 크기 지정해도 16문자 여유 공간 자동 확보
- String에 +를 통해 연결하면 형 변환으로 속도가 느리지만 StringBuffer는 빠른 속도
- append()
- 뒤에 문자열 연결
- capacity()
- 현재 버퍼 크기 반환
- 문자 크기 + 16으로 반환
- delete()
- 첫 번째 인수 인덱스부터, 두 번째 인수 인덱스 전까지 문자열 삭제
- deleteCharAt()으로 문자열 하나 삭제 가능
- insert()
- 첫번째 인수의 인덱스부터 두번째 인수 문자열 삽입
'Backend boot camp > Session1' 카테고리의 다른 글
[JAVA] 객체 지향 프로그래밍 기초 (0) | 2022.09.06 |
---|---|
[JAVA] 기초 - 배열 (0) | 2022.09.06 |
[Git] 기초 (0) | 2022.09.06 |
[Linux] 기초 (0) | 2022.09.06 |
[Publishing]HTML, CSS (0) | 2022.08.23 |