본문 바로가기
개발공부하며 느낀 인생 공부

내가 보려고 정리하는 자바 용어[계산기 + 마카오뱅크]

by 날파리1 2022. 7. 4.

자바 문자열 변환

 Integer.parseInt()  -> 주어진 스트링을 인트값으로 변환

Integer.valueOf()  -> 주어진 스트링을 인티저 타입으로 변환

 

int Integer 차이

 

int는 변수의 타입(data type)이다.

변수(variable)는 '값을 저장할 수 있는 메모리 상의 공간'

자료형은 'data의 type에 따라 값이 저장될 공간의 크기와 저장 형식을 정의한 것'

자료형은 기본형(primitive type)과 참조형(referece type)으로 나뉘는데, int 는 이 중 기본형에 속합니다.

Integer 는 객체

  • 매개변수로 객체를 필요로 할 때
  • 기본형 값이 아닌 객체로 저장해야할 때
  • 객체 간 비교가 필요할 때

기본형을 객체로 다루기 위해 사용하는 클래스들을 래퍼 클래스(wrapper class)라고 합니다.
그리고 Integer는 int의 레퍼클레스

 

 그래서 int와 Integer는 어떻게 다른거지?

int : 자료형(primitive type)

  • 산술 연산 가능함
  • null로 초기화 불가

Integer : 래퍼 클래스 (Wrapper class)

  • Unboxing하지 않을 시 산술 연산 불가능함
  • null값 처리 가능

boxing : primitive type -> wrapper class 변환 ( int to Integer )
unboxing : wrapper class -> primitive type 변환 ( Integer to int )

 

문자열비교

equals (동등의 개념)  ,  기본형인 숫자형간의 비교인 == 과는 다름

 

for each 문

for each문은 배열이나 나열의 크기만큼 루프를 돌면서 각 원소를 순차적으로 접근하는데 사용.

강의에서는 변수인 i 가 관여하지 않고 데이터를 순차적으로 하나씩 다 더할때 사용.

 

switch expression

switch/case 문은 if 문과 비슷하지만 좀 더 정형화된 조건 판단문이다.

switch/case 문의 구조는 다음과 같다.

switch(입력변수) {
    case 입력값1: ...
         break;
    case 입력값2: ...
         break;
    ...
    default: ...
         break;
}

입력변수의 값과 일치하는 case 입력값(입력값1, 입력값2, ...)이 있다면 해당 case문에 속한 문장들이 실행된다. case문마다 break 라는 문장이 있는데 해당 case문을 실행 한 뒤 switch문을 빠져나가기 위한 것이다. 만약 break 문이 빠져 있다면 그 다음의 case 문이 실행된다.

switch/case 문을 가장 잘 설명해주는 다음의 예를 보자.

public class Sample {
    public static void main(String[] args) {
        int month = 8;
        String monthString = "";
        switch (month) {
            case 1:  monthString = "January";
                     break;
            case 2:  monthString = "February";
                     break;
            case 3:  monthString = "March";
                     break;
            case 4:  monthString = "April";
                     break;
            case 5:  monthString = "May";
                     break;
            case 6:  monthString = "June";
                     break;
            case 7:  monthString = "July";
                     break;
            case 8:  monthString = "August";
                     break;
            case 9:  monthString = "September";
                     break;
            case 10: monthString = "October";
                     break;
            case 11: monthString = "November";
                     break;
            case 12: monthString = "December";
                     break;
            default: monthString = "Invalid month";
                     break;
        }
        System.out.println(monthString);
    }
}

switch문의 입력이 1이면 "January"라는 문자열이, 12면 "December"라는 문자열이 출력되는 예제이다. 위의 예는 month가 8로 고정되어 있기 때문에 "August"라는 문자열이 출력될 것이다. 위 switch문은 month의 값이 1이면 case 1: 문장이 실행되고 2이면 case 2: 문장이, 3이면 case 3: ... 이런식으로 수행되게 된다. 만약 month에 1에서 12사이의 숫자가 아닌 다른 값이 저장되어 있다면 default: 문장이 수행된다.

위와 같이 입력값이 정형화되어 있는 경우 if문보다는 switch/case문을 쓰는것이 가독성에서 좀 더 유리하다.

※ switch/case문은 if else 구조로 변경이 가능하지만 if else 구조로 작성된 모든 코드를 switch 문으로 변경할 수는 없다.

 

final (상수)

초기값이 저장되면 이것이 최종적인 값이 되어 프로그램 실행 도중 바꿀 수 없는 것으로 선언해주는 필드

 

BigInteger

int 메모리 크기는 4byte로 표현할 수 있는 범위는 -2,147,483,648 ~ 2,147,483,647

long 메모리 크기는 8byte로 표현할 수 있는 범위는 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

그 범위를 넘어서게 되면 모두 0으로 출력 -> 즉 프로그램 오류의 가능성 존재

BigInteger은 문자열 형태로 이루어져 있어 숫자의 범위가 무한하기에 어떠한 숫자이든지 담을 수 있습니다.

