jhhan의 블로그

Java의 정석을 시작하자(1)(2/3~2/4) 본문

JAVA

Java의 정석을 시작하자(1)(2/3~2/4)

jhhan000 2020. 2. 12. 14:03

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