기술 창고/Java(20)
-
[Java] 오버로딩 / 오버라이딩
오버로딩 (OverLoading) 자바의 클래스 내에서 이미 존재하고 있는 메소드의 이름과 사용하려고 하는 메소드의 이름이 같더라도 매개변수의 개수 또는 타입 / 이름이 다르면 메소드를 새로이 정의해서 사용할 수 있는 기법을 뜻한다. 오버로딩 조건 앞서 말했던 것처럼 이름은 같아도 되지만, 매개변수의 개수 / 타입 / 이름이 다를 경우에 조건이 성립한다. 단, 리턴 값만을 다르게 할 경우에는 오버로딩을 했다고 볼 수 없다. 접근 제어자도 자유롭게 지정가능하다. (public, default, protected, private...) 이 역시 접근 제어자만을 변경했다고 해서 오버로딩을 했다고 볼 수 없다. 즉, 위의 조건들과 주의점을 보았을 때 오버로딩은 결국에는 매개변수에 대한 변경점이 있을 경우에 조건..
2023.01.31 -
[Java] StringBuilder / StringBuffer
String StringBuilder / StringBuffer 와 일반적인 String 클래스의 가장 큰 차이점은 불변함(immutable)이다. String str = "nice"; str = str + " meet you"; 기본적으로 위의 코드를 살펴본다면 nice 문구에 meet you라는 문구가 붙어 변한다고 생각할 것이다. 하지만, nice 라는 문구를 가진 str 변수의 메모리와 meet you라는 문구가 추가된 str은 같은 메모리를 사용하는 것이 아니라 새로 추가되는 것이다. 따라서 기존의 nice만 있던 str변수는 가비지(Garbage)가 된 상태이고, 이후 GC(Garbage Collector) 로 인해 제거가 된다. 즉, 불변하기 때문에 기존의 데이터가 변경되는 것이 아니라 새로..
2023.01.23 -
[Java] Object 클래스 내의 equals() / hashcode() 함수
equals(), hashcode() 함수들은 모든 자바 객체의 부모 객체인 Object 클래스에 정의되어있다. 따라서, 자바의 모든 객체는 equals() 와 hashcode() 함수를 상속받는다. equals() equals() 는 해석한 그대로의 기능을 가지고있다. 2개의 객체가 동일한지 검사하기 위한 메소드이다. equals() 는 2개의 객체가 참조하는 것이 동일한 데이터인지 동일성을 확인한다. 2개의 객체가 가리키는 주소가 동일한 메모리 주소일 경우에 동일하다고 판단하는 것이다. // 기본적으로 만들어져있는 equals() 메소드 // 해당 메소드를 오버라이딩하여 구현한다. public boolean equals(Object obj) { return (this == obj); } 동일한 객체가..
2023.01.23 -
[Java] 객체 / 클래스 / 인스턴스
객체 (Object) 객체라는 것은 물리적으로 존재하거나 추상적인 존재들 중에서 자신의 속성을 가지고 있으며, 식별할 수 있는 것을 말한다. 예를 들어, 사람이라는 객체는 이름, 나이, 성별 과 같은 속성과 먹다, 자다 등의 동작을 수행한다. 이러한 이름, 나이와 같은 속성을 필드라고 하고, 먹고 자는 동작은 메소드라고 표현한다. # 예 : 물리적 존재 - 자동차, 컴퓨터, 사람 / 추상적 존재 - 강의, 주문 클래스 (Class) 클래스는 Java에서 객체를 생성하기 위한 설계도이다. 객체가 가지는 속성(필드)과 동작(메소드), 생성자로 이루어져 있다. - 필드 : 객체의 속성으로서 실제 값이 저장되는 변수에 속한다. - 메소드 : 객체의 동작을 수행하는 블록 혹은 함수이다. - 생성자 : 객체가 실제..
2023.01.12 -
[Java] Stack / Heap
Stack - 객체 타입 참조값 / 원시 타입 데이터들 할당 Heap 영역에 생성된 객체 타입의 데이터들에 대한 참조 값, 원시 타입의 데이터들(byte, short, int, long, double, float, boolean, char) 들이 할당되어 저장된다. 원시 타입의 데이터들의 경우에는 참조값을 저장하는 것이 아니라 저장된 변수 실제 값을 저장하게 된다. # 예 : int = 5 , 5가 저장 - Stack 영역에 있는 변수들은 visibility 를 가진다. 전역변수가 아닌 지역변수가 특정 함수내에서 Stack 에 할당된 경우, 해당 지역변수는 다른 함수에서 접근할 수 없다. 예를 들어, One() 이라는 함수에서 Two() 함수를 호출하고 Two() 함수의 종료되는 중괄호 } 가 실행된 경..
2023.01.12 -
[Java] 자바 컴파일 과정
이전에는 JVM 에 대해서 정리해보았다. JVM을 짤막하게 복습해보자면 원 소스 코드의 java file을 컴파일러를 통해 바이트 코드 class file로 변환하고, 여러 OS 환경과 플랫폼에서 실행될 수 있도록 지원해주는 자바 가상 머신이다. 그렇다면 초기에 개발자가 작성한 원 소스 코드 java file을 컴파일 해주는 작업이 우선적으로 선행이 되어야 하는데 어떻게 컴파일이 되어 바이트 코드로 변환이 되는 것일까? 자바 컴파일 순서 1. 개발자가 자바 소스 코드 작성 (java file) 2. 자바 컴파일러가 자바 소스 코드를 읽어 바이트 코드(class file)로 변환. # 바이트 코드는 아직 컴퓨터가 읽을 수 없는 JVM만이 읽을 수 있는 코드 3. 컴파일된 바이트 코드를 JVM 내부의 클래스..
2023.01.12