Java 기본

서병범·2022년 9월 23일

항해99

목록 보기
2/4

Java 기본

Spring 으로 웹 서비스를 만드는 것이 여러분만의 에세이를 써나가는 것이라면 Java를 익히는 것은 에세이를 쓸 때 사용할 언어를 배우는 것과 같다
잘 익혀보자!!


변수(Variable)

변할 수 있는 값을 저장하는 곳

  • 변수는 프로그래밍에서 다루어지는 값들을 저장하는 임시적인 공간입니다.
  • 변수가 가지는 특성은 다음과 같습니다.
  • 하나의 변수는 단 하나의 값만 저장할 수 있다.
  • 변수에 저장된 값은 재할당을 통해 변경될 수 있다.
  • Java에서의 변수는 값의 형태에 맞는 자료형을 지정해주어야 한다.
  • 소문자로 시작해야 하며, 숫자로 시작할 수 없다.
  • 대소문자를 구분하며, 공백이 포함될 수 없다.
public class VarEx {

    public static void main(String[] args) {

        int num = 31;
        double height = 180.1;
        String city = "Seoul";

        System.out.println("num: " + num);
        System.out.println("height: " + height);
        System.out.println("city: " + city);
    }
}

위와 같이 출력된다.

여기서
"num: " 는 단순한 문자열(변수 적용안됨)
+뒤에 나오는 num이 변수로 취급된 것을 볼 수 있다.

(+는 여러 문자열을 붙여서 하나의 문자열로 만들어주는 역할)


상수(Constant, Final Variable)

불변 값을 저장하는 곳

프로그램이 실행되는 내내 변경되지 않고 유지되어야 한다

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

자료형(Data Type)

기본형

1) int

  • 타입: 정수형
int num = 31;

2) double

  • 타입: 실수형
double height = 180.1;

3) boolean

  • 타입: 논리형
  • 범위: true/false 값만 존재

참조형

  • 기본형을 제외한 모든 자료형
  • 가장 큰 특징은 값 자체가 변수에 저장되는 것이 아니라 메모리 어딘가에 위치한 값의 주소를 저장하고 활용한다는 것

1) String

  • 타입: 문자열
ex) String city = "Seoul";

2) Integer

  • 타입: 정수형
  • 특징
    • int 형과는 다르게 null값을 할당할 수 있음
    • List나 Map 등의 자료 구조에서 정수형으로 요소를 제한할 때 사용
      예) List
    • int 형에서 지원되지 않는 각종 함수 지원

연산자(Operator)

프로그래밍의 세계에서는 수학 등에서 사용되는 친숙한 기호로 데이터를 활용할 수 있습니다. 이러한 기호를 연산자라고 합니다. 연산자는 같은 형태이더라도 기존에 알고 있던 방식과는 다른 의미를 가지고 있는 경우가 있어 사용에 각별히 주의해야 합니다.

산술

1) +

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

2) -

  • 피연산자의 빼기 연산

3) *

  • 피연산자의 곱하기 연산

4) /

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

5) %

  • 피연산자의 나누기 연산 후 나머지를 반환
public class OperNum01 {

    public static void main(String[] args) {

        int num1 = 1;
        int num2 = 2;
        String name = "Rtan";

        System.out.println(num1 + num2);

        System.out.println(num1 + name);

        System.out.println(num1 - num2);

        System.out.println(num1 * num2);

        System.out.println(num1 / num2);

        System.out.println(num1 % num2);
    }
}

비교

비교 연산자의 수행 결과는 true/false 즉, 참/거짓 값으로만 결정됩니다.

1) 대소비교

  • > , < , <= , >=

2) 동등비교

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

    public static void main(String[] args) {

        int num1 = 1;
        int num2 = 2;
        int num3 = 1;
        String str = "Sparta";

        System.out.println(num1 > num2);
        System.out.println(num1 < num2);

        System.out.println(num1 <= num2);
        System.out.println(num1 <= num3);

        System.out.println(num1 >= num2);
        System.out.println(num1 >= num3);

        System.out.println(num1 == num2);
        System.out.println(num1 == num3);

        System.out.println(num1 != num2);
        System.out.println(num1 != num3);

        System.out.println(str.equals("Sparta"));

    }
}


출처 (https://park-youjin.tistory.com/15)

논리

public class OperLogi01 {

  public static void main(String[] args) {

      int num1 = 1;
      int num2 = 2;
      int num3 = 1;
      String str = "Sparta";

      System.out.println(num1 > num2 && num1 == num3);
      System.out.println(num1 > num2 || num1 == num3);
				
  }
}

1) && - AND

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

2) || - OR

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

대입

아까부터 계속 사용해왔지만,
= 연산자를 말한다

int num = 31;
double height = 180.1;
String city = "Seoul";

흐름제어

조건에 따라 수행할 명령을 나누는 조건문과 특정 조건이 만족하는 경우 반복 작업을 수행하는 반복문

  public class Cond01 {

    public static void main(String[] args) {

        int num1 = 1;
        int num2 = 100;

        if (num1 != num2) {
            System.out.println("num1 == num2");
        }


        if (num1 == num2) {
            System.out.println("num1 == num2");
        } else if (num1 < num2) {
            System.out.println("num1 < num2");
        }


        if (num1 == num2) {
            System.out.println("num1 == num2");
        } else if (num1 > num2) {
            System.out.println("num1 < num2");
        } else {
            System.out.println("Exited");
        }

    }
}

