Java 문법 종합 2주차

이상인·2023년 5월 23일

연산자

  • 피연산자 : 계산의 대상

  • 연산자 : 계산의 목적

  • 산술연산자 : +, -, *, /, %, <<, >>

  • 비교연산자 : >, <, >=, <=, ==, !=

  • 논리연산자 : &&, ||, !

  • 대입연산자 : =, ++, --

  • 기타연산자 : (type), ? :, instance of

변수를 이용한 연산

  • (5>3)||(1>3) // 가능

  • System.out.println(1<3<5); // 불가능

  • 논리부정연산자 (!)

  • 대입연산자 : 변수를 바로 연산해서 그 자리에서 저장하는 연산자
    =, ++, += 1 ...

  • 형변환 연산자 : (int), (double) ...

  • 삼항연산자

        int x = 1;
        int y = 9;
        // 조건 ? 참 : 거짓
        boolean b = (x == y) ? true : false

String s = (x != y) ? "정답" : "오답";

  • instance of 연산자
    // instance of (3주차 -> 클래스, 객체)
    // 피 연산자가 조건에 명시된 클래스의 객체인지 비교하여
    // 맞으면 true, 틀리면 false

비트 연산

  • 컴퓨터가 바로 알아들을 수 있어서 가장 빠름
    <<, >> 0101 << 1010

조건문과 반복문

  • 조건문 : 특정 조건에 따라 다른 연산을 수행
  • 반복문 : 특정 조건에 따라 반복해서 동일한 연산을 수행
    ~~ 까지 계속
조건문
- if
if (true 또는 false) {
}
- if-else / / if 문이 거짓일 경우
  if () {
  } else {
}
중첩 가능

switch문

switch(변수) {
	case 1:
		monthString = "1월";
        break;
    case 2:
    ...
    ...
    break;
    defalut:
    monthString = "알 수 없음";
    }

if와 switch

  • if는 복합조건 가능, switch는 피연산자에 한개에 대한 조건만 지원

if문이 상대적으로 코드중복이 많다.

if문만 쓸 줄 아는 사람이 더 많다 => if문이 더 많이 쓰인다
but, 둘 다 쓸 줄 알아야 한다.


반복문
1) for

  • 특정 조건에 따라서 연산을 반복수행하고 싶을 때 사용하는 문맥
  • for (초기값; 조건문; 증가연산) { ( 연산 ) }
  • 특정 조건은 초기값과 조건문을 통해 정의

2) while

  • for문과 동일하게 특정 조건에 따라 연산을 반복수행하고 싶을 때 사용하는 문맥
  • 초기값, 조건문만 명시
  • while ( 조건문) { ( 연산) }

3) do ~ while

  • do 안에 있는 로직을 먼저 수행한다

    break, countinue


    배열

  • 자료구조 중 하나

  • 배열형 변수 선언 int[], 같은 타입의 변수만 담을 수 있다.

  • 한 번에 많은 양의 데이터를 다루거나 계산할 때 사용 => for문 등

  • 선언방법
    1) 타입[] 변수;
    2) 타입 변수[];

  • 생성방법 : new 변수타입[배열의 크기]


    복사
    int a = 4
    int b = a
    => 배열에서는 위험하다.

    참조형변수는 실제 값이 아닌 주소값을 저장하기 때문에 복사를 해도 주소값이 복사된다.

    얕은 복사

    Int[] arr1 = {a,b,c} => add1이라는 주소값 저장
    Int[] arr2 = arr1 => add1이라는 주소값 복사
    여기서 arr2를 수정하게 되면 add1이라는 주소에 있는 값이 수정 됨
    => arr1도 영향이 간다.

    배열의 복사

  • 깊은 복사
    a의 길이만큼을 가지는 배열 b선언 및 저장
    for문을 이용해서 b[i]하나하나에 a[i]의 값을 저장

    // 깊은 복사 메서드
    // 1. clone() 메서드
    int[] a = {1, 2, 3, 4};
    int[] b = a.clone(); // 가장 간단한 방법
    // clone 메서드는 2차원 이상의 배열에서는 얕은 복사로 동작
    EX) 배열 속의 배열 [[1,2],[2,1]...]


    char 보다 String을 훨씬 많이 사용한다.
    (가지고 있는 기능이 많기 때문에)
    Wrapper class와도 상당히 비슷하다.
    기본형 변수가 가지고 있는 기능이 제한적, 감쌈으로써 다양한 추가기능 제공

  • length, charAy, substring, equals, toCharArray


    다차원 배열

  • 1차원 [1,2,3]

  • 2차원 [[1,2],[2,1],[3,1]]

  • 3차원

