자바에서 변수를 사용할 때 기본형, 레퍼런스형, 그리고 객체라는 요소들이 활용됩니다.
기본형(Primitive types)
자바는 기본 데이터 타입(Primitive type)을 사용하여 메모리 공간에 직접 접근하고 값을 저장하거나 가져옵니다. 기본형 데이터 타입은 다음과 같은 8가지가 있습니다.
byte | short |
int | long |
float | double |
char | boolean |
이러한 기본 데이터 타입은 메모리에 값을 직접 할당하고, 스택 메모리 영역에 저장됩니다.
기본형은 연산에 더 빠르고 메모리 효율적인 처리를 할 수 있습니다.
다음은 각 기본형 데이터 타입의 사용 예시입니다.
int num = 5; // 정수형 데이터 타입 int 사용
char letter = 'A'; // 문자형 데이터 타입 char 사용
boolean isTrue = true; // 불리언형 데이터 타입 boolean 사용
int num = 10;
float f = 12.5f;
double d = 123.456;
boolean isTrue = false;
char ch = 'A';
byte b = 127;
short s = 32767;
long l = 100000000000L;
레퍼런스형 (Reference types)
레퍼런스형 데이터 타입은 객체에 대한 참조를 저장하는 변수로, 힙 메모리 영역에 저장된 객체를 가리키는 데 사용됩니다. 이때 레퍼런스 변수는 실제 객체의 데이터를 저장하는 것이 아니라 객체의 메모리 주소를 저장합니다.
+) 레퍼런스 형태(Reference Types) 레퍼런스 형태는 객체(object) 타입의 변수를 참조하는 데 사용되며, 객체의 메모리 주소를 저장합니다. 자바에서 대표적인 레퍼런스 타입에는 문자열(String), 배열(Array), 열거형(Enum), 인터페이스(Interface), 클래스(class) 등이 있습니다. 레퍼런스 형태는 값이 아닌 메모리 주소를 저장하기 때문에 기본형과 다르게 동작합니다.
일반적인 레퍼런스형 데이터 타입으로는 클래스, 인터페이스, 배열 등이 포함됩니다.
// 클래스를 사용한 레퍼런스형 데이터 타입
public class Person {
String name;
}
Person person = new Person(); // Person 클래스의 인스턴스를 생성하고, person 변수에 참조를 저장
// 배열을 사용한 레퍼런스형 데이터 타입
int[] numbers = new int[5]; // 배열
String str = "Hello, Java!";
int[] numbers = {1, 2, 3, 4, 5};
ArrayList<String> list = new ArrayList<>();
객체 (Objects)
객체는 자바에서 객체 지향 프로그래밍의 기본 구성단위입니다.
객체는 속성(attribute)과 메서드(method)로 구성되며, 동일한 클래스의 여러 인스턴스(instance)로 생성됩니다.
객체는 애플리케이션의 상태를 유지하고 동작을 수행하는 데 사용되며, 레퍼런스 형태로 참조되어 메모리에 생성됩니다.
class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void sayHello() {
System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person("John", 35);
person.sayHello(); // 출력: Hello, my name is John and I am 35 years old.
}
}
이해를 돕기 위해 키본형과 레퍼런스 형태의 차이를 나타내는 예제
int num1 = 10;
int num2 = num1;
num2 = 20;
System.out.println("num1: " + num1); // 출력: num1: 10
System.out.println("num2: " + num2); // 출력: num2: 20
ArrayList<Integer> list1 = new ArrayList<>();
list1.add(10);
ArrayList<Integer> list2 = list1;
list2.add(20);
System.out.println("list1: " + list1); // 출력: list1: [10, 20]
System.out.println("list2: " + list2); // 출력: list2: [10, 20]
위 코드에서 기본형 num1과 num2는 서로 다른 값을 가지며 변경사항이 서로에게 영향을 주지 않지만, 래퍼런스 형태인 list1과 list2는 동일한 객체를 참조하여 변경사항이 두 변수 모두에게 영향을 줍니다.
결론 : 자바의 기본형, 레퍼런스 형태, 객체를 정확하게 이해하면 프로그램 구조 및 설계, 데이터 처리 방식을 더 효율적으로 관리할 수 있습니다.
Scanner?? 객체가 아닌 그냥 참조하는 것이다. heap영역에 잡을 때에는 new를 사용한다(동적 메모리 할당) => new Scanner...
new = 할당해라
Scanner = 스캐너를
Scanner라는 클래스를 사용하는 것이다. 만들어진 메서드를 사용하는 거다.
어려워하지 말자 그냥 만들어진 거 사용하기만 하면 성공이다.
'코딩 > JAVA' 카테고리의 다른 글
Java 데이터 다른 클래스에서도 사용하는법, 페이지간 데이터 이동 (0) | 2023.11.24 |
---|---|
JAVA 단순 계산기 만들기 예제 - 간단한 설명 (2) | 2023.07.29 |
Java 문법 조건문 if, else if, else문, switch문, 삼항연산자 (0) | 2023.07.12 |
java 자바정리 기초, 문법, 규칙, 정리, 변수이름 및 초기화, Casting, 비트연산 (2) | 2023.07.08 |
Java 정리1, OOP 4대 특징, 주석, 접근 지정, 여러 팁, 자바 공부,자바 정리 (0) | 2023.07.03 |