일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 로그인
- Security
- javascript
- di
- BEAN
- HTTP 메서드
- Repository
- Excel
- 캐시
- 의존성 주입
- HTTP
- Setter
- Stateless
- Kotlin
- Java
- Spring
- vue-cli
- thymeleaf
- js
- Singleton
- Vue.js
- 프로토타입
- vuex
- dependency injection
- 싱글톤
- cache
- 라이프 사이클
- VUE
- DB
- JPA
- Today
- Total
jhhan의 블로그
Java의 정석을 시작하자(1)(2/3~2/4) 본문
Java의 정석:기초편 2019년 버전을 기준으로 작성했다.
나는 C,C++을 알고있는 상태로 JAVA를 공부하는 것이어서 중간중간 C++과의 차이점을 적을 수도 있다.
2020.02.19 수정) 다른 사람에게 가르쳐주는 형식으로 바꿔보기로 하였다.
1장. 자바를 시작하기 전
-자바의 특징에 대해 먼저 알아보도록 합시다.
- 운영체제 독립적 : 어떤 운영체제에서도 동작합니다.
- (물론 일부분 운영체제 종속적인 부분도 있습니다. 하지만 대부분 독립적입니다.)
- 객체지향언어
- C++의 장점을 택해서 Java로 발전 -> C++에 비해 배우기가 쉬운 편입니다.
- 자동 메모리 관리
- 네트워크와 분산처리 가능
- 멀티 쓰레드 지원
- 동적 로딩 지원
이렇게 7가지가 자바의 특징입니다.(책에서 꼽은 특징이기도 합니다.)
-JVM(Java Virtual Machine)
- 자바는 운영체제 독립적이어서 어떤 운영체제에서도 동작을 합니다.
- 대신 JVM이 있어야 동작할 수 있습니다.
- 그래서 자바를 실행하기 위해서는 반드시 JVM을 설치해야 합니다.
- 또한 JVM과 더불어 JDK(Java Develepment Kit)가 있어야 자바 프로그래밍을 진행할 수 있습니다.
- 보통 Eclipse를 많이 설치합니다.
- JDK는 오라클 사이트에서 설치가 가능합니다.
2장부터 5장까지는 하나의 언어를 배우면 기본으로 배우는 내용에 대해 나옵니다.
2장. 변수
-변수 : 하나의 값을 저장할 수 있는 공간
-타입
- 기본형 : 8개(boolean, char, byte, short, int, long, float, double)
- 실제값을 저장합니다.
- 참조형 : 기본형을 제외한 나머지 ex) String
- 주소값을 저장합니다.
-변수 & 상수 & 리터럴
- 변수 : 하나의 값만 저장하기 위한 공간
- 상수 : 한번만 값을 저장할 수 있는 공간
- final을 붙여서 보통 상수를 만든다
- ex) final int MAX = 1000;
- 리터럴 : 그 자체로 값을 의미합니다.
- ex) int a = 100;
- a : 변수
- 100 : 리터럴
-초기화 : local 변수의 경우 반드시 초기화를 해준 후에 사용해야 합니다. -> 이 부분은 C++과 다른점입니다.
- ex) int a; // C++은 허용하지만 Java는 허용하지 않습니다.
- ex) int a=0; // 반드시 이런 식으로 초기화를 해야 사용할 수 있습니다.
-형변환 : 다른 타입으로 변환하는 것
- 기본형에서는 boolean을 제외하고 7개의 기본형은 서로 형변환이 가능합니다.
- 형변환을 할 때에 값이 임의로 바뀔 수도 있으니 주의해야 합니다.
-화면에서 입력받기 : Scanner를 사용합니다.
- Scanner : Scanner클래스에서 제공하는 객체입니다.
- JDK1.5부터 추가되었다고 한다.
- import java.util.Scanner; 를 추가하면 Scanner클래스를 사용할 수 있게 됩니다.
- 사용법
- Scanner s = new Scanner(System.in);
- String st = s.nextLine();
- int a = s.nextInt();
** import java.util.Scanner; 를 통해 Scanner클래스를 사용할 수 있습니다.
** Scanner s = new Scanner(System.in); 으로 객체를 생성했습니다.
** 그 후 입력을 받아서 출력합니다.
** 코드에 대한 결과물입니다. 초록색 글자들이 콘솔창에서 직접 입력한 값입니다.
** Scanner s = new Scanner(System.in); 에서 System.in을 사용했습니다.
** System.in에 대해서는 나중에 나오기는 하지만 여기서 한번 알아보고 가면 좋을 것 같습니다.
** System : 클래스 이름으로 자바에서 표준 입출력을 제공합니다. (C++에서는 iostream , C에서는 stdio.h와 비슷하다 라고 생각하면 됩니다.)
** System.in : 콘솔로부터 데이터를 입력받는데 사용합니다.
** 그냥 지나치기 쉽지만 알고 가면 좋은 부분일 것이라고 생각합니다.
3장. 연산자
-연산자 : 어떠한 기능을 수행하는 기호
- 간단하게 사칙연산자(+,-,*,/)를 생각하면 편합니다.
-우선순위
- 괄호가 가장 높습니다. 괄호 안을 처리한 다음 밖을 처리합니다. (수학식을 계산할 경우를 생각하면 이해하기 수월할 듯 합니다.)
- 산술 > 비교 > 논리 > 대입
- 단항 > 이항 > 삼항
-이항연산자
- 연산 수행을 위해 피연산자의 타입을 일치시킵니다.
- int보다 작으면 int로 변환됩니다.
- 피연산자 중 표현범위가 큰 타입으로 형변환 됩니다.
- ex) byte a = 10; byte b = 20; byte c = a+b; // c값을 구하는데 에러가 생기는데 a+b가 int형으로 변환되었기 때문입니다.
- ex) byte c = (byte)(a+b); // 이렇게 해야 에러가 생기지 않습니다.
-비교연산자
- 기본형과 참조형에 모두 사용 가능합니다.
- 단, 참조형은 '==' 와 '!='만 사용가능합니다.
-논리연산자
- AND , OR연산이 존재합니다. (AND -> && , OR -> ||)
- AND연산이 OR연산보다 우선순위가 높습니다. -> 섞어서 쓸 때는 괄호를 잘 활용할 것!
-삼항연산자
- 조건연산자라고 합니다.
- 형식) (조건식) ? 식1 : 식2
- 조건식이 참이라면 식1 , 거짓이라면 식2를 반환합니다.
** rs에 조건연산자를 사용해서 값을 정하기로 했습니다.
** x가 크면 x, 아니면 y를 대입하도록 했습니다.
4장. 조건문과 반복문
-조건문 : if문과 switch문이 있습니다.
- if문 : if문 , if-else문 , if-else if-else문 3가지 형태로 구성됩니다.
- switch문 : 계산결과가 int타입의 정수 혹은 문자열일때만 사용이 가능합니다.(제한적)
- 일치하는 case문으로 이동 후 break문을 만날때 까지 수행
- switch문의 조건식 결과는 정수 or 문자열입니다.
- case문의 값으로 변수는 안되고 , 상수, 리터럴, 문자열 상수만 가능합니다.
** switch문 예제입니다.
** Scanner클래스를 이용해서 입력값을 받고 그 값에 따라 switch문 내에서 일치하는 case문으로 이동합니다.
** default는 일치하는 case문이 없을 때 수행됩니다.
** switch(month) 에서 month가 정수이기 때문에 가능한 예제입니다.
-반복문 : for문과 while문이 있습니다.
- for문 : 초기화, 조건식, 증감식, 수행블럭으로 구성됩니다.
- ex) for(초기화; 조건식; 증감식) { 수행블럭 }
- while문 : 조건식, 수행블럭으로 구성됩니다.
- ex) while(조건식) { 수행블럭 }
- do-while문 : while문의 변형으로, 최소 한번이상 수행합니다.
- ex) do { 수행블럭 } while(조건식);
-break : 반복문 or Switch문에서 빠져나오게 합니다.
-continue : 반복문의 끝으로 이동. continue 이후의 문장들은 수행하지 않습니다.
-이름이 있는 반복문 : 반복문 앞에 이름을 붙입니다.
- 해당 반복문에서 바로 빠져나올 수 있게 합니다.
** 첫번째 for문에 이름이 붙어있습니다.
** 그리고 break Loop1;이 있는데 이렇게 되면 한번에 반복문을 빠져나올 수 있습니다.
** 바로 반복문을 빠져나갈 수 있는 장점이 있습니다.
** 조건문 & 반복문과 관련이 없지만 책에 나와서 설명합니다.
** Math.random() : Math클래스에 정의되어 있고, 난수 발생함수입니다.
** 0.0 <= Math.random() < 1.0 의 범위를 가지고 있고 double값을 반환합니다.
** ex) 1~10 사이의 임의의 수 발생 : 1 <= (int)(Math.random()*10) + 1 < 11
5장. 배열
-배열 : 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것입니다.
-사용법 : 타입[] 변수이름
- ex) int[] score; // int형의 값을 집어넣을 수 있습니다.
- ex) int[] score = new int[5]; // 5개의 값을 넣을 수 있습니다.
- 2차원 배열 : int[][] arr = { {1, 2, 3}, {4, 5, 6} }; // 이렇게 선언할 수 있습니다.
-배열이름.length : 배열의 길이 반환합니다.
-배열은 각 언어마다 정의하는 법이 다르기 때문에 알아두는 것이 편합니다.
- ex) C, C++의 경우 : int score[10]; // 조금씩 다릅니다.
-Arrays.toString(배열이름)으로 배열 출력을 간편하게 할 수 있습니다.
- import java.util.Arrays;를 선언해야 가능합니다.
- ex) int[] score = {1,2,3,4,5}; System.out.println(Arrays.toString(score)); // [1,2,3,4,5]가 출력됩니다.
-toString() : 배열 출력에 사용합니다.
-equals() : 배열이 같은지 확인합니다.
- ex) Arrays.toString(배열1);
- ex) Arrays.equals(배열1, 배열2);
-2차원 이상의 배열의 경우 : deepToString() , deepEquals()를 사용합니다.
- ex) Arrays.deepToString(배열1);
- ex) Arrays.deepEquals(배열1, 배열2);
-copyOf() : 배열 전체를 복사합니다.
-copyOfRange() : 배열 일부를 복사합니다.
-String배열 : 문자열을 담을 수 있는 배열입니다.
- ex) String[] name = new String[3]; // 3개의 문자열을 담을 수 있는 배열 생성
- ex) String[] name = { "Kim", "Park", "Lee" };
-String클래스 : 문자열을 다루기 위해 만들어진 클래스 (나중에 다른 챕터에서 다루게 될 것입니다.)
- char배열로도 문자열을 다룰 수 있습니다.
- 하지만 char배열의 기능에서 추가, 확장했기 때문에 String클래스를 이용하는 것이 더 편합니다.
-String 클래스의 메서드
- String str = "ABCDE"; 일 때
- charAt(int index) : 해당 위치에 있는 문자 반환
- ex) char ch = str.charAt(3); // 'D'가 ch에 저장됩니다.
- length() : 문자열의 길이 반환
- ex) int dd = str.length(); // 5가 반환됩니다.
- substring(int from, int to) : 해당 범위(from~to)의 문자열을 반환합니다.(to는 포함하지 않습니다.)
- ex) String tmp = str.substring(1,3); // tmp에 "BC"가 저장됩니다.
- equals(Object ob) : 문자열의 내용이 같은지 확인합니다.
- ex) str.equals("ABCDE"); // 서로 같기 때문에 true를 반환합니다.
2/3 ~ 2/4까지 공부한 내용이다.
2/4에 공부를 별로 못해서 5장까지밖에 할 수 없었다.
'JAVA' 카테고리의 다른 글
Java의 정석을 시작하자(4)(2/7) (0) | 2020.02.14 |
---|---|
Java의 정석을 시작하자(4)(2/7) (0) | 2020.02.13 |
Java의 정석을 시작하자(3)(2/6) (0) | 2020.02.13 |
Java의 정석을 시작하자(2)(2/5) (0) | 2020.02.12 |
Java를 시작하면서 (0) | 2020.02.12 |