[Java]데이터 타입(기본,참조)과 new

정지안·2023년 6월 15일
0
post-thumbnail

데이터 타입

왜 알아야 할까?

자바에서 변수를 정의할 때 변수 앞에 데이터타입을 입력해야 하기 때문이다.(Scanner 함수를 통해 값을 입력 받을 때도 nextInt, nextDouble 등으로 사용된다.)

그럼 데이터 타입이란?

데이터타입은 말 그대로 데이터의 종류이다.

자바에서는 데이터의 종류를 알아야 코드를 작성할 수 있는데,

자바의 데이터 타입에는 크게 두가지 기본 타입(정수 타입,실수 타입,논리 타입)과 참조 타입(배열 타입,열거 타입,클래스, 인터페이스)이 있다.

1. 기본 타입

기본 데이터타입은 다시 4가지로 나뉜다.

  • 정수
  • 실수
  • 논리 타입
  • 리터럴

을 그대로 저장하는 의미를 가진다.

1-1. 정수 타입

  • byte
  • char(정수타입이기도, 리터럴타입이기도 하다.)
  • short
  • int
  • long

1-2. 실수 타입

float은 개발 30년차 강사님 말씀에 따르면, 잘 쓰지 않는다고 한다.
double을 자주 쓰도록 하자.

  • float
  • double

1-3. 논리 타입 

  • boolean
    • True
    • False

1-4.리터럴 타입 

Q. char는 한글자만 써서 불편하지않냐고, String을 쓰는 것이 좋지 않냐고 질문했다.
A. 강사님은 char도 많이 쓴다고 한다. 특히 char는 2byte의 크기밖에 차지하지 않기 때문에
오히려 보안에 좋다고 말씀하셨다. 어떤 논리구조로 보안에 좋게된거지? 내일 다시물어보고 수정하겠다.

  • char(정수타입이기도, 리터럴타입이기도 하다.)
  • Stirng

가 있다.

기본 타입에 대한 예시는 아래와 같다.

정수,실수 데이터타입의 크기를 잘 알아야 한다.

'='을 기준으로 좌우 데이터 형이 맞지 않으면 변수선언에 에러가 나기 때문이다.

예를들어,

ex_)
double a = 1.5;
int b = a;

라고 식을 작성한다면 에러이다.

왜냐하면
a의 자료형이 더 큰 데이터를 가지고 있기 때문에,
값이 더 작은 int 로 정의하게된다면 데이터 손실이 발생하기 때문이다.
Java는 의도치않은 데이터 손실을 원하지 않는다.

참조 타입

객체의 번지를 참조 하는 타입으로 배열, 열거, 클래스, 인터페이스 타입을 말한다.

  • 배열은 요렇게 생겼다.

int는 데이터 타입인 걸 알았는데, 자료를 정리하다 new는 뭐라고불러야 할까? 생각했다. 가장 마지막 문단에서 다뤄보도록 하겠다.

기본 타입과 참조 타입의 차이는 저장되는 값이 무엇인가이다.

기본값 : 실제값을 변수에 저장
참조값 : 배열, 열거, 클래스, 인터페이스를 이용해서 메모리에 번지를 값으로 가진다. 즉 번지를 통해 객체를 참조한다는 뜻이다.

기본 타입과 참조 타입은 저장위치 또한 다르다.

  • 기본타입은 스택(지역 변수와 메서드 호출을 관리하는 데 사용되는 메모리영역) 영역에 생성이 되고,
  • 참조타입은 힙 영역(객체와 배열이 생성되는 영역)에 생성된다.

new : 객체를 생성하기 위해 사용되는 키워드

키워드를 사용하여 객체를 생성할 때, 메모리에서 해당 객체의 인스턴스를 할당하고 초기화하는 역할을 한다.

new가 쓰이는 상황 4가지

1. 객체 생성
(예를 들어,
ClassName objectName = new ClassName(); 형식으로 클래스의 인스턴스를 생성)
2. 배열 생성
(예를들어,
DataType[] arrayName = new DataType[length]; 형식으로 배열을 생성)
3. 익명 객체 생성
예를들어

interface MyInterface {
    void doSomething();
}
public class Main {
    public static void main(String[] args) {
        // MyInterface를 구현한 익명 객체 생성
        MyInterface obj = new MyInterface() {
            @Override
            public void doSomething() {
                System.out.println("익명 객체에서 doSomething() 메서드를 재정의합니다.");
            }
        }; 
        // 익명 객체의 메서드 호출
        obj.doSomething();
    }
}

4. 내부 클래스 생성

profile
1% 개발자를 향해:: 개발 공부 일지를 써나갑니다

0개의 댓글

관련 채용 정보