2차원 배열 선언

  • int[][] array
  • int array[][]
  • int[] array[]

생성
int[][] array = new int[]][]

초기화
1. 중괄호 사용

int[][] array = {
  {1, 2, 3},
  {4, 5, 6}
};
  1. 반복문을 통한 초기화
int[][] array = new [2][3]; // 최초선언
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.println("출력값 -> " + i + "," + j);
                array[i][j] = 0;

가변배열

        int[][] array = new int[3][];
        
        // 배열 원소마다 각기 다른 크기로 지정
        array[0] = new int[2];
        array[1] = new int[4];
        array[2] = new int[1];
        
        // 중괄호로 초기화를 아예 해버릴 때도 가능함
        int[][] array2 = {
                {10, 20},
                {10, 20, 30, 40},
                {10}
        };

2차원 외에도 3, 4차원 등이 있지만 거의 대부분 3차원 까지만 사용
대괄호만 추가해주면 초기화 가능
{{{1,2},{2,1}},{{3,4},{4,3}}};

배열을 잘 이용하면 복잡한 계산을 효율적으로 처리할 수 있다.
자바 프로그래밍에서는 배열만을 사용했을 때 아쉬운 부분들이 있다.


컬렉션

  • 크기 자동조절 기능
  • List : 순서가 있는 데이터의 집합
  • Queue : 한 쪽에서 데이터를 넣고 뺄 수 있다. FIFO
  • Stack : 먼저 쌓은게 나중에 나옴 FILO
  • Set : 집합 - 순서x 중복x
  • Map : 순서가 없는 쌍(Key, Value)으로 이루어진 데이터의 집합 - Key값 중복 허용 X

List ( 동적배열 )

  • 처음에 길이를 몰라도 만들 수 있다.
  • 생성 시점에 작은 연속된 공간을 요청해서 참조형 변수들을 담아놓는다.
  • 값이 추가될 때 더 큰 공간이 필요하면 더 큰 공간을 받아서 저장하기 때문에 상관없다.
  1. ArrayList
  • 선언 및 생성
    ArrayList intList = new ArrayList(); // 선언 + 생성
  • 자료 추가
    intList.add(99);
    intList.add(15);
    intList.add(3);
  • 변경
    intList.set(1, 10);
    // 첫번째 인덱스의 값을 10으로 바꾼다.
  • 삭제
    intList.remove(0);
    // 0번째 인덱스를 삭제한다.
  • 모두 삭제
    intList.clear();
    => 결과 []

2.LinkedList

  • 메모리에 남는 공간을 요청해서 여기 저기 나누어서 실제 값을 담아놓는다.

  • 실제 값이 있는 주소값으로 목록을 구성하고 저장하는 자료구조

  • 기본적 기능은 ArrayList와 동일

  • 조회가 느리며 추가, 삭제 할 때는 빠르다.


Stack

  • .push : 넣기
  • .peek : 맨 위에 데이터 보여주기
  • .pop : 맨 위에 데이터를 빼면서 보여주기

Queue

  • .pop 대신 poll

Set

  • 집합, 순서 및 중복 없음, 생성자 없음

Map

  • key - value pair !중요
  • key 라는 값으로 unique하게 보장이 되어야 함
  • keySet으로 키를 보고 values로 값을 봄
  • key 값이 중복될 경우 마지막 값으로 덮어씀

0개의 댓글