JAVA/JAVA 이론

JAVA/JAVA 이론

[Java] 깊은 복사(Deep Copy) vs 얕은 복사(Shallow Copy)

깊은 복사 vs 얕은 복사 Java에서 객체를 복사할 때, 깊은 복사와 얕은 복사라는 개념이 있다. 간단하게 정리하자면 깊은 복사 : 실제 값을 새로운 메모리 공간에 복사하는 것이고, 얕은 복사 : 주소 값을 복사하는 것이다. 간단 예제 아래 예제를 통해 일단 간단히 알아보자. int[] original = new int[]{1,2,3}; int[] shallowCopy = original; //얕은 복사 int[] deepCopy = original.clone(); //깊은 복사 //주소 값 확인 System.out.println("주소-original = " + System.identityHashCode(original)); //주소-original = 191382150 System.out.print..

JAVA/JAVA 이론

[Java] equals()와 hashCode() / equals와 hashCode를 둘 다 재정의 해야하는 이유

Java의 모든 객체는 Object 클래스를 상속받고 있다. Object 클래스는 객체의 동일성을 비교하기 위한 equals와 hashCode 메서드가 정의되어 있다. 따라서 Java의 모든 객체는 필요에 따라 equals와 hashCode를 재정의할 수 있다. equals() equals()는 두 객체의 값이 같은지 여부를 비교할 때 사용하는 메서드이다. 객체를 비교할 때 기본적으로 객체의 주소를 비교한다. public static void main(String[] args) { Car car1 = new Car(1111, "blue"); Car car2 = new Car(1111, "blue"); System.out.println(car1 == car2); //두 객체는 주소가 다르기 때문에 fals..

JAVA/JAVA 이론

[Java / CS] JVM과 Java의 메모리 구조

(운영체제) 프로세스 메모리 구조 일반적으로 프로세스의 메모리 구조는 아래의 4가지 영역으로 나눠진다. 스택(stack), 힙(heap), 데이터(data), 코드(text) 영역 stack과 heap 영역은 런타임 단계에서 메모리를 할당받는 동적 영역이고, data와 code 영역은 컴파일 단계에서 메모리를 할당받는 정적 영역이다. Stack : 임시 데이터 (함수 실행을 위한 지역 변수 등)가 저장된다. Heap : 코드에서 동적으로 만들어지는 데이터가 저장된다.(동적으로 할당된 데이터) data : 전역 변수, 초기화된 데이터 등 code : 프로그램 코드 JVM(Java Virtual Machine) Java의 특징 객체지향 프로그래밍 언어 기본 자료형(Primitive type : 원시 자료형)..

JAVA/JAVA 이론

[JAVA] 추상 클래스 (abstract class)

추상 클래스 상속을 하기 위해 만드는 클래스 구현 코드 없이 메서드의 선언만 있는 추상메서드를 포함한 클래스 반드시 하나 이상의 추상메서드를 포함해야 한다. abstract 예약어 사용 추상 클래스는 인스턴스화할 수 없음 ( 객체 생성 불가 ) (참고) 추상 클래스, 추상 메서드는 클래스 다이어그램에서 기울임체로 쓴다. 추상 메서드 자식 클래스에서 반드시 overriding 해야하는 메소드 선언한 하고 구현하지 않는다. abstract int methodA(int x, inty); //추상메서드 더보기 1) 메서드 선언 (declaration) : 반환타입, 메서드 이름, 매개변수로 구성 2) 메서드 정의(definition) : 구현부 { }를 가짐 abstract i..

JAVA/JAVA 이론

[JAVA] 상속

상속 (Inheritance) 새로운 클래스를 정의할 때 이미 구현된 클래스를 상속(inheritance) 받아서 속성이나 기능을 확장하여 구현한다. 기존의 클래스보다 더 구체적인 기능을 가진 클래스를 구현해야 할 때 상속을 이용함. 기본 문법 (Parent 클래스를 상속받은 Child 클래스) extends 키워드 뒤에는 단 하나의 클래스만 올 수 있음 (단일 상속) class Child extends Parent{ //필드 //메서드 } 상위 클래스 : 하위 클래스보다 더 일반적인 개념과 기능을 가짐 하위클래스 : 상위 클래스보다 더 구체적인 개념과 기능을 가짐 하위 클래스가 상위 클래스의 속성과 기능을 확장(extends) 자식클래스 Child에서는 부모클래스 Parent의 메서드와 멤버변수 등을 ..

JAVA/JAVA 이론

[JAVA] static과 final

static 키워드 : 공통으로 사용하는 변수가 필요한 경우 사용 여러 인스턴스가 공유하는 기준값이 필요한 경우 인스턴스가 생성될 때 만들어지는 변수가 아니고, 처음 프로그램이 메모리에 로딩될 때 메모리를 할당 클래스 변수, 정적 변수라고 도 함 ( 인스턴스 변수 ) 인스턴스 생성과 상관없이 사용하므로 클래스 이름으로 직접 참조 1. static 변수 ex) 학생이 생성될때마다 학번을 1씩 증가시켜서 저장해 줌 public class Student { private static int studentNum=10000; private int studentName; private int studentID; // Student 객체를 생성할 때마다 studentNum++ 하여 studentID로 설정해준다. p..

JAVA/JAVA 이론

[JAVA] 접근 제어 지시자( private, protected, default, public) / 정보은닉, 캡슐화

1. 접근 제어 지시자(access modifier) 클래스 외부에서 클래스의 멤버변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드 public > default > protected > private public : 클래스의 외부 어디에서나 접근 가능 default : 같은 패키지 내부에서만 접근 가능 protected : 같은 패키지나 상속관계의 클래스에서 접근 가능 / 그 외에서는 접근 불가 private : 같은 클래스 내부에서만 접근가능 2. get() , set() 메서드 private으로 선언된 멤버 변수에는 접근할 수 없다. >> 접근, 수정할 수 있는 메서드를 public으로 제공 get() 메서드만 제공되는 경우 : read-only field 이클립스에서 [shift ..

JAVA/JAVA 이론

[JAVA] 생성자 / 오버로딩(overloading)

1. 생성자 (Constructor) 생성자 : 사용할 클래스의 변수를 미리 초기화해준다. 매개변수, 구현부가 없다. this.(필드명) : Car 클래스 내의 필드 default 생성자 : 클래스에 생성자를 구현하지 않아도 new 키워드로 생성자를 호출할 수 있음. - 클래스에 생성자가 하나도 없어도 컴파일러가 default 생성자 코드를 넣어준다. - public Car(){ }; class Car{ public String color; public int speed; //default 생성자 public Car(){} //생성자 Car(String color, int speed){ this.color = color; this.speed = speed; } } main에서 호출할 때 - 방법 1 pu..

HSRyuuu
'JAVA/JAVA 이론' 카테고리의 글 목록