1) if () {...}

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

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

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

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

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

반복문

정말정말 많이 사용함!!!!
          
          

1) while () {...}

public class Loop01 {

    public static void main(String[] args) {

        int num1 = 100;

        while (num1 > 0) {
            System.out.println(num1);
            num1--;
        }
    }
}

해석

num1은 100이라 하자.
( ) 안에가 맞으면 실행하고,
num1을 -- (빼줘라) 이걸 계속해

  • 괄호 안의 조건이 true 경우 블록 내부의 소스를 실행합니다. 만약 조건이 true 에서 false 바뀌지 않는다면 해당 반복문은 무한루프(Infinite Loop)에 빠지게 되어 막대한 자원을 소모케 하고 결국 시스템에 큰 악영향을 미칩니다. 반복문을 사용할 때에는 반드시 조건을 false 로 반환할 수 있도록 하는 장치가 필요하며, 사전에 코드를 설계할 때에도 꼼꼼한 검토와 테스트가 필요합니다.

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

public class Loop01 {

    public static void main(String[] args) {

        for (int i = 0; i < 100; i++) {

            System.out.println(i);
        }
    }
}

해석

i=0이라고 할게; i가 100보다 작으면; 중괄호 실행해줘 그리고 ++해줘(더해줘) 이걸 계속해

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

자료구조

컴퓨터의 한정된 자원으로 최고의 성능을 내기 위해서는 활용하는 데이터가 잘 구조화 되어 있어야겠죠🙂  여러 유형 중 Java에서 빈번하게 쓰이는 세 가지를 예시와 함께 알아보겠습니다.

배열(Array)

public class ArrayEx01 {

    public static void main(String[] args) {

        int[] price = { 12000, 35000, 6000, 8400, 430000 };
//        int[] price = new int[]{ 12000, 35000, 6000, 8400, 430000 };

        String[] mbti = { "INFP", "ENFP", "ISTJ", "ESTJ" };
//        String[] mbti = new int[]{ "INFP", "ENFP", "ISTJ", "ESTJ" };


        System.out.println(price);
        System.out.println(mbti);

        System.out.println(price.length);
        System.out.println(mbti.length);


        for (int i = 0; i < mbti.length; i++) {

            System.out.println(mbti[i]);
        }
    }
}

  • 최초 선언 시, 자료형 뒤에 [] 를 붙여주면 해당 자료형의 배열을 선언할 수 있습니다.
  • {} 로 감싼 값들을 배열로 선언된 변수에 대입할 수 있습니다.
  • 배열의 요소는 순서를 의미하는 인덱스값을 가지며 0 부터 순서를 셉니다.
  • 전체 배열의 크기, 즉 요소의 갯수는 length 함수를 사용하여 확인할 수 있습니다.
  • 특정 인덱스(순서)의 값을 가져오기 위해서는 배열 변수 뒤에 [인덱스] 를 작성하면 됩니다.
  • 일반적으로 배열의 모든 요소에 대한 반복문을 적용할 때에는 for (int i = 0; i < 배열변수.length; i++) 와 같이 조건을 설정합니다. 인덱스가 0부터 시작한다는 점을 활용한 것이죠
  • System.out.println(배열변수) 와 같이 직접 배열 변수를 함수에게 전달하면 우리가 예상한 것과는 전혀 다른 내용이 출력됩니다. [I@1b0375b3, [Ljava.lang.String;@2f7c7260 와 같이 자료형과 뭔지 모를 문자들의 조합이 출력되죠. 이는 기본형 외의 자료형을 담는 변수가 값 자체가 아닌 주소를 가진다는 것을 드러냅니다.
  • 배열변수[인덱스] = 값 의 형태로 기존 요소의 값을 덮어쓸 수 있습니다.
            

리스트(List)

리스트는 순서를 구분하며 값의 중복을 허용하는 데이터의 모음입니다. Java 에서는 List의 형태를 활용한 몇 가지의 구현체(Vector, ArrayList, LinkedList)가 있으며, 현재 가장 활용이 많이 되는 ArrayList를 살펴보겠습니다.

import java.util.ArrayList;

public class ArrayList01 {

    public static void main(String[] args) {

        ArrayList list1 = new ArrayList(5);
        list1.add(100);
        list1.add("INFP");

        for (int i = 0; i < list1.size(); i++) {

            System.out.println(list1.get(i));
        }

        ArrayList<Integer> list2 = new ArrayList<Integer>(5);
        list2.add(100);
//        list2.add("INFP");

        for (int i = 0; i < list2.size(); i++) {

            System.out.println(list2.get(i));
        }

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

맵(Map)

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

import java.util.HashMap;

public class HashMap01 {

    public static void main(String[] args) {

        HashMap map01 = new HashMap();
        map01.put("age", 31);
        map01.put("mbti", "INFP");

        System.out.println(map01.get("age"));

        HashMap<String, String> map02 = new HashMap<String, String>();
//        map02.put("age", 31);
        map02.put("mbti", "INFP");

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

0개의 댓글