Java κΈ°λ³ΈνΈ κ°μ_κΈ°λ³Ένκ³Ό μ°Έμ‘°ν
κΈ°λ³Ένκ³Ό μ°Έμ‘°ν
κΈ°λ³Έν vs μ°Έμ‘°ν 1 - μμ
μλ°μμ μ°Έμ‘°νμ μ λλ‘ μ΄ν΄νλ κ²μ μ λ§ μ€μνλ€.
λ³μμ λ°μ΄ν° νμ μ κ°μ₯ ν¬κ² 보면 κΈ°λ³Ένκ³Ό μ°Έμ‘°νμΌλ‘ λΆλ₯ν μ μλ€. μ¬μ©νλ κ°μ λ³μμ μ§μ λ£μ μ μλ κΈ°λ³Έν, κ°μ²΄κ° μ μ₯λ λ©λͺ¨λ¦¬μ μμΉλ₯Ό κ°λ₯΄ν€λ μ°Έμ‘°κ°μ λ£μ μ μλ μ°Έμ‘°νμΌλ‘ λΆλ₯ν μ μλ€.
- κΈ°λ³Έν(Primitive Type) : int, long, double, booleanμ²λΌ λ³μμ μ¬μ©ν κ°μ μ§μ λ£μ μ μλ λ°μ΄ν° νμ μ κΈ°λ³Ένμ΄λΌ νλ€.
- μ°Έμ‘°ν(Reference Type) : λ°μ΄ν°μ μ κ·ΌνκΈ° μν μ°Έμ‘°(μ£Όμ)λ₯Ό μ μ₯νλ λ°μ΄ν° νμ μ μ°Έμ‘°νμ΄λΌ νλ€. μ°Έμ‘°νμ κ°μ²΄ λλ λ°°μ΄μ μ¬μ©λλ€.
κΈ°λ³Έν λ³μμλ μ§μ μ¬μ©ν μ μλ κ°μ΄ λ€μ΄μμ§λ§ μ°Έμ‘°ν λ³μμλ μμΉ(μ°Έμ‘°κ°)κ° λ€μ΄κ° μλ€. μ°Έμ‘°ν λ³μλ₯Ό ν΅ν΄μ λκ° νλ €λ©΄ κ²°κ΅ μ°Έμ‘°κ°μ ν΅ν΄ ν΄λΉ μμΉλ‘ μ΄λν΄μΌ νλ€.
κΈ°λ³Έν vs μ°Έμ‘°ν - κΈ°λ³Έ
- κΈ°λ³Ένμ μ«μ 10, 20κ³Ό κ°μ΄ μ€μ μ¬μ©νλ κ°μ λ³μμ λ΄μ μ μλ€. κ·Έλμ ν΄λΉ κ°μ λ°λ‘ μ¬μ©ν μ μλ€.
- μ°Έμ‘°νμ μ€μ μ¬μ©νλ κ°μ λ³μμ λ΄λ κ²μ΄ μλλ€. μ΄λ¦ κ·Έλλ‘ μ€μ κ°μ²΄μ μμΉ(μ°Έμ‘°, μ£Όμ)λ₯Ό μ μ₯νλ€. μ°Έμ‘°νμλ κ°μ²΄μ λ°°μ΄μ΄ μλ€.
- κ°μ²΄λ .(dot)μ ν΅ν΄ λ©λͺ¨λ¦¬ μμ μμ±λ κ°μ²΄λ₯Ό μ°Ύμκ°μΌ μ¬μ©ν μ μλ€.
- λ°°μ΄μ [ ]λ₯Ό ν΅ν΄μ λ©λͺ¨λ¦¬ μμ μμ±λ λ°°μ΄μ μ°Ύμκ°μΌ μ¬μ©ν μ μλ€.
κΈ°λ³Ένμ μ°μ°μ΄ κ°λ₯νμ§λ§ μ°Έμ‘°νμ μ°μ°μ΄ λΆκ°λ₯νλ€.
κΈ°λ³Ένμ λ³μμ μ€μ μ¬μ©νλ κ°μ΄ λ΄κ²¨μλ€. +, -μ κ°μ μ°μ°μ΄ κ°λ₯νλ€.
μ°Έμ‘°νμ λ³μμ κ°μ²΄μ μμΉμΈ μ°Έμ‘°κ°μ΄ λ€μ΄ μλ€. μ°Έμ‘°κ°μ κ³μ°μ μ¬μ©ν μ μλ€. λ°λΌμ μ€λ₯κ° λ°μνλ€.
λ¬Όλ‘ .μ ν΅ν΄ κ°μ²΄μ κΈ°λ³Έν λ©€λ² λ³μμ μ κ·Όν κ²½μ°μλ μ°μ°μ ν μ μλ€.
βοΈ μ½κ² μ΄ν΄νλ ν
κΈ°λ³Ένμ μ μΈν λλ¨Έμ§λ λͺ¨λ μ°Έμ‘°νμ΄λ€.
κΈ°λ³Ένμ μλ¬Έμλ‘ μμνλ€. int, long, double, boolean λͺ¨λ μλ¬Έμλ‘ μμνλ€.
κΈ°λ³Ένμ Javaκ° κΈ°λ³ΈμΌλ‘ μ 곡νλ λ°μ΄ν° νμ μ΄λ€. μ΄λ¬ν κΈ°λ³Ένμ κ°λ°μκ° μλ‘ μ μν μ μλ€.
κ°λ°μλ μ°Έμ‘°νμΈ ν΄λμ€λ§ μ§μ μ μν μ μλ€.
ν΄λμ€λ λλ¬Έμλ‘ μμνλ€. Student
ν΄λμ€λ λͺ¨λ μ°Έμ‘°νμ΄λ€.
βοΈ μ°Έκ³ - String
Javaμμ Stringμ νΉλ³νλ€. Stringμ μ¬μ€μ ν΄λμ€μ΄λ€. λ°λΌμ μ°Έμ‘°νμ΄λ€.
κ·Έλ°λ° κΈ°λ³Ένμ²λΌ λ¬Έμ κ°μ λ°λ‘ λμ ν μ μλ€.
λ¬Έμλ λ§€μ° μμ£Ό λ€λ£¨κΈ° λλ¬Έμ Javaμμ νΉλ³νκ² νΈμ κΈ°λ₯μ μ 곡νλ€.
κΈ°λ³Έν vs μ°Έμ‘°ν 2 - λ³μ λμ
λμμΉ : Javaλ νμ λ³μμ κ°μ 볡μ¬ν΄μ λμ νλ€.
Javaμμ λ³μμ κ°μ λμ
νλ κ²μ λ³μμ λ€μ΄ μλ κ°μ 볡μ¬ν΄μ λμ
νλ κ²μ΄λ€.
κΈ°λ³Έν, μ°Έμ‘°ν λͺ¨λ νμ λ³μμ μλ κ°μ 볡μ¬ν΄μ λμ
νλ€.
κΈ°λ³Ένμ΄λ©΄ λ³μμ λ€μ΄ μλ μ€μ μ¬μ©νλ κ°μ 볡μ¬ν΄μ λμ
νκ³ , μ°Έμ‘°νμ΄λ©΄ λ³μμ λ€μ΄ μλ μ°Έμ‘°κ°μ 볡μ¬ν΄μ λμ
νλ€.
κΈ°λ³Ένμ λ³μμ κ°μ λμ
νλλΌλ μ€μ μ¬μ©νλ κ°μ΄ λ³μμ λ°λ‘ λ€μ΄ μκΈ° λλ¬Έμ ν΄λΉ κ°λ§ 볡μ¬ν΄μ λμ
νλ€κ³ μκ°νλ©΄ μ½κ² μ΄ν΄ν μ μλ€.
κ·Έλ°λ° μ°Έμ‘°νμ κ²½μ° μ€μ μ¬μ©νλ κ°μ²΄κ° μλλΌ κ°μ²΄μ μμΉλ₯Ό κ°λ₯΄ν€λ μ°Έμ‘°κ°λ§ 볡μ¬λλ€. μ½κ² μ΄μΌκΈ°ν΄μ μ€μ κ±΄λ¬Όμ΄ λ³΅μ¬κ° λλ κ²μ΄ μλλΌ κ±΄λ¬Όμ μμΉμΈ μ£Όμλ§ λ³΅μ¬λλ κ²μ΄λ€.
λ°λΌμ κ°μ 건물μ μ°Ύμκ° μ μλ λ°©λ²μ΄ νλ λμ΄λ λΏμ΄λ€.
κΈ°λ³Ένκ³Ό λ³μ λμ
VarChange1
package ref;
public class VarChange1 {
public static void main(String[] args) {
int a = 10;
int b = a;
System.out.println("a = " + a);
System.out.println("b = " + b);
// a λ³κ²½
a = 20;
System.out.println("λ³κ²½ a = 20");
System.out.println("a = " + a);
System.out.println("b = " + b);
// b λ³κ²½
b = 30;
System.out.println("λ³κ²½ b = 30");
System.out.println("a = " + a);
System.out.println("b = " + b);
}
}
μ¬κΈ°μ ν΅μ¬μ int b = aλΌκ³ νμ λ λ³μμ λ€μ΄μλ κ°μ 볡μ¬ν΄μ μ λ¬νλ€λ μ μ΄λ€. λ°λΌμ a = 20, b = 30μ΄λΌκ³ νμ λ κ°κ° λ³ΈμΈμ κ°λ§ λ³κ²½λλ κ²μ νμΈν μ μλ€.
μ°Έμ‘°νκ³Ό λ³μ λμ
Data
package ref;
public class Data {
int value;
}
VarChange2
package ref;
public class VarChange2 {
public static void main(String[] args) {
Data dataA = new Data();
dataA.value = 10;
Data dataB = dataA;
System.out.println("dataA μ°Έμ‘°κ°=" + dataA); // ref.Data@41629346
System.out.println("dataB μ°Έμ‘°κ°=" + dataB); // ref.Data@41629346
System.out.println("dataA.value = " + dataA.value); // 10
System.out.println("dataB.value = " + dataB.value); // 10
//dataA λ³κ²½
dataA.value = 20;
System.out.println("λ³κ²½ dataA.value = 20");
System.out.println("dataA.value = " + dataA.value); // 20
System.out.println("dataB.value = " + dataB.value); // 20
//dataB λ³κ²½
dataB.value = 30;
System.out.println("λ³κ²½ dataB.value = 30");
System.out.println("dataA.value = " + dataA.value); // 30
System.out.println("dataB.value = " + dataB.value); // 30
}
}
λ³μμ λμ
μ λ³μμ λ€μ΄ μλ κ°μ 볡μ¬ν΄μ λμ
νλ€. λ³μ dataAμλ μ°Έμ‘°κ° x001μ΄ λ€μ΄ μλ€.
λ³μ dataAμ λ€μ΄μλ μ°Έμ‘°κ° x001μ 볡μ¬ν΄μ λ³μ dataBμ λμ
νλ€.
μ°Έκ³ λ‘ λ³μ dataAκ° κ°λ₯΄ν€λ μΈμ€ν΄μ€λ₯Ό 볡μ¬νλ κ²μ΄ μλλ€! λ³μμ λ€μ΄μλ μ°Έμ‘°κ°λ§ 볡μ¬ν΄μ μ λ¬νλ€.
Data dataB = dataAλΌκ³ νμ λ λ³μμ λ€μ΄κ°λ κ°μ 볡μ¬ν΄μ μ¬μ©νλ€λ μ μ΄λ€. κ·Έλ°λ° κ·Έ κ°μ΄ μ°Έμ‘°κ°μ΄λ€.
λ°λΌμ dataAμ dataBλ κ°μ μ°Έμ‘°κ°μ κ°μ§κ² λκ³ , λ λ³μλ κ°μ κ°μ²΄ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νκ² λλ€.
κΈ°λ³Έν vs μ°Έμ‘°ν 3 - λ©μλ νΈμΆ
λμμΉ : μλ°λ νμ λ³μμ κ°μ 볡μ¬ν΄μ λμ νλ€.
Javaμμ λ³μμ κ°μ λμ
νλ κ²μ λ³μμ λ€μ΄ μλ κ°μ 볡μ¬ν΄μ λμ
νλ κ²μ΄λ€.
κΈ°λ³Έν, μ°Έμ‘°ν λͺ¨λ νμ λ³μμ μλ κ°μ 볡μ¬ν΄μ λμ
νλ€.
κΈ°λ³Ένμ΄λ©΄ λ³μμ λ€μ΄ μλ μ€μ μ¬μ©νλ κ°μ 볡μ¬ν΄μ λμ
νκ³ , μ°Έμ‘°νμ΄λ©΄ λ³μμ λ€μ΄ μλ μ°Έμ‘°κ°μ 볡μ¬ν΄μ λμ
νλ€.
λ©μλ νΈμΆλ λ§μ°¬κ°μ§μ΄λ€. λ©μλλ₯Ό νΈμΆν λ μ¬μ©νλ λ§€κ°λ³μ(νλΌλ―Έν°)λ κ²°κ΅ λ³μμΌ λΏμ΄λ€.
λ°λΌμ λ©μλλ₯Ό νΈμΆν λ λ§€κ°λ³μμ κ°μ μ λ¬νλ κ²λ μμ μ€λͺ
ν λ΄μ©κ³Ό κ°μ΄ κ°μ 볡μ¬ν΄μ μ λ¬νλ€.
κΈ°λ³Ένκ³Ό λ©μλ νΈμΆ
package ref;
public class MethodChange1 {
public static void main(String[] args) {
int a = 10;
System.out.println("λ©μλ νΈμΆ μ : a = " + a); // 10
changePrimitive(a);
System.out.println("λ©μλ νΈμΆ ν: a = " + a); // 10
}
static void changePrimitive(int x) {
x = 20;
}
}
μ°Έμ‘°νκ³Ό λ©μλ νΈμΆ
package ref;
public class MethodChage2 {
public static void main(String[] args) {
Data dataA = new Data();
dataA.value = 10;
System.out.println("λ©μλ νΈμΆ μ : dataA.value = " + dataA.value); // 10
changeReference(dataA);
System.out.println("λ©μλ νΈμΆ ν: dataA.value = " + dataA.value); // 20
}
static void changeReference(Data dataX) {
dataX.value = 20;
}
}
κΈ°λ³Ένκ³Ό μ°Έμ‘°νμ λ©μλ νΈμΆ
Javaμμ λ©μλμ λ§€κ°λ³μ(νλΌλ―Έν°)λ νμ κ°μ μν΄ μ λ¬λλ€.
κ·Έλ¬λ μ΄ κ°μ΄ μ€μ κ°μ΄λ, μ°Έμ‘°(λ©λͺ¨λ¦¬ μ£Όμ) κ°μ΄λμ λ°λΌ λμμ΄ λ¬λΌμ§λ€.
- κΈ°λ³Έν : λ©μλλ‘ κΈ°λ³Έν λ°μ΄ν°λ₯Ό μ λ¬νλ©΄, ν΄λΉ κ°μ΄ 볡μ¬λμ΄ μ λ¬λλ€. λ©μλ λ΄λΆμμ λ§€κ°λ³μ(νλΌλ―Έν°)μ κ°μ λ³κ²½ν΄λ, νΈμΆμμ λ³μ κ°μλ μν₯μ΄ μλ€.
- μ°Έμ‘°ν : λ©μλλ‘ μ°Έμ‘°ν λ°μ΄ν°λ₯Ό μ λ¬νλ©΄, μ°Έμ‘°κ°μ΄ 볡μ¬λμ΄ μ λ¬λλ€. λ©μλ λ΄λΆμμ λ§€κ°λ³μ(νλΌλ―Έν°)λ‘ μ λ¬λ κ°μ²΄μ λ©€λ² λ³μλ₯Ό λ³κ²½νλ©΄, νΈμΆμμ κ°μ²΄λ λ³κ²½λλ€.
μ°Έμ‘°νκ³Ό λ©μλ νΈμΆ - νμ©
ClassStart3
package class1;
public class ClassStart3 {
public static void main(String[] args) {
Student student1 = new Student();
student1.name = "νμ1";
student1.age = 15;
student1.grade = 90;
Student student2 = new Student();
student2.name = "νμ2";
student2.age = 16;
student2.grade = 80;
System.out.println("μ΄λ¦: " + student1.name + " λμ΄: " + student1.age + " μ±μ : " + student1.grade);
System.out.println("μ΄λ¦: " + student2.name + " λμ΄: " + student2.age + " μ±μ : " + student2.grade);
}
}
μ€λ³΅μ λ©μλλ₯Ό ν΅ν΄μ μμ½κ² μ κ±°ν μ μλ€.
λ©μλμ κ°μ²΄ μ λ¬
Student
package ref;
public class Student {
String name;
int age;
int grade;
}
Method1
package ref;
public class Method1 {
public static void main(String[] args) {
Student student1 = new Student();
initStudent(student1, "νμ1", 15, 90);
Student student2= new Student();
initStudent(student2, "νμ2", 16, 80);
printStudent(student1);
printStudent(student2);
}
static void initStudent(Student student, String name, int age, int grade) {
student.name = name;
student.age = age;
student.grade = grade;
}
static void printStudent(Student student) {
System.out.println("μ΄λ¦: " + student.name + " λμ΄: " + student.age + " μ±μ : " + student.grade);
}
}
μ°Έμ‘°νμ λ©μλλ₯Ό νΈμΆν λ μ°Έμ‘°κ°μ μ λ¬νλ€.
λ°λΌμ λ©μλ λ΄λΆμμ μ λ¬λ μ°Έμ‘°κ°μ ν΅ν΄ κ°μ²΄μ κ°μ λ³κ²½νκ±°λ, κ°μ μ½μ΄μ μ¬μ©ν μ μλ€.
- initStudent(Student student, ...) : μ λ¬ν νμ κ°μ²΄μ νλμ κ°μ μ€μ νλ€.
- printStudent(Student student) : μ λ¬ν νμ κ°μ²΄μ νλ κ°μ μ½μ΄μ μΆλ ₯νλ€.
βοΈ μ£Όμ!
package ref; import class1.Student; public class Method1 { ... }β
import class1.Student; μ΄ μ μΈλμ΄ μμΌλ©΄ μλλ€.
μ΄λ κ² λλ©΄ class1 ν¨ν€μ§μμ μ μΈν Studentλ₯Ό μ¬μ©νκ² λλ€. μ΄ κ²½μ° μ κ·Ό μ μ΄μ λλ¬Έμ μ»΄νμΌ μ€λ₯κ° λ°μνλ€.
λ§μ½ μ μΈλμ΄ μλ€λ©΄ μμ νμ. μμ νλ©΄ κ°μ ν¨ν€μ§μ μλ ref.Studentλ₯Ό μ¬μ©νλ€.
Method2
package ref;
public class Method2 {
public static void main(String[] args) {
Student student1 = createStudent("νμ1", 15, 90);
Student student2 = createStudent("νμ2", 16, 80);
printStudent(student1);
printStudent(student2);
}
static Student createStudent(String name, int age, int grade) {
Student student = new Student();
student.name = name;
student.age = age;
student.grade = grade;
return student;
}
static void printStudent(Student student) {
System.out.println("μ΄λ¦: " + student.name + " λμ΄: " + student.age + " μ±μ : " + student.grade);
}
}
createStudent( )λΌλ λ©μλλ₯Ό λ§λ€κ³ κ°μ²΄λ₯Ό μμ±νλ λΆλΆλ μ΄ λ©μλ μμ ν¨κ» ν¬ν¨νλ€. μ΄μ μ΄ λ©μλ νλλ‘ κ°μ²΄μ μμ±κ³Ό μ΄κΈ°κ° μ€μ μ λͺ¨λ μ²λ¦¬νλ€.
κ·Έλ°λ° λ©μλ μμμ κ°μ²΄λ₯Ό μμ±νκΈ° λλ¬Έμ λ§λ€μ΄μ§ κ°μ²΄λ₯Ό λ©μλ λ°μμ μ¬μ©ν μ μλλ‘ λλ €μ£Όμ΄μΌ νλ€. κ·ΈλμΌ λ©μλ λ°μμ μ΄ κ°μ²΄λ₯Ό μ¬μ©ν μ μλ€.
λ©μλλ νΈμΆ κ²°κ³Όλ₯Ό λ°ν(return)μ ν μ μλ€. λ©μλμ λ°ν κΈ°λ₯μ μ¬μ©ν΄μ λ§λ€μ΄μ§ κ°μ²΄μ μ°Έμ‘°κ°μ λ©μλ λ°μΌλ‘ λ°ννλ©΄ λλ€.
λ³μμ μ΄κΈ°ν
λ³μμ μ’ λ₯
- λ©€λ² λ³μ(νλ) : ν΄λμ€μ μ μΈ
- μ§μ λ³μ : λ©μλμ μ μΈ, λ§€κ°λ³μλ μ§μ λ³μμ ν μ’ λ₯μ΄λ€.
λ©€λ² λ³μ, νλ μμ
public class Student {
String name;
int age;
int grade;
}
μ§μ λ³μ μμ
public class ClassStart3 {
public static void main(String[] args) {
Student student1;
student1 = new Student();
Student student2 = new Student();
}
}
package ref;
public class MethodChange1 {
public static void main(String[] args) {
int a = 10;
System.out.println("λ©μλ νΈμΆ μ : a = " + a); // 10
changePrimitive(a);
System.out.println("λ©μλ νΈμΆ ν: a = " + a); // 10
}
static void changePrimitive(int x) {
x = 20;
}
}
a, x(λ§€κ°λ³μ)λ μ§μ λ³μμ΄λ€.
μ§μ λ³μλ μ΄λ¦ κ·Έλλ‘ νΉμ μ§μμμλ§ μ¬μ©λλ λ³μλΌλ λ»μ΄λ€. μλ₯Ό λ€μ΄μ xλ changePrimitive( ) λ©μλμ λΈλ‘μμλ§ μ¬μ©λλ€. changePrimitive( ) λ©μλκ° λλλ©΄ μ κ±°λλ€. a λ³μλ λ§μ°¬κ°μ§μ΄λ€. main( ) λ©μλκ° λλλ©΄ μ κ±°λλ€.
λ³μμ κ° μ΄κΈ°ν
- λ©€λ² λ³μ : μλ μ΄κΈ°ν
- μΈμ€ν΄μ€μ λ©€λ² λ³μλ μΈμ€ν΄μ€λ₯Ό μμ±ν λ μλμΌλ‘ μ΄κΈ°νλλ€.
- μ«μ(int) = 0, boolean = false, μ°Έμ‘°ν = null(null κ°μ μ°Έμ‘°ν λμμ΄ μλ€λ λ»μΌλ‘ μ¬μ©λλ€.)
- κ°λ°μκ° μ΄κΈ°κ°μ μ§μ μ§μ ν μ μλ€.
- μ§μ λ³μ : μλ μ΄κΈ°ν
- μ§μ λ³μλ νμ μ§μ μ΄κΈ°νν΄μΌ νλ€.
InitData
package ref;
public class InitMain {
public static void main(String[] args) {
InitData initData = new InitData();
System.out.println("value1 = " + initData.value1);
System.out.println("value2 = " + initData.value2);
}
}
value1μ μ΄κΈ°κ°μ μ§μ νμ§ μμμ§λ§ λ©€λ² λ³μλ μλμΌλ‘ μ΄κΈ°νλλ€. μ«μλ 0μΌλ‘ μ΄κΈ°νλλ€.
value2λ 10μΌλ‘ μ΄κΈ°κ°μ μ§μ ν΄λμκΈ° λλ¬Έμ κ°μ²΄λ₯Ό μμ±ν λ 10μΌλ‘ μ΄κΈ°νλλ€.
null
μ°Έμ‘°ν λ³μμλ νμ κ°μ²΄κ° μλ μμΉλ₯Ό κ°λ¦¬ν€λ μ°Έμ‘°κ°μ΄ λ€μ΄κ°λ€. κ·Έλ°λ° μμ§ κ°λ¦¬ν€λ λμμ΄ μκ±°λ, κ°λ¦¬ν€λ λμμ λμ€μ μ
λ ₯νκ³ μΆλ€λ©΄ μ΄λ»κ² ν΄μΌν κΉ?
μ°Έμ‘°ν λ³μμμ μμ§ κ°λ¦¬ν€λ λμμ΄ μλ€λ©΄ nullμ΄λΌλ νΉλ³ν κ°μ λ£μ΄λ μ μλ€. nullμ κ°μ΄ μ‘΄μ¬νμ§ μλ, μλ€λ λ»μ΄λ€.
null κ° ν λΉ
package ref;
public class Data {
int value;
}
NullMain1
package ref;
public class NullMain1 {
public static void main(String[] args) {
Data data = null;
System.out.println("1. data = " + data);
data = new Data();
System.out.println("2. data = " + data);
data = null;
System.out.println("3. data = " + data);
}
}
NullPointerException
λ§μ½ μ°Έμ‘°κ° μμ΄ κ°μ²΄λ₯Ό μ°Ύμκ°λ©΄ μ΄λ€ λ¬Έμ κ° λ°μν κΉ?
μ΄ κ²½μ° NullpointerExceptionμ΄λΌλ μμΈκ° λ°μνλλ°, κ°λ°μλ₯Ό κ°μ₯ λ§μ΄ κ΄΄λ‘νλ μμΈμ΄λ€.
NullPointerExceptionμ μ΄λ¦ κ·Έλλ‘ nullμ κ°λ¦¬ν€λ€(Pointer)μΈλ°, μ΄λ λ°μνλ μμΈ(Exception)λ€. nullμ μλ€λ λ»μ΄λ―λ‘ κ²°κ΅ μ£Όμκ° μλ κ³³μ μ°Ύμκ° λ λ°μνλ μμΈμ΄λ€.
κ°μ²΄λ₯Ό μ°Έμ‘°ν λλ .(dot)μ μ¬μ©νλ€. μ΄λ κ² νλ©΄ μ°Έμ‘°κ°μ μ¬μ©ν΄μ ν΄λΉ κ°μ²΄λ₯Ό μ°Ύμκ° μ μλ€. κ·Έλ°λ° μ°Έμ‘°κ°μ΄ nullμ΄λΌλ©΄ κ°μ΄ μλ€λ λ»μ΄λ―λ‘, μ°Ύμκ° μ μλ κ°μ²΄(μΈμ€ν΄μ€)κ° μλ€. NullPointerExceptionμ μ΄μ²λΌ nullμ .(dot)μ μ°μμ λ λ°μνλ€.
package ref;
public class NullMain2 {
public static void main(String[] args) {
Data data = null;
data.value = 10; // NullPointerException μμΈ λ°μ
System.out.println("data = " + data.value);
}
}
null κ°μ μ°Έμ‘°ν μ£Όμκ° μ‘΄μ¬νμ§ μλλ€λ λ»μ΄λ€. λ°λΌμ μ°Έμ‘°ν κ°μ²΄ μΈμ€ν΄μ€κ° μ‘΄μ¬νμ§ μμΌλ―λ‘ λ€μκ³Ό κ°μ΄ java.lang.NullPointerExceptionμ΄ λ°μνκ³ , νλ‘κ·Έλ¨μ΄ μ’
λ£λλ€.
μ°Έκ³ λ‘ μμΈκ° λ°μνκΈ° λλ¬Έμ κ·Έ λ€μ λ‘μ§μ μνλμ§ μλλ€.
λ©€λ² λ³μμ null
μ§μ λ³μμ null λ¬Έμ λ₯Ό νμ νλ κ²μ΄ μ΄λ ΅μ§ μλ€. λ€μκ³Ό κ°μ΄ λ©€λ² λ³μκ° nullμΈ κ²½μ°μλ μ£Όμκ° νμνλ€.
package ref;
public class NullMain3 {
public static void main(String[] args) {
BigData bigData = new BigData();
System.out.println("bigData.count = " + bigData.count);
System.out.println("bigData.data = " + bigData.data);
System.out.println("bigData.data.value = " + bigData.data.value);
}
}
- bigData.countλ₯Ό μΆλ ₯νλ©΄ 0μ΄ μΆλ ₯λλ€.
- bigData.dataλ₯Ό μΆλ ₯νλ©΄ μ°Έμ‘°κ°μΈ nullμ΄ μΆλ ₯λλ€. μ΄ λ³μλ μμ§ μ무κ²λ μ°Έμ‘°νκ³ μμ§ μλ€.
- bigData.data.valueλ₯Ό μΆλ ₯νλ©΄ dataμ κ°μ΄ nullμ΄λ―λ‘ nullμ .(dot)μ μ°κ² λκ³ , λ°λΌμ μ°Έμ‘°ν κ³³μ΄ μμΌλ―λ‘ NullPointerException μμΈκ° λ°μνλ€.
package ref;
public class NullMain4 {
public static void main(String[] args) {
BigData bigData = new BigData();
bigData.data = new Data();
System.out.println("bigData.count = " + bigData.count);
System.out.println("bigData.data = " + bigData.data);
// NullPointerException
System.out.println("bigData.data.value = " + bigData.data.value);
}
}
μ 리
λμμΉ : μλ°λ νμ λ³μμ κ°μ 볡μ¬ν΄μ λμ νλ€.
Javaμμ λ³μμ κ°μ λμ
νλ κ²μ λ³μμ λ€μ΄ μλ κ°μ 볡μ¬ν΄μ λμ
νλ κ²μ΄λ€.
κΈ°λ³Έν, μ°Έμ‘°ν λͺ¨λ νμ λ³μμ μλ κ°μ 볡μ¬ν΄μ λμ
νλ€.
κΈ°λ³Ένμ΄λ©΄ λ³μμ λ€μ΄ μλ μ€μ μ¬μ©νλ κ°μ 볡μ¬ν΄μ λμ
νκ³ , μ°Έμ‘°νμ΄λ©΄ λ³μμ λ€μ΄ μλ μ°Έμ‘°κ°μ 볡μ¬ν΄μ λμ
νλ€.
κΈ°λ³Ένμ΄λ μ°Έμ‘°νμ΄λ λ³μμ κ°μ λμ
νλ λ°©μμ κ°λ€. νμ§λ§ κΈ°λ³Ένκ³Ό μ°Έμ‘°νμ λ°λΌ λμνλ λ°©μμ΄ λ¬λΌμ§λ€.
κΈ°λ³Έν vs μ°Έμ‘°ν - κΈ°λ³Έ
- μλ°μ λ°μ΄ν° νμ μ κ°μ₯ ν¬κ² 보면 κΈ°λ³Ένκ³Ό μ°Έμ‘°νμΌλ‘ λλ μ μλ€.
- κΈ°λ³Ένμ μ μΈν λλ¨Έμ§ λ³μλ λͺ¨λ μ°Έμ‘°νμ΄λ€. ν΄λμ€μ λ°°μ΄μ λ€λ£¨λ λ³μλ μ°Έμ‘°νμ΄λ€.
- κΈ°λ³Έν λ³μλ κ°μ μ§μ μ μ₯νμ§λ§, μ°Έμ‘°ν λ³μλ μ°Έμ‘°(μ£Όμ)λ₯Ό μ μ₯νλ€.
- κΈ°λ³Έν λ³μλ μ°μ μ°μ°μ μνν μ μμ§λ§, μ°Έμ‘°ν λ³μλ μ°μ μ°μ°μ μνν μ μλ€.
- κΈ°λ³Έν λ³μλ nullμ ν λΉν μ μμ§λ§, μ°Έμ‘°ν λ³μλ nullμ ν λΉν μ μλ€.
κΈ°λ³Έν vs μ°Έμ‘°ν - λμ
- κΈ°λ³Ένκ³Ό μ°Έμ‘°ν λͺ¨λ λμ μ λ³μ μμ μλ κ°μ μ½κ³ 볡μ¬ν΄μ μ λ¬νλ€.
- κΈ°λ³Ένμ μ¬μ©νλ κ°μ 볡μ¬ν΄μ μ λ¬νκ³ , μ°Έμ‘°νμ μ°Έμ‘°κ°μ 볡μ¬ν΄μ μ λ¬νλ€! μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν€λ μ°Έμ‘°κ°μ 볡μ¬ν΄μ μ λ¬νλ κ²μ΄λ€!
λ°λΌμ νλμ μΈμ€ν΄μ€λ₯Ό μ¬λ¬ κ³³μμ μ°Έμ‘°ν μ μλ€. - λ³μμ μ΄λ€ κ°μ΄ λ€μ΄μλ κ°μ κ·Έ κ°μ κ·Έλλ‘ λ³΅μ¬ν΄μ μ λ¬νλ€.
κΈ°λ³Έν vs μ°Έμ‘°ν - λ©μλ νΈμΆ
- λ©μλ νΈμΆμ κΈ°λ³Ένμ λ©μλ λ΄λΆμμ λ§€κ°λ³μ(νλΌλ―Έν°)μ κ°μ λ³κ²½ν΄λ νΈμΆμμ λ³μ κ°μλ μν₯μ΄ μλ€.
- λ©μλ νΈμΆμ μ°Έμ‘°νμ λ©μλ λ΄λΆμμ λ§€κ°λ³μ(νλΌλ―Έν°)λ‘ μ λ¬λ κ°μ²΄μ λ©€λ² λ³μλ₯Ό λ³κ²½νλ©΄, νΈμΆμμ κ°μ²΄λ λ³κ²½λλ€.