Language/Java

·Language/Java
동등성과 동일성자바에서 '두 객체가 같다.'라는 표현은 동등성(equality)과 동일성(identity)이란 표현으로 제공된다. 이 두 개념은 객체를 비교하는 방식에 있어 근본적인 차이를 가지기 때문에 자바는 객체의 동등성과 동일성을 구분해야 되는 상황이 자주 발생하게 된다.  동일성(identity)의 동일은 완전히 같음을 의미한다. 객체가 완전히 같으려면 두 객체가 메모리 상에서 같은 위치를 바라보는 것을 의미한다. 쉽게 이야기해 물리적으로 같은 메모리(힙메모리)에 있는 객체 인스턴스인지 참조값을 확인하는 것과 같다. 동등성(equality)의 동등은 같은 가치나 수준을 의미하지만 그 형태나 외관 등이 완전히 같지는 않을 수 있다. 그래서 동일성은 JVM의 실제 메모리에 물리적인 인스턴스를 비교한다..
·Language/Java
자바의 Object 클래스자바에서 모든 클래스는 Object 클래스를 상속을 받는다. 우리 눈에는 보이지 않지만 클래스가 `extends` 키워드로 명시적으로 상속을 받는 클래스가 없다면, Object 클래스를 상속을 받는다고 생각하면 된다. public class MyClass { // extends Object 가 생략되어 있음}이렇게 자바에서 기본으로 Object 클래스를 상속받는 이유는 다음 두가지를 제공하기 때문이다. 자바 객체가 공통적으로 갖춰야 할 기능(toString(), equals(), hashCode() 등)을 제공하기 위해 사용다형성을 지원하기 위해 모든 클래스의 최상위 부모 클래스를 통일하기 위해 사용 공통 기능 제공자바에서 Object 클래스는 모든 객체가 기본적으로 갖추..
·Language/Java
자바의 메모리 구조자바의 메모리 구조는 자바의 JVM 메모리 구조를 말하는 것과 같다. 자바 애플리케이션이 실행되는 동안 사용되는 메모리를 구분하고 효율적으로 관리하기 위해 여러 영역으로 나눠져 있다.   크게 보면 JVM 메모리는 메서드 영역, 스택 영역, 힙 영역의 3가지로 나뉜다. 이 외에도 PC 레지스터나 네이티브 메서드 스택 같은 영역이 있지만, 자바 동작을 이해하는 데는 이 3개의 영역만 인지해도 충분하다.  1. 메서드(Method) 영역메서드 영역은 JVM이 실행 중에 클래스 수준의 정보를 저장하는 중요한 메모리 공간이다. 프로그램 실행 도중 로드된 클래스와 관련된 데이터가 이곳에 저장되며, 모든 스레드가 공유하는 영역이다. 메서드 영역에 저장되는 주요 데이터는 다음과 같다. 클래스 메타데..
·Language/Java
접근 제어자가 필요한 이유접근 제어자를 학습하기 전 한 가지 예시를 통해 접근 제어자가 필요한 이유를 알아보자.   Speaker 객체 설계와 접근 제어자의 필요성`Speaker` 클래스는 음량을 관리하는 객체로, 메서드를 통해 음량을 조절하도록 설계되었습니다. 다음은 `Speaker` 객체를 생성하고, 초기 음량을 설정한 뒤, 음량을 높이는 메서드를 호출하는 예제입니다.요구사항• 스피커의 음량은 절대 100을 넘으면 안 된다. (100을 넘어가면 스피커의 부품들이 고장 난다.)스피커 객체 설계(클래스)• 데이터(필드) : 음량• 기능(메서드) : 음량을 높이고, 내리고, 현재 음량을 확인할 수 있는 단순한 기능• 요구사항대로 스피커의 음량은 100까지만 증가할 수 있다.package access; pu..
·Language/Java
객체를 생성하고 초기화하는 방법생성자가 필요한 이유와 생성자를 알아보긴 어떤 방식으로 객체를 생성했는지 알아보자.package construct;public class MemberInit { String name; int age; int grade;}package construct;public class MethodInitMain1 { public static void main(String[] args) { MemberInit member1 = new MemberInit(); member1.name = "user1"; member1.age = 15; member1.grade = 90; MemberInit m..
·Language/Java
nullJava에서 `null`은 참조 변수가 어떤 객체도 가리키지 않음을 나타내는 특별한 값이다. `null`은 값이 존재하지 않는,없다는 뜻이다. 기본형(int, double, float)과 달리 참조형(String, int[], Class Object)에는 `null`을 할당할 수 있다. int a = null; // illgaldouble b = null; // illgalString c = null; // possibleint[] d = null; // possible 클래스 객체에서의 예제package ref;public class Data { int value;}package ref;public class NullMain1 { public static void main(S..
·Language/Java
변수의 종류 멤버 변수(필드)클래스 안에 선언된 변수로, 클래스의 상태를 나타내는 속성이다.인스턴스 변수와 클래스 변수(정적 변수)로 나눤다.인스턴스 변수: 객체 생성 시 각 인스턴스에 독립적으로 존재한다. static 키워드가 없다.클래스 변수: 클래스 레벨에서 공유되는 변수로, static 키워드가 붙는다.지역 변수메서드나 생성자 내부에 선언된 변수로, 해당 블록 내에서만 유효한다.메서드 호출이 끝나면 메모리에서 사라진다.매개변수도 지역 변수의 일종으로, 메서드나 생성자 호출 시 값을 전달받기 위해 사용된다. 변수의 초기화멤버변수의 경우 멤버 변수는 명시적으로 초기화하지 않으면 기본값으로 초기화(자동 초기화)된다. 반면에 지역 변수는 반드시 명시적으로 초기화(수동 초기화)해야 한다.  변수 초기화의 ..
·Language/Java
기본형과 참조형변수의 데이터 타입을 크게 나눠보면 기본형과 참조형이 있다.기본형(Primitive Type): `int`,  `long`, `double`, `boolean`처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입을 기본형이라고 한다.참조형(Reference Type): `Student student1`, `int[] students`와 같이 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입을 참조형이라고 부른다. 참조형은 객체 또는 배열에 사용된다.  정리하자면, 기본형은 숫자 10, 20과 같이 실제 사용하는 값을 변수에 담을 수 있다. 그래서 바로 해당 값을 사용이 가능하다. 반면에, 참조형에 경우 실제 사용하는 값을 변수에 담는 것이 아닌, 실제 값이 위치한 주소(참조)를..
·Language/Java
클래스가 필요한 이유자바는 클래스와 객체로 구성되며, 이를 이해하는 것이 핵심이다. 클래스와 객체는 다양한 개념을 포함하고 있어 한 번에 모두 이해하기 어렵다. 따라서 클래스와 객체의 기본 개념을 시작으로, 클래스가 발전하면서 만들어진 방식까지 단계적으로 살펴보자. 학습 정보 출력 프로그램 만들기학습에서 '왜'라는 질문은 본질을 이해하는 데 중요한 역할을 한다. 먼저, 클래스가 필요한 이유를 이해하기 위해 문제를 풀어보자.요구 사항1. 첫 번째 학생의 이름은 "학생 1", 나이는 15, 성적은 90입니다. 2. 두 번째 학생의 이름은 "학생2", 나이는 16, 성적은 80입니다. 3. 각 학생의 정보를 다음과 같은 형식으로 출력해야 합니다: `"이름: [이름] 나이: [나이] 성적: [성적]"` 4. 변..
·Language/Java
2024.11.28 - [Knowledge/자료구조] - [자료구조] 스택(stack)과 자바를 통한 구현(배열, ArrayList) [자료구조] 스택(stack)과 자바를 통한 구현(배열, ArrayList)스택 스택(stack)은 먼저 넣은 데이터가 나중에 나오는 자료구조이다. 데이터를 넣는 작업은 푸시(push) , 꺼내는 작업은 팝(pop) 이라고 한다. 스택에서 데이터를 관리할 때, 가장 최근에 추가된jh7722.tistory.com 스택의 대한 설명은 위 포스팅을 참고 바란다. 스택의 추상자료형푸시(push), 팝(pop), 가득 찼는지 확인(isFull), 비었는지 확인(isEmpty)과 같은 연산과 최근에 삽인한 데이터 위치를 확인할 톱(top)도 있다. 구분정의설명연산boolean isF..
JH_DEV77
'Language/Java' 카테고리의 글 목록 (2 Page)