Java의 데이터 유형
자바는 언어이다 강력하게 유형화됨: 각 변수는 선언된 유형이 있고 컴파일러는 작업이 다음과 같은지 확인합니다. 해당 유형과 호환됩니다. 이렇게 하면 많은 런타임 오류를 방지할 수 있습니다.
무엇을 배울 것인가
- 기본 유형 및 해당 범위
- 변수, 상수 및 범위
- 산술, 논리 및 관계 연산자
- 제어 구조: if, 스위치, for, while
- 캐스팅 및 유형 변환
기본 유형
Java에는 8가지 기본 유형이 있으며 정수, 십진수, 정수의 4가지 범주로 나뉩니다. 문자와 부울.
정수 유형
// byte: 8 bit, da -128 a 127
byte etaStudente = 16;
byte maxVoto = 127;
// short: 16 bit, da -32,768 a 32,767
short annoNascita = 2008;
short giorniAnno = 365;
// int: 32 bit, da -2^31 a 2^31 - 1 (circa 2 miliardi)
int popolazioneClasse = 25;
int matricola = 123456789;
// long: 64 bit, per numeri molto grandi
long popolazioneMondiale = 8_000_000_000L; // nota la L finale
long millisecondiFondazione = 1704067200000L;
요약표
| 유형 | 조금 | 범위 | 일반적인 사용 |
|---|---|---|---|
| 바이트 | 8 | -128~127 | 학년, 나이 |
| 짧은 | 16 | -32.768~32.767 | 년, 일 |
| 정수 | 32 | 약 ±20억 | 카운터, 신분증 |
| long | 64 | 매우 큰 숫자 | 타임스탬프, 인구 |
소수 유형(부동 소수점)
// float: 32 bit, precisione singola (6-7 cifre)
float mediaVoti = 7.5f; // nota la f finale
float temperatura = 36.6f;
// double: 64 bit, precisione doppia (15-16 cifre)
double pi = 3.141592653589793;
double mediaMatematica = 8.25;
double percentualePromossi = 87.5;
float와 double을 사용해야 하는 경우
- 더블: 소수의 기본값, 더 정확함
- 뜨다: 메모리를 절약해야 하는 경우에만(그래픽, 게임)
- 절대로 돈 때문에: 미국
BigDecimal재무 계산을 위해
문자 및 부울
// char: 16 bit, un singolo carattere Unicode
char iniziale = 'M';
char votoLettera = 'A';
char simbolo = '€';
char unicode = '\u0041'; // 'A' in Unicode
// boolean: vero o falso
boolean isPromosso = true;
boolean haDebiti = false;
boolean maggiorenne = etaStudente >= 18;
변수와 상수
선언 및 초기화
// Dichiarazione
int voto;
// Inizializzazione
voto = 8;
// Dichiarazione e inizializzazione insieme
int altroVoto = 9;
// Dichiarazioni multiple
int italiano = 7, matematica = 8, storia = 6;
// var (Java 10+): inferenza di tipo
var nomeStudente = "Mario Rossi"; // inferisce String
var mediaClasse = 7.5; // inferisce double
최종과 상수
// Costanti: valore immutabile
final int VOTO_MASSIMO = 10;
final int VOTO_MINIMO = 1;
final double SOGLIA_PROMOZIONE = 6.0;
final String NOME_SCUOLA = "Liceo Einstein";
// Tentare di modificare una costante causa errore di compilazione
// VOTO_MASSIMO = 11; // ERRORE!
변수의 범위
public class RegistroClasse {
// Variabile di istanza (visibile in tutta la classe)
private int numeroStudenti = 25;
public void stampaStatistiche() {
// Variabile locale (visibile solo nel metodo)
int sommaVoti = 0;
for (int i = 0; i < numeroStudenti; i++) {
// Variabile di blocco (visibile solo nel for)
int votoCorrente = ottieniVoto(i);
sommaVoti += votoCorrente;
}
// votoCorrente non e più accessibile qui!
double media = (double) sommaVoti / numeroStudenti;
System.out.println("Media: " + media);
}
}
연산자
산술 연산자
int a = 10, b = 3;
int somma = a + b; // 13
int differenza = a - b; // 7
int prodotto = a * b; // 30
int quoziente = a / b; // 3 (divisione intera!)
int resto = a % b; // 1 (modulo)
// Divisione decimale
double quozienteReale = (double) a / b; // 3.333...
// Incremento e decremento
int voto = 7;
voto++; // 8 (post-incremento)
++voto; // 9 (pre-incremento)
voto--; // 8 (post-decremento)
// Operatori composti
voto += 2; // equivale a: voto = voto + 2
voto *= 2; // equivale a: voto = voto * 2
관계 연산자
int voto = 7;
int sufficienza = 6;
boolean maggiore = voto > sufficienza; // true
boolean minore = voto < sufficienza; // false
boolean uguale = voto == sufficienza; // false
boolean diverso = voto != sufficienza; // true
boolean maggioreUguale = voto >= sufficienza; // true
boolean minoreUguale = voto <= sufficienza; // false
논리 연산자
boolean sufficiente = voto >= 6;
boolean eccellente = voto >= 9;
boolean presente = true;
// AND logico (entrambe devono essere true)
boolean promuovibile = sufficiente && presente; // true
// OR logico (almeno una deve essere true)
boolean premiato = eccellente || presente; // true
// NOT logico (inverte il valore)
boolean assente = !presente; // false
// Short-circuit evaluation
// Se la prima condizione e false, la seconda non viene valutata
boolean risultato = false && metodoCostoso(); // metodoCostoso() non eseguito
흐름 제어
만약 / 그렇지 않으면
int voto = 7;
// if semplice
if (voto >= 6) {
System.out.println("Promosso");
}
// if-else
if (voto >= 6) {
System.out.println("Promosso");
} else {
System.out.println("Bocciato");
}
// if-else if-else (valutazione voti scolastici)
if (voto >= 9) {
System.out.println("Eccellente");
} else if (voto >= 7) {
System.out.println("Buono");
} else if (voto >= 6) {
System.out.println("Sufficiente");
} else {
System.out.println("Insufficiente");
}
// Operatore ternario (if compatto)
String esito = voto >= 6 ? "Promosso" : "Bocciato";
스위치
int mese = 9;
String nomeMese;
switch (mese) {
case 1:
nomeMese = "Gennaio";
break;
case 2:
nomeMese = "Febbraio";
break;
case 9:
nomeMese = "Settembre - Inizio scuola!";
break;
case 6:
case 7:
case 8:
nomeMese = "Vacanze estive";
break;
default:
nomeMese = "Altro mese";
}
// Sintassi moderna con arrow
String giudizio = switch (voto) {
case 10 -> "Ottimo";
case 9 -> "Distinto";
case 8 -> "Buono";
case 7 -> "Discreto";
case 6 -> "Sufficiente";
default -> "Insufficiente";
};
// Con blocchi
String descrizione = switch (voto) {
case 10, 9 -> {
System.out.println("Complimenti!");
yield "Eccellenza";
}
case 8, 7 -> "Buon rendimento";
default -> "Da migliorare";
};
For 루프
// for classico
System.out.println("Elenco studenti:");
for (int i = 1; i <= 5; i++) {
System.out.println("Studente " + i);
}
// for decrescente
System.out.println("Countdown:");
for (int i = 10; i >= 1; i--) {
System.out.println(i);
}
// for-each (enhanced for)
int[] voti = {7, 8, 6, 9, 8};
int somma = 0;
for (int v : voti) {
somma += v;
}
System.out.println("Somma voti: " + somma);
While 및 do-while 루프
// while: controlla PRIMA di eseguire
int tentativi = 0;
int votoMinimo = 6;
int votoOttenuto = 4;
while (votoOttenuto < votoMinimo && tentativi < 3) {
System.out.println("Tentativo " + (tentativi + 1));
votoOttenuto++; // simula miglioramento
tentativi++;
}
// do-while: esegue ALMENO UNA VOLTA
int risposta;
do {
System.out.println("Menu: 1=Voti, 2=Media, 0=Esci");
risposta = leggiInput();
} while (risposta != 0);
끊고 계속하다
// break: esce dal ciclo
int[] voti = {7, 8, 3, 9, 8};
for (int voto : voti) {
if (voto < 4) {
System.out.println("Trovato voto gravemente insufficiente!");
break; // esce dal ciclo
}
}
// continue: salta alla prossima iterazione
for (int voto : voti) {
if (voto < 6) {
continue; // salta i voti insufficienti
}
System.out.println("Voto sufficiente: " + voto);
}
캐스팅 및 전환
// Widening (implicito): da tipo più piccolo a più grande
int votoIntero = 8;
double votoDouble = votoIntero; // 8.0 (automatico)
// Narrowing (esplicito): da tipo più grande a più piccolo
double media = 7.8;
int mediaIntera = (int) media; // 7 (troncamento, richiede cast)
// Attenzione all'overflow!
int grandeNumero = 130;
byte piccolo = (byte) grandeNumero; // -126 (overflow!)
// Conversione String -> numero
String votoStringa = "8";
int voto = Integer.parseInt(votoStringa);
double mediaDouble = Double.parseDouble("7.5");
// Conversione numero -> String
String risultato = String.valueOf(voto);
String altro = Integer.toString(voto);
String concatenato = "" + voto; // meno efficiente
전체 예: 성적표 계산
package it.scuola.registro;
public class CalcoloPagella {
public static void main(String[] args) {
// Dati studente
final String NOME_STUDENTE = "Mario Rossi";
final String CLASSE = "3A";
// Voti per materia
int italiano = 7;
int matematica = 8;
int storia = 6;
int inglese = 9;
int scienze = 7;
// Array dei voti
int[] voti = {italiano, matematica, storia, inglese, scienze};
String[] materie = {"Italiano", "Matematica", "Storia", "Inglese", "Scienze"};
// Calcolo statistiche
int somma = 0;
int votoMax = voti[0];
int votoMin = voti[0];
int countSufficienti = 0;
for (int voto : voti) {
somma += voto;
if (voto > votoMax) votoMax = voto;
if (voto < votoMin) votoMin = voto;
if (voto >= 6) countSufficienti++;
}
double media = (double) somma / voti.length;
// Stampa pagella
System.out.println("╔════════════════════════════════════╗");
System.out.println("║ PAGELLA SCOLASTICA ║");
System.out.println("╠════════════════════════════════════╣");
System.out.printf("║ Studente: %-24s ║%n", NOME_STUDENTE);
System.out.printf("║ Classe: %-24s ║%n", CLASSE);
System.out.println("╠════════════════════════════════════╣");
for (int i = 0; i < materie.length; i++) {
String giudizio = switch (voti[i]) {
case 10, 9 -> "Eccellente";
case 8 -> "Buono";
case 7 -> "Discreto";
case 6 -> "Sufficiente";
default -> "Insufficiente";
};
System.out.printf("║ %-12s: %2d (%s)%n", materie[i], voti[i], giudizio);
}
System.out.println("╠════════════════════════════════════╣");
System.out.printf("║ Media: %.2f ║%n", media);
System.out.printf("║ Voto max: %d ║%n", votoMax);
System.out.printf("║ Voto min: %d ║%n", votoMin);
System.out.println("╠════════════════════════════════════╣");
// Esito finale
String esito;
if (countSufficienti == voti.length && media >= 6) {
esito = "PROMOSSO";
} else if (countSufficienti >= voti.length - 1) {
esito = "SOSPESO";
} else {
esito = "NON PROMOSSO";
}
System.out.printf("║ ESITO: %-27s ║%n", esito);
System.out.println("╚════════════════════════════════════╝");
}
}
결론
이 기사에서 우리는 Java의 기본 데이터 유형인 변수를 살펴보았습니다. 상수, 연산자 및 흐름 제어 구조.
에서 다음 기사 우리는 더 깊이 탐구할 것입니다 행동 양식 그리고 기본 데이터 구조: 재사용 가능한 함수를 정의하는 방법 그리고 배열로 작업합니다.
기억해야 할 핵심 사항
- 8가지 기본 유형: 바이트, 짧은, int, 긴, 부동 소수점, 더블, 문자, 부울
- 결정적인: 변수를 상수로 만듭니다.
- 범위: 변수는 해당 블록에서만 볼 수 있습니다.
- 스위치 표현: Java 14+는 화살표 구문을 지원합니다.
- 각각에 대해: 인덱스가 필요하지 않을 때 바람직함
- 주조: 전환 범위를 좁히는 데 필요함







