[Java] 데이터 타입 + JS Vs Python Vs Java 차이점

전주은·2023년 2월 28일
0
post-thumbnail

✔ 자바 데이터 타입 종류와 특징

자바에서는 데이터 타입을 크게 기본 데이터 타입(Primitive Data Type)과 참조 데이터 타입(Reference Data Type)으로 나눌 수 있다.

1. 기본 데이터 타입(Primitive Data Type)

자바에서 제공하는 8가지(boolean, char, byte, short, int, long, float, double) 기본 데이터 타입이 있다.

  • 메모리에 고정된 크기로 저장되며, 값이 직접 저장된다.
  • 각각의 범위가 정해져 있으며, 연산이 빠르고 메모리를 적게 사용한다.
  • 스택(Stack) 메모리에 저장된다.
데이터 타입크기값의 범위
byte1 byte-128 ~ 127
short2 byte-32,768 ~ 32,767
int4 byte-2,147,483,648 ~ 2,147,483,647
long8 byte-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
float4 byte1.4E-45 ~ 3.4028235E38
double8 byte4.9E-324 ~ 1.7976931348623157E308
char2 byte'\u0000' (0) ~ '\uffff' (65,535)
boolean1 bytetrue 또는 false

2.참조 데이터 타입(Reference Data Type)

기본 데이터 타입을 제외한 나머지 데이터 타입은 모두 참조 데이터 타입이다.

  • 클래스, 인터페이스, 배열 등이 포함된다.
  • 실제 값이 저장되어 있는 주소값을 참조하여 사용한다.
  • 메모리에 큰 용량을 차지하며, 연산 속도가 느리다.
  • 미리 정의된 클래스를 사용하거나, 직접 클래스를 만들어 사용할 수 있다.
  • 힙(Heap) 메모리에 객체가 생성됩니다.

3.문자열 데이터 타입

자바에서 문자열은 큰 따옴표("")로 묶여진 문자의 나열입니다.

  • 참조 데이터 타입이지만, 자바에서는 문자열 데이터 타입으로 취급한다.
  • 불변(Immutable)하므로, 한번 생성하면 그 값을 변경할 수 없다.
  • 문자열을 다루는데 유용한 String 클래스와 StringBuilder 클래스가 제공된다.

🤍StringBuilder

  • StringBuilder 클래스는 문자열을 가변적으로 처리할 수 있는 클래스로
  • 문자열을 추가, 수정, 삭제할 수 있는 기능을 제공
  • String 클래스와 달리, 문자열 연산 시 새로운 문자열 객체를 생성하는 것이 아니라 기존 문자열 객체를 직접 수정하여 연산한다. => 성능상의 이점을 가진다.
  • StringBuilder 주요 메소드
메소드설명
append(String str)지정된 문자열을 현재 문자열 끝에 추가합니다.
insert(int offset, String str)지정된 위치(offset)에 문자열을 삽입합니다.
delete(int start, int end)지정된 범위(start부터 end-1까지)의 문자열을 삭제합니다.
deleteCharAt(int index)지정된 위치의 문자를 삭제합니다.
replace(int start, int end, String str)지정된 범위(start부터 end-1까지)의 문자열을 새로운 문자열(str)로 대체합니다.
reverse()문자열을 역순으로 뒤집습니다.
substring(int start)지정된 위치(start)부터 문자열 끝까지 잘라내어 반환합니다.
substring(int start, int end)지정된 범위(start부터 end-1까지)의 문자열을 잘라내어 반환합니다.
capacity()현재 버퍼의 크기를 반환합니다.
ensureCapacity(int minimumCapacity)최소 버퍼 크기를 지정합니다. 버퍼 크기는 현재 크기와 minimumCapacity 중 큰 값으로 설정됩니다.

4.Wrapper 클래스와 기본 데이터 타입 변환

자바에서 기본 데이터 타입은 Wrapper 클래스를 통해 객체화하여 사용할 수 있다.

  • Boolean, Character, Byte, Short, Integer, Long, Float, Double 클래스
  • Wrapper 클래스를 사용하면 기본 데이터 타입을 객체로 다룰 수 있으며, 메서드나 컬렉션 같은 객체 지향적인 개념에 적용할 수 있다.
  • 기본 데이터 타입을 Wrapper 클래스로 변환할 때는 Boxing, Wrapper 클래스를 기본 데이터 타입으로 변환할 때는 Unboxing이 일어난다. 이때 오토박싱, 오토언박싱 개념을 사용할 수도 있다.

✔ 문자열 다루기

1.문자열 생성

방법1:리터럴 표기법

  • 큰 따옴표("")로 묶인 문자열
String str = "Hello, world!";

방법2: new 연산자 이용

String str = new String("Hello, world!");

2.문자열 결합: +연산자 활용

String str1 = "Hello";
String str2 = "world";
String str3 = str1 + ", " + str2 + "!";
System.out.println(str3); // 출력: Hello, world!

3. 문자열 대표적인 메소드

