| Java Intro
Java의 특징
- 운영체제에 독립적, 즉 모든 운영체제에서 실행이 가능
- 객체 지향 언어 (Object Oriented Programming, OOP)
- 함수형 프로그래밍 지원 : 람다식, 스트림 > 컬렉션의 요소를 필터링, 매핑, 집계 처리하기 쉬워지고 코드가 간결
- 자동 메모리 관리(Garbage Collection)
JVM(Java Virtual Machine)
- 자바 프로그램을 실행시키는 도구
- 컴파일 : 자바 언어를 JVM 이 이해할 수 있는 바이트 코드로 변환
- 바이트 코드를 운영체제에 맞는 기계어로 변환
JDK(Java Development Kit)
- JRE(Java Runtime Environment) : JVM + 표준 클래스 라이브러리
- JDK(Java Development Kit) : JRE + 개발에 필요한 도구
* 개발 툴 버전 선택 시 '안정성' 을 최우선 고려! ( 장기지원여부, 역사 )
메서드(Method) 가볍게 이해하기
- 어떤 기능을 하는 코드를 묶음으로 묶은 것, 어떠한 기능을 수행하기 위한 일련의 코드들의 집합체
- 데이터를 입력받아 입력받은 데이터에 일련의 처리를 가한 후, 그 결과값을 반환
메서드 정의 :
반환_타입 메서드_이름(매개변수_타입 매개변수_이름) {
메서드_바디
}
예시)
int add(int num1, int num2) {
return num1 + num2;
}
<반환타입> : 메서드가 반환할 반환 값의 유형
<매개변수> : 외부로부터 전달받은 값을 저장하고 있는 변수
<메서드 바디> : 구체적으로 메서드가 어떤 기능을 수행할지에 대한 코드를 작성하는 부분
- <return> 키워드를 사용해 어떤 값을 반환할 수 있다
메서드 호출 :
메서드_이름(매개변수에 넣어줄 값)
예시)
add(1, 2);
main 메서드 해석하기
public static void main(String[] args) {
}
void : 반환 타입
main : 메서드 이름
String[] : 매개변수의 타입
args : 입력 데이터 값이 args 라는 매개변수에 할당되는구나!
{} : 중괄호 안에 코드를 작성
| 변수 Variable
컴퓨터가 데이터를 다룰 때, 그 데이터를 담아두는 메모리 공간의 이름
- 선언 : 메모리 공간의 크기를 파악 후 확보한 뒤 이름을 붙이는 것
- 할당 : 선언한 변수에 값을 담는 것
- 초기화 : 변수 선언 후 처음으로 값을 할당하는 것
- 재할당 : 초기화 후 다시 다른 값을 할당하는 것
- 카멜 케이스(camelCase) : 두 번째 단어부터 대문자로 시작해 구분
- 영문자(대소문자가 구별), 숫자, _, $를 사용
- 숫자로 시작 불가
- 자바에서 이미 사용 중인 예약어(reserved word) 불가
상수(Constant)
: 변하지 말아야 할 데이터를 임시로 저장하기 위한 수단
- 재할당이 금지된 변수
- final이라는 키워드를 사용해 선언
- SCREAMINGSNAKE_CASE 표기법 : 대문자에 언더바()를 넣어 구분
<상수를 사용하는 이유>
1. 프로그램이 실행되면서 값이 변하면 안 되는 경우, 실수를 방지할 수 있다.
2. 코드 가독성, 상수 명으로 값을 사용할 수 있기 때문
3. 코드 유지관리 용이, 수정이 필요할 때 쉬움
| 타입 (Type)
: 값의 유형 및 종류, 값이 차지하는 메모리 공간의 크기와, 값이 저장되는 방식을 결정
- 기본 타입(primitive type) : 실제 값 저장
- 정수 타입(byte, short, int, long), 실수 타입(float, double), 문자 타입(char), 논리 타입(boolean)
- 참조 타입(reference type) : 주소값 저장
리터럴(Literal)
: 변수에 할당하는 값, 문자가 가리키는 값 그 자체
정수 타입 : byte , short , int , long

- long타입 리터럴의 경우에는 리터럴 뒤에 접미사 L을 붙임
- 오버플로우 : 최대값을 넘어가면 해당 데이터 타입의 최소값으로 값이 순환
- 언더플로우 : 최소값을 넘어가면 해당 데이터 타입의 최대값으로 값이 순환
실수 타입 : float , double