BigInteger 선언

BigInteger bigNumber = new BigInteger("10000");

BigInteger은 java.math안에 있으며 위와 같이 선언하시면 됩니다. 특이한 점은 BigInteger을 초기화하기 위해서는 문자열을 인자 값으로 넘겨주어야 한다는 점입니다. BigInteger가 문자열로 되어 있기 때문입니다.

 

표기법

카멜케이스 → 전부 소문자지만 단어연결부를 대문자(bigNumber)

스네이크 케이스 → 전부 소문자 단어 연결부를 밑줄로 _ → 자바에선 안씀(big_number)

스크리밍 스네이크 케이스 → 전부 대문자 단어 연결부 밑줄(BIG_NUMBER)

파스칼 케이스 → 첫글자가 대문자인 카멜케이스 (보통 클래스 이름) (BigNumber)

 

Collection(컬렉션)

자바에서 '목록성 데이터를 처리하는 자료구조'를 통칭한다. 

자료구조(Data Structure)는 어떤 정보를 담는 것을 의미하여, 하나의 데이터가 아닌 여러 데이터를 담을 때 사용하는 것이다.

배열이 가장 기본적인 자료구조이며, DTO 또한 자료를 담는 하나의 방식이라고 볼 수 있다.


* 자바에서의 자료구조 유형

- 순서가 있는 목록인 List형

- 순서가 중요하지 않은 목록인 Set형

- 먼저 들어온 것이 먼저 나가는 Queue형

- KEY-VALUE의 형태로 저장되는 Map형

 

 

List

List는 Collection 프레임 워크를 확장하는 인터페이스 입니다. 목록 인터페이스는 순차적으로 정렬되는 요소의 컬렉션을 설명합니다. List 인터페이스는 ArrayList, LinkedList, CopyOnWriteArrayList, Vector, Stack 과 같은 표준 컬렉션 클래스로 구현됩니다. 

ArrayList의 정의

표준 Collection 클래스 중 하나는 AbstractList 클래스를 확장하고 List 인터페이스를 구현하는 ArrayList입니다. ArrayList 클래스는 필요에 따라 확장되고 축소되는 동적 배열을 만드는 데 사용됩니다. 

-> 즉 List는 추상화된 개념이고 ArrayList는 그런 인터페이스를 구현하는 실현체

 

배열(Array)과 List(ArrayList) 차이

배열은 길이가 고정 된 데이터 구조입니다. 동일한 데이터 유형에 속하는 데이터 요소를 저장하는 데 도움이됩니다.

배열의 길이는 고정되어 있으므로 정의 된 배열 크기보다 많은 요소를 저장할 수 없습니다.

 

ArrayList는 가변 길이 컬렉션 클래스입니다. 프로그래머는이 클래스를 사용하여 ArrayList 데이터 구조를 만들 수 있습니다. ArrayList 클래스는 List 인터페이스를 추가로 구현합니다.  그러나 배열 목록은 동적입니다. 즉, 프로그래머는 필요에 따라 요소를 추가하거나 제거 할 수 있습니다. ArrayList를 사용하면 프로그래머는 add, remove 등과 같은 미리 정의 된 메소드를 사용할 수 있습니다. 또한 중복 요소를 포함 할 수 있으며 데이터 순서를 유지 관리합니다. 

 

클래스 상속

상속(Inheritance)

  자식(클래스)이 상속받고 싶은 부모(클래스)를 선택해서 물려받는다. 이때 상속받는 클래스를 자식 클래스, 하위 클래스 또는 서브 클래스라고 부른다. 상속을 해주는 클래스를 부모 클래스, 상위 클래스 또는 슈퍼 클래스라고 한다.

상속의 대상

  자식 클래스가 부모 클래스로부터 상속을 받게 되면 부모 클래스의 필와 메서드물려받게 된다. 단, 접근제어자가 private을 갖는 필드나 메소드는 상속이 불가하고, 패키지가 다를 경우 접근제어자가 default인 경우도 상속이 불가하다.

상속의 장점

 상속의 장점은 처음에 설명했던 것과 큰 차이가 없다. 중복된 코드를 줄일 수 있고, 유지 보수가 편리하며, 통일성이 있고 다형성을 구현할 수 있다.

상속의 방법(선언) - extends

 

의존성 주입

 의존성 주입이란 외부에서 의존 객체를 생성하여 넘겨주는 것을 의미합니다. 예를들어 A Class가 B Class를 의존할 때 B Object를 A가 직접 생성하지 않고 외부에서 생성하여 넘겨주면 의존성을 주입했다고 합니다.

 

this. 

클래스 안에서 자기 자신을 가르킴

 

도메인 모델, 도메인 객체

도메인이란? 개발자 입장에서 소프트웨어로 해결하고자하는 문제 및 관심사를 뜻한다. 

https://hwannny.tistory.com/70 (참조)

Domain Object

도메인 객체란 내가 개발하고자 하는 영역을 분석하고, 그 분석의 결과로 도출된 객체들을 말한다.

 

 

댓글