메소드설명
length()문자열의 길이를 반환
charAt(int index)지정된 위치의 문자를 반환
equals(Object obj)다른 객체와 문자열 내용이 같은지 확인
isEmpty()문자열이 비어있는지 확인
toLowerCase()문자열을 소문자로 변환
toUpperCase()문자열을 대문자로 변환
trim()문자열 앞뒤 공백을 제거
substring(int beginIndex)시작 위치부터 문자열 끝까지를 잘라내어 반환
substring(int beginIndex, int endIndex)시작 위치부터 끝 위치까지의 문자열을 잘라내어 반환
indexOf(String str)문자열에서 지정된 문자열이 처음으로 등장하는 인덱스를 반환
lastIndexOf(String str)문자열에서 지정된 문자열이 마지막으로 등장하는 인덱스를 반환
replace(char oldChar, char newChar)문자열 내의 모든 oldChar를 newChar로 대체
replace(CharSequence target, CharSequence replacement)문자열 내의 모든 target 문자열을 replacement 문자열로 대체
split(String regex)정규식을 기준으로 문자열을 분리하여 문자열 배열로 반환
startsWith(String prefix)문자열이 지정된 접두사(prefix)로 시작하는지 여부를 반환
endsWith(String suffix)문자열이 지정된 접미사(suffix)로 끝나는지 여부를 반환
contains(CharSequence s)문자열이 지정된 문자열을 포함하는지 여부를 반환

✔ 자바의 Wrapper 클래스와 기본 데이터 타입 변환

1. 기본 데이터 타입에서 Wrapper 클래스로의 변환

  • new 연산자를 이용하여 Wrapper 클래스의 인스턴스를 생성하거나, valueOf 메소드를 사용하여 Wrapper 클래스의 객체를 생성한다.
int i = 10;
Integer integer = new Integer(i); // int에서 Integer로 변환
Integer integer2 = Integer.valueOf(i); // int에서 Integer로 변환

2.Wrapper 클래스에서 기본 데이터 타입으로의 변환

  • Wrapper 클래스의 객체를 그냥 대입하거나, intValue()와 같은 메소드를 이용하여 기본 데이터 타입으로 변환한다.
Integer integer = new Integer(10);
int i = integer.intValue(); // Integer에서 int로 변환
int j = integer; // Integer에서 int로 변환

✔ 자바의 타입 변환

1.자동 타입 변환 (Automatic Type Conversion 또는 Widening Conversion)

  • 작은 데이터 타입이 큰 데이터 타입으로 변환될 때 발생한다.
  • 자동 타입 변환은 데이터 타입을 더 넓은 범위로 확장하기 때문에 데이터의 손실이 발생하지 않는다.
  • 서로 다른 타입의 피연산자가 있을경우 두 피연산자 중 크기가 큰 타입으로 자동변환 한다
  • 큰 집으로 이사한다!
byte b = 10;
int i = b;

public class TypeConversionExample {
    public static void main(String[] args) {
        int intValue = 10;
        long longValue = 20L;
        float floatValue = 3.14f;

        double result1 = intValue + longValue; // int와 long 중 큰 타입인 long으로 자동 변환됨
        double result2 = longValue + floatValue; // long과 float 중 큰 타입인 float으로 자동 변환됨

        System.out.println("result1: " + result1);
        System.out.println("result2: " + result2);
    }
}

2. 강제 타입 변환 (Explicit Type Conversion 또는 Narrowing Conversion)

  • 큰 데이터 타입을 작은 데이터 타입으로 변환할 때 발생한다.
  • 강제 타입 변환은 데이터 타입을 좁은 범위로 축소하기 때문에 데이터의 손실이 발생할 수 있다.
int i = 10;
byte b = (byte) i;

✔ JS Vs Python Vs Java 데이터 타입 차이점

언어기본 데이터 타입객체 데이터 타입언어타입타입 검사 방법
JavaScriptnumber, string, boolean, null, undefined, symbol, BigIntObject, Array, Function, Date, RegExp 등동적 타입 언어typeof 연산자, instanceof 연산자, Object.prototype.toString.call() 메소드 등
Pythonint, float, complex, str, bytes, bytearray, bool, list, tuple, set, frozenset, dict, NoneType사용자 정의 클래스, 내장 클래스(list, tuple, dict 등)정적 타입 언어type() 함수, isinstance() 함수, class 속성 등
Javabyte, short, int, long, float, double, char, boolean모든 클래스정적 타입 언어instanceof 연산자, getClass() 메소드 등

👀 정적타입 vs 동적타입
정적 타입 :변수의 데이터 타입을 선언하고 컴파일 타임에 데이터 타입 검사를 수행한다
동적 타입 :변수의 데이터 타입을 선언하지 않고 런타임에 데이터 타입이 결정된다

자바에서는 기본 데이터 타입과 참조 타입 간에 타입 변환이 필요할 때, 명시적으로 형변환을 해주어야 하지만 자바스크립트에서는 타입 변환이 자동으로 이루어진다.


JavaScriptPythonJava
숫자형numberint, float, complexbyte,short,int,long, float, double
문자열stringstringstring
불리언booleanboolboolean
리스트arraylistArrayList, LinkedList
튜플-tuple-
집합setsetHashSet, TreeSet
딕셔너리objectdictHashMap, TreeMap
nullnull,undefinedNonenull
함수functionfunctionmethod, function

🤍JavaScript에서 null과 undefined

  • null: 명시 적으로 값이 없음을 나타내는데 사용할 때
  • undefined: 값이 할당되지 않은 변수나 객체 프로퍼티를 참조할 때
let a = null;
console.log(a); // null
let b;
console.log(b); // undefined
let obj = {};
console.log(obj.prop); // undefined

위의 예시에서 a에는 명시적으로 null 값을 할당했으므로 null이 출력되고, b 변수는 값을 할당하지 않았으므로 undefined가 출력된다. obj 객체의 prop 프로퍼티가 존재하지 않으므로 undefined가 반환된다.

profile
더 멀리 보도록 해요. 진주는 하루아침에 생겨나지 않습니다.

0개의 댓글