항해99 chap02 첫날-자바 복습

Ada·2022년 9월 23일
0

항해TOL

목록 보기
2/63
post-custom-banner

자바를 다시 배우게 되었다!
한참 파이썬만 쓰다가 자바를 다시 쓰려니 머리가 벌써 아파오는 기분...ㅠㅠㅠㅠ

그래도 배웠던게 있으니 수월하겠지!

일단 기본 개념부터 정리해보려고 한다!



1. 변수의 특징

  • 하나의 변수는 단 하나의 값만 저장할 수 있다.
  • 변수에 저장된 값은 재할당을 통해 변경될 수 있다.
  • Java에서의 변수는 값의 형태에 맞는 자료형을 지정해주어야 한다.
  • 소문자로 시작해야 하며, 숫자로 시작할 수 없다.
  • 대소문자를 구분하며, 공백이 포함될 수 없다.

2. 상수의 특징

  • **final 키워드를 자료형 앞에 붙여서 선언한다.**
  • 한 번 값이 할당 된 상수는 다른 값으로 재할당 할 수 없다.

3. 자료형

3.1 기본자료형

  • int, double, boolean, long

3.2 참조형

  • String, Integer

4. 연산자

4.1 산술

1) +

  • 피연산자가 모두 숫자인 경우 더하기 연산
  • 피연산자중 String이 있는 경우 String이 아닌 피연산자도 모두 String으로 취급되어 하나의 문자열로 연결

2) -

  • 피연산자의 빼기 연산

3) *

  • 피연산자의 곱하기 연산

4) /

  • 피연산자의 나누기 연산 후 몫을 반환
  • 일반적인 계산과 달리 분수/소수 계산을 하지 않고 몫에 해당하는 값만 반환

5) %

  • 피연산자의 나누기 연산 후 나머지를 반환

4.2 비교

1) 대소비교

  • > , < , <= , >=

2) 동등비교

  • == , != 값이 같다 라는 의미를 나타내기 위해서 등호를 == 와 같이 두 개로 작성해주어야 하며, = 는 변수에 값을 대입한는 작업을 수행한다는 점을 주의해야 합니다. 추가로, 문자열의 값이 같은지의 대한 여부는 == 연산자로 확인할 수 없습니다. 변수에 담긴 것이 문자열 값 그 자체가 아닌 메모리의 주소이기 때문이지요. 문자열 값에 대한 비교는 equals() 로 수행할 수 있습니다.

4.3 논리

1) && - AND

  • 결합된 모든 피연산자가 모두 true 여야만 true 를 반환하며, 그렇지 않은 경우 모두 false 를 반환

2) || - OR

  • 결합된 모든 피연산자 중 하나만 true 여도 true 를 반환

5. 흐름제어

5.1 조건문

1) if () {...}

  • 가장 기본적인 형태의 조건문입니다. if 뒤에 이어지는 괄호 안에 조건을 넣고 이 조건이 true 이면 중괄호 안의 소스를 실행하게 됩니다.

2) if () {...}else {...}

  • 조건에 해당되지 않는 경우 전체에 대한 처리를 위해 else 블록을 활용합니다. if 조건이 false 인 경우 else 블록 내의 소스를 실행합니다.

3) if () {...}else if () {...}else {...}

  • 하나의 조건에서 그치지 않고 여러 조건을 연결하여 조건문을 구성할 때 else if 블록을 활용합니다. 주의해야할 점은 조건을 만족한 최초의 if 혹은 else if 블록만 실행하고 그 이후 코드는 무시한다는 것입니다.

5.2 반복문

1) while () {...}

  • 괄호 안의 조건이 true 경우 블록 내부의 소스를 실행합니다. 만약 조건이 true 에서 false 바뀌지 않는다면 해당 반복문은 무한루프(Infinite Loop)에 빠지게 되어 막대한 자원을 소모케 하고 결국 시스템에 큰 악영향을 미칩니다.

  • 반복문을 사용할 때에는 반드시 조건을 false 로 반환할 수 있도록 하는 장치가 필요하며, 사전에 코드를 설계할 때에도 꼼꼼한 검토와 테스트가 필요합니다.

2) `for (초기화; 조건식; 증감식) {...}`

  • 초기화 : 반복문 내부에서 사용하기 위한 변수를 선언합니다.
  • 조건식 : while 문과 같이 true 이면 블록 내부 코드를 실행합니다.
  • 증감식 : 변수의 값, 반복횟수의 제어를 위해 사용하며, ++ , -- 이외의 다양한 연산을 활용할 수 있습니다.

6. 자료구조

