저번 면접을 보고.. 백엔드 개발자를 희망하는데 할 수 있는게 뭐냐는 질문을 받았기에
다음 날 바로 자바의 정석을 구매했다.
그동안 다른 곳 면접 준비하느라~ 공부를 못했는데~(핑계)
그 회사.. 남은 면접 약 2주.. 그 안에 자바의 정석 1회독 + 토이 프로젝트 1개 하는 것이 목표다.
해서 자바의 정석 그날 공부의 요약본을 올리고자 한다.
아는 것 들은 skip 하고 python과 다른 java의 부분 위주로 올릴 거다!
Java언어 특징
1. 운영체제에 독립적이다.
: 자바는 운영체제나 하드웨어가 아닌 JVM과 통신한다. JVM이 자바로 부터 전달 받은 명령을 운영체제가 이해할 수 있게 변환하여 전달해준다. (다만 JVM은 운영체제에 종속적이기 때문에 운영체제에 맞는 JVM을 설치 해야 한다.)
2. 객체 지향 언어이다
: 상속, 캡슐화, 다형성이 잘 적용되어 있다.
3. 비교적 배우기 쉽다.(라고 써져있지만 Python으로 프로그래밍을 시작한 나는.. 매우 어렵다)
4. 자동 메모리 관리(Garbage Collection)
:가비지 컬렉터가 자동적으로 메모리를 관리 해준다. 만약 이 기능이 없었다면, 프로그래머가 수동적으로 사용하지 않는 메모리를 체크,반환 해야 된다.
5. 네트워크와 분산 처리를 지원한다.
6. 멀티 쓰레드를 지원한다.
:시스템과 상관 없이 구현 가능하며, 관련된 라이브러리 (JAVA API)를 제공하여 구현이 쉽다.
7.동적 로딩을 지원한다.
: 자바로 작성된 애플리케이션은 여러개의 클래스로 구성되어 있다. 동적 로딩은, 필요시에 클래스를 로딩하여 사용할 수 있다는 장점이 있다. 또한, 일부가 변경 됐을 때 그 일부만 컴파일 하면 된다.
JVM?
: 자바를 실행하기 위한 가상 기계
: 자바를 실행하기 위해선 반드시 필요함
Hello.java
자바를 실행하려면 다음과 같은 단계를 거친다.
javac.exe 를 사용해서 소스 파일(파일명.java) 로 부터 클래스 파일 (파일명.class)을 생성해야 한다. 그 다음에 자바 인터프리터(java.exe)로 실행한다.
class 클래스 이름 {
public static void main(String[] args) // main메서드의 선언부
{
//실행될 문장들을 적는다.
}
}
1. 자바에서 모든 코드는 반드시 클래스 안에 존재해야 하며, 서로 관련된 코드들을 그룹으로 나누어 별도의 클래스를 구성하게 된다.
2. main 메서드 선언부 다음에 나오는 괄호는 메서드의 시작과 끝을 의미, 이 괄호 안에 작업할 내용을 적으면 된다.
3. main의 처음부터 끝까지 실행되면 종료된다.
4. 하나의 어플리케이션 안에 main 하나는 있어야 한다.
#Hello.java
public class Hello {}
class Hello1 {}
#Hello2.java
class Hello2 {}
class Hello3 {}
5. 하나의 소스 파일에 둘 이상의 클래스를 정의하는 것도 가능하지만, '소스파일 이름은 public class'와 같아야 한다. 만약 소스 파일 내에 public class 가 없다면, 소스파일의 이름은 소스 파일 내의 어떤 클래스의 이름으로 해도 상관 없다.
콘솔에서 자바 애플리케이션을 실행시켰을 시
1. 프로그램 실행에 필요한 클래스(*.class)를 로드한다.
2. 클래스 파일을 검사한다. (파일 형식, 악성코드 체크)
3. 지정된 클래스에서 main(String[] args)를 호출한다.
자바 프로그래머들에게 권장하는 규칙
1. 클래스 이름의 첫 글자는 항상 대문자
2. 여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로
3. 상수의 이름은 모두 대문자. 여러 단어로 이루어진 경우 '_'로 구분
변수
자바는 정적 언어기 때문에 꼭 변수 type을 설정 해야 한다.
기본형
: boolean, 문자형 (char), 정수형( byte, short, int, long) , 실수형 (float, double)
참조형
: 객체의 주소를 저장, 8개의 기본형을 뺀 나머지
상수와 리터럴
상수형
: 변수와 마찬가지로 '값을 저장할 수 있는 공간'이짐나 변수와 달리 한번 값을 저장하면 변경 불가.
: 선언 방법 -> final을 앞에다가 붙여준다.
literal
:그 자체로 값을 의미하는 것
ex1) int year = 2022;
ex2) final int YEAR = 2022;
문자 리터럴은 한글자면 '' (작은 따옴표) ex) 'a'
둘 이상은 ""(큰 따옴표)를 써야 한다. ex) "ab"
문자열 덧셈도 가능한데
문자열 + any type -> 문자열 + 문자열
any type + 문자열 -> 문자열 + 문자열
class StringEx{
public static void main(String[] args) {
System.out.println(7 + 7 + "");
}
}
# 77이 아니라 "14"가 나온다. 앞에 7+7을 먼저 계산하고 이후 14 + ""을 계산하여 문자열로 바뀜
입력
import java.util.*;
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
int num = Integer.parseInt(input);
1. 입력 받고
2. 입력 받은 내용을 input에 저장
3. int로 바꿔줌
출력
1. 변수 타입을 변환하고 싶을 때 : System.out.printf("%d", age);
2. 변수 타입을 변환 안해도 될 때 : System.out.println(age);
문법
switch
int level = 2
switch (level) {
case 4:
case 3:
grantDelete();
case 2:
grantWrite();
case 1:
grantRead();
}
case 2 문을 찾아서 수행하고 break문이 없기 때문에 case1 까지 수행하고 구문을 빠져나온다.
만약 level=4면 grantDelete() 부터 수행
제약조건
1. switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
2. case문의 값은 정수 상수만 가능하며, 중복 되지 않아야 한다.
do-while
do {
} while (조건식);
최소 한번 이상 수행하며, 조건식이 거짓일 시 다음 루프를 수행하지 않는다.
이름붙은반복문
colass FlowEx33
{
public static void main (String[] args)
{
Loop1 : for(int i=2; i <= 9; i++) {
for (int j=1; j <= 9; j++) {
if (j == 5)
break Loop1;
break;
}
}
해당 루프 뿐만 아니라 이름 붙은 루프 전체를 나갈 수 있음
배열
"같은 타입의 여러 변수를 하나의 묶음으로 다루는 것"
선언방법
#타입[] 변수이름;
int[] score;
String[] name;
#타입 변수이름[];
int score[];
String name[];
배열 생성 방법
int[] score; // int 타입의 배열을 다루기 위한 참조변수 score선언
score = new int[15]; // int타입의 값 5개를 저장할 수 있는 배열
인덱스
0 + 양의 정수 (~ 2^31-1)
python 처럼 음의 정수 불가
배열 초기화
int[] score = new int[] {값1, 값2};
이런 방법도 있음.. 이 외에는 python하고 동일
배열 복사
1. for문 이용
int[] arr = new int[5];
int[] tmp = new int[arr.length*2]; // 기존보다 길이가 2배인 배열 생성
for(int i = 0; i < arr.length; i++)
tmp[i] = arr[i];
arr = tmp; // 참조변수 arr이 새로운 배열을 가리키게 한다.
2.System.arraycopy()
배열의 복사는 for문 보다 System.arraycopy()를 사용하는 것이 더 효율 적이다.
System.arraycopy(num, 0, newNum, 0, num.length);
// num[0]에서 newNum[0]으로 mum.length개의 데이터를 복사
String 배열
String[] name = new String[3];
char배열과 String 클래스
String클래스는 char배열에 기능을 추가한 것 이다.
C언어에서는 문자열을 char로 묶어서 처리하지만, 객체지향언어인 자바에서는 char배열과 그에 관련된 기능들을 함꼐 묶어서 클래스에 정의한다.
다만 String객체는 읽을 수만 있을 뿐 내용을 변경할 수 없다.
ex) String a = "abcd" 하고 a[1] = 'c' 해서 accd 하는게 불가능
라고 자바 고인물 지인께서.. 그러셨습니다.
char배열과 String 클래스의 변환
char[] chArr = {'A', 'B', 'C'}
String str = new String(chArr); // char배열 -> String
char[] tmp = str.toCharArray(); // String -> char배열
다차원 배열
int[][] score = new int[2][3]; // 배열 생성
int[][] arr = {
{1, 2, 3},
{4, 5, 6}
} // 배열 초기화
+) 그 외
equals() 와 == 는
https://sudo-minz.tistory.com/93
이분 블로그로 공부함!
그럼 오늘 공부는 여기서 끝~
'Study > JAVA' 카테고리의 다른 글
[Spring] 게시판 만들기 1 (5) | 2022.12.03 |
---|---|
[2022-11-30] Java의 정석 2 - 11. 컬렉션 프레임웍 (0) | 2022.11.30 |
[2022-11-29] Java의 정석 - 1편 마지막~ (0) | 2022.11.29 |
[2022-11-28] Java의 정석 - 객체지향II (0) | 2022.11.29 |
[2022-11-28] JAVA의 정석 - 객체지향 I (1) | 2022.11.28 |