- float형 리터럴에는 반드시 접미사 f 를 붙임
- 오버플로우 : 값이 음의 최소 범위 또는 양의 최대 범위를 넘어갔을 때 발생하며, 이때 값은 무한대
- 언더플로우 : 값이 음의 최대 범위 또는 양의 최소 범위를 넘어갔을 때 발생하며, 이때 값은 0
논리 타입 : boolean ( 1byte )
문자 타입 : char ( 2byte )
타입 변환
- 자동 타입 변환
- 바이트 크기가 작은 타입에서 큰 타입으로 변환할 때
- 덜 정밀한 타입에서 더 정밀한 타입으로 변환할 때
- byte(1) > short(2)/char(2) > int(4) > long(8) > float(4) > double(8)
- 수동 타입 변환 (캐스팅)
- 메모리 용량이 더 큰 타입에서 작은 타입으로는 자동 변환 불가
- 캐스팅 연산자 ()를 사용
| 문자열 (String)
String 타입의 변수 선언과 할당
- String 타입의 변수는 String 변수명;으로 선언
- 문자열 리터럴을 할당하는 방법 : 변수 = “문자열”;
- String 클래스의 인스턴스를 생성하여 할당하는 방법 : 변수 = new String(”문자열”);
String 클래스의 메서드 (1)
chatAt() : 해당 문자열의 특정 인덱스에 해당하는 문자를 반환
compareTo() : 해당 문자열을 인수로 전달된 문자열과 사전 편찬 순으로 비교 후 결과 반환
1. 대소문자를 구분하여 비교
2. 같다면 0을 반환
3. 해당 문자열이 인수로 전달된 문자열보다 작으면 음수, 크면 양수를 반환
compareToIgnoreCase() : 대소문자 구분 없이 비교 후 결과 반환
concat() : 해당 문자열의 뒤에 인수로 전달된 문자열을 추가한 새로운 문자열을 반환
trim() : 해당 문자열의 맨 앞과 맨 뒤에 포함된 모든 공백 문자를 제거
toLowerCase() : 해당 문자열의 모든 문자를 소문자로 변환
toUpperCase() : 대문자로 변환
.length() : 문자열의 길이
String 클래스의 메서드 (2) _ StringTokenizer
StringTokenizer를 사용하기 위해서는 java.util.StringTokenizer를 import해야함
StringTokenizer tokenizer = new StringTokenizer(str);
.countTokens() : 남아있는 token의 개수(int)를 반환
.hasMoreElements(), .hasMoreTokens() : 현재 위치 뒤에 있는 문자열에서 하나 이상의 토큰을 사용할 수 있는 경우 true를 반환하고 그렇지 않으면 false를 반환 (boolean 반환)
.nextElement(), .nextToken() : 다음의 토큰을 반환 (각각 Object, String 형 반환)
String 클래스의 메서드 (3) _ StringBuilder / StringBuffer
1.
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("문자열 ").append("연결");
String str = stringBuilder.toString();
2.
StringBuffer str = new StringBuffer("Java");
.append(" ") : 한 문자열에 다른 문자열을 추가
.capacity() : StringBuffer 인스턴스의 현재 버퍼 크기를 반환
- StringBuffer 클래스는 내부적으로 버퍼(buffer)라고 하는 독립적인 공간을 가짐
- 버퍼 크기의 기본값은 16개의 문자를 저장할 수 있는 크기
- 생성자를 통해 그 크기를 별도로 설정 가능
- 하지만 인스턴스 생성 시 사용자가 설정한 크기보다 언제나 16개의 문자를 더 저장할 수 있도록 여유 있는 크기로 생성
.delete(index,index) : 지정 구간의 문자열 삭제
.deleteCharAt(index) : 특정 위치의 문자열을 삭제
.insert(index, "문자열") : 해당 index 에 "문자열" 삽입
| 7일차 회고 |
오늘은 백엔드 과정 탑승 2주차 첫 날! 일요일에 거의 새벽 5시쯤 잠들어서 8시 40분에 부랴부랴 일어났다... 역시 아무도 방해하지 않는 새벽시간이 제일 집중이 잘된다.
주말동안은 한 주의 전반적인 내용 복습과 부족했던 부분에 대해 학습 자료를 더 읽어보고 지난주 구멍났던 블로깅도 완성했다. 주말에도 어떤 공부를 했고 한주를 돌아보며 부족했던 부분과 다음 한주를 어떻게 보낼지 기록하는 포스팅을 업로드해도 좋을 것 같다.
오늘은 드디어 자바 언어 공부를 시작했다. 툴설치 후 메서드 맛보기, 변수와 타입, 문자열에 대해 공부 후 페어와 함께 연습문제 19개를 풀었다. 지난주 함께했던 페어와 진행했는데, 자바를 공부하셨던 분이라 페어학습 시작 전 이미 문제를 다 푸셨다...!!! 나는 11번 진행중인 상황이라 11번부터 내가 코드를 치고 페어분이 가이드를 해주셨다.
처음에는 변수에 메서드 적용하는 방법이 익숙치 않아 쉽사리 코드가 써지지 않았는데, 페어분께서 천천히 설명해주셨고 나도 예시들을 보며 코드치는데 익숙해져갔다. 실시간 세션 전 17번까지 완료하였고, 6시전까지 나 혼자 19번까지 모두 완료하였다.
본격적으로 자바 언어로 코드를 치니까 재미있었고, 페어 학습 또한 시간가는줄 모르고 재밌게 진행했다! 내일도 잘해보자! 화이팅!