6.1 배열(Array)

  • 최초 선언 시, 자료형 뒤에 [] 를 붙여주면 해당 자료형의 배열을 선언할 수 있습니다.

  • {} 로 감싼 값들을 배열로 선언된 변수에 대입할 수 있습니다.

  • 배열의 요소는 순서를 의미하는 인덱스값을 가지며 0 부터 순서를 셉니다.

  • 전체 배열의 크기, 즉 요소의 갯수는 length 함수를 사용하여 확인할 수 있습니다.

  • 특정 인덱스(순서)의 값을 가져오기 위해서는 배열 변수 뒤에 [인덱스] 를 작성하면 됩니다.

  • 일반적으로 배열의 모든 요소에 대한 반복문을 적용할 때에는 for (int i = 0; i < 배열변수.length; i++) 와 같이 조건을 설정합니다. 인덱스가 0부터 시작한다는 점을 활용한 것이죠

  • System.out.println(배열변수) 와 같이 직접 배열 변수를 함수에게 전달하면 우리가 예상한 것과는 전혀 다른 내용이 출력됩니다. [I@1b0375b3, [Ljava.lang.String;@2f7c7260 와 같이 자료형과 뭔지 모를 문자들의 조합이 출력되죠. 이는 기본형 외의 자료형을 담는 변수가 값 자체가 아닌 주소를 가진다는 것을 드러냅니다.

  • 배열변수[인덱스] = 값 의 형태로 기존 요소의 값을 덮어쓸 수 있습니다.

6.2 리스트

  • ArrayList는 기본적으로 Object, 즉 모든 Java 객체를 담을 수 있습니다. 하지만 시스템 안정성을 위해 요소의 자료형을 제한해야 할 경우
  • add() 함수를 통해 요소를 추가할 수 있습니다.
  • ArrayList 크기, 요소의 갯수를 확인하기 위해서는 size() 함수를 사용합니다.
  • 특정 인덱스의 값을 사용하기 위해서는 ArrayList변수.get(인덱스) 와 같이 작성합니다.

6.3 맵(Map)

맵은 키와 값을 쌍으로 하는 데이터의 모음입니다. 순서를 따지지 않는다는 점이 리스트와 구분됩니다. 또한 키의 경우 중복을 허용하지 않지만 값은 중복을 허용한다는 특징을 가지고 있습니다. 리스트와 마찬가지로 Java에서 제공하는 구현체가 있으며, 이 중 활용도가 높은 HashMap에 대하여 살펴보겠습니다.

  • HashMap의 요소는 키와 값으로 구성되며, Spring 개발 시 활용되는 JSON 형식의 데이터로 변환 시 빈번하게 사용됩니다.
  • 데이터의 입력은 HashMap변수.put(키) = 값 과 같으며, 값을 불러오기 위해서는 HashMap변수.get(키) 와 같이 작성하면 됩니다.
  • ArrayList와 같이 HashMap<String, String> 와 같은 형식으로 변수를 선언하면 입력되는 데이터의 자료형을 제한할 수 있습니다.
  • 하나의 HashMap에서 키는 중복될 수 없으나 값은 중복될 수 있습니다.

새로 알게된 것

1. Scanner 클래스의 특징

  • 기본적인 데이터 타입들을 Scanner 의 메소드를 사용하여 입력받을 수 있다.

예로 들어 100을 입력하고자 할 때, String(문자열)로 입력받고 싶으면 next() 나 nextLine() 을, int(정수)로 입력받고 싶다면 nextInt() 를 사용하여 입력받으면 알아서 해당 타입으로 입력된다.

  • Scanner 을 사용할 시 util 패키지를 경로의 Scanner 클래스를 호출해야 한다.

자바에서 쓰이는 대부분의 클래스는 lang 패키지가 아니라면 import 을 통해 호출해주어야 한다.
Scanner 의 경우는 java.util 패키지에 있다.

  • 공백(띄어쓰기) 또는 개행(줄 바꿈)을 기준으로 읽는다.

Scanner 의 입력 메소드들은 대부분 공백과 개행(' ', '\t', '\r', '\n' 등등..)을 기준으로 읽는다. 이 덕분에 사용자의 편의에 따라 쉽게 입력을 받을 수 있다.

  • Scanner 의 경우 아래처럼 객체를 생성해주면 된다.

Scanner in = new Scanner(System.in); // Scanner 객체 생성

주의할 것은 Scanner 을 생성할 때 System.in 이 들어간다는 점이다.

System.in 은 사용자로부터 입력을 받기 위한 입력 스트림이다.

그렇기 때문에 Scanner 뿐만 아니라 다른 입력 방식들도 사용자로부터 입력을 받기 위해서는 System.in 이 들어간다.

2. 메소드

  • 일련의 코드를 단순화 한다.

  • 일반적으로 입력에 따른 결과값을 반환한다.

  • void타입의 메소드는 리턴값이 존재하지 않는다.

  • 더욱 편리한 프로그래밍을 가능케 한다.

  • 반환값은 메소드를 호출했던 해당 위치로 반환한다.

  • void타입은 리턴값이 없다.
    return;으로 메소드를 끝내거나, return이라는 키워드를 생략할 수 있다.

  • 파라미터가 없는 메소드: 괄호 사이에 아무것도 입력되지 않는 메소드,파라미터가 없는 메소드

  • //파라미터가 없는 메소드 호출 예
    int a = getTen();

  • //파라미터가 없는 메소드 정의 예
    public static int getTen() {
    return 10;
    }

3. SubString() 개념

  • String.substring(시작 인덱스); //시작부터 끝까지
  • String.substring(시작 인덱스,마지막 인덱스;//시작부터 끝 전까지
  • //예제
    String str="0123456";
  • str.substring(3);
    // 3456
  • str.substring(3,5);
    //34
profile
백엔드 프로그래머
post-custom-banner

0개의 댓글