썸네일 오버로딩(Overloading)과 오버라이딩(Overriding) 오버로딩같은 이름의 메서드를 여러개 정의하는 것  (overload = 과적하다) 오버로딩은 메서드의 매개변수의 개수나 타입을 다르게 정의하여 호출 시점에 어떤 메서드가 호출될지를 결정한다. Example 1 void println()void println(boolean x)void println(char x)void println(char[] x)... 오버로딩은 메서드 이름이 같아야 하며, 매개변수의 개수 또는 타입이 달라야한다. 메서드 이름이 같더라도 매개변수의 개수나 타입이 다르지 않다면 컴파일러가 어떤 메서드를 호출해야 하는지 구분할 수 없다. 따라서 매개변수의 타입에 따라서 오버로딩된 메서드들 중 하나가 선택되어 실행된다. 오버로딩을 사용하지 않았더라면 println(), printlnBoll..
썸네일 클래스와 객체의 이해 클래스와 객체 클래스는 객체를 생성하기 위한 틀이고, 객체는 클래스를 기반으로 생성된 인스턴스이다. 즉 클래스는 객체의 설계도 역할을 하며 이 설계도를 기반으로 만들어진 실체가 객체인 것이다. 클래스 Class// 클래스 정의public class Car { // 속성 (필드) String color; int speed; // 동작 (메서드) void drive() { System.out.println("The car is driving."); }} 클래스는 객체를 정의하기 위한 설계도이다. 클래스는 속성(필드)과 동작(메서드)로 구성되어 있고, 이를 통해 객체의 상태와 행위를 정의한다. 객체 Object 객체는 new키워드를 통해 클래스를 기반으로 생성된 구..
썸네일 JDK와 JRE의 차이 JDK (Java Development Kit) JDK는 자바 개발 키드로, 개발자들이 자바 애플리케이션을 개발하는데 필요한 모든 도구를 포함하는 SDK이다. JDK안에는자바 소스 코드를 컴파일하는 javac 등 개발 도구 뿐 아니라 자바 프로그램을 실행시켜주는 JRE(Java Runtime Enviroment)를 포함한다. SDK (Software Development Kit)SDK는 소프트웨어 개발 키트의 약자로, 특정 플랫폼이나 언어나 프레임워크에 맞춰 개발을 시작할 수 있도록 필요한 도구, 라이브러리, API 등을 포함한 패키지이다. JDK는 자바 애플리케이션을 개발하기 위한 SDK이며, 자바 프로그램을 작성하고 실행할 수 있는 도구들을 제공한다.JDK 구성 요소  javac 컴파일러자바 소스 파..
썸네일 접근제어자 캡슐화, 정보 은닉 접근 제어자 접근 제어자는 클래스, 변수, 메서드의 접근 범위를 제한하여 클래스 내부의 데이터를 보호하고 외부에서의 무분별한 접근을 제한한다. 접근제어자가 사용될 수 있는 곳 : 클래스, 멤버변수, 메서드, 생성자 접근 제어자는 생략 가능하며, 생략한 경우 자동으로 default를 뜻한다.대상사용 가능한 접근 제어자클래스public, default메서드, 멤버변수public, default, protected, private지역변수X (지역 변수는 접근 제어자 없음) private : 같은 클래스 내에서만 접근 가능protected : 같은 패키지 내에서도 접근 가능 + 패키지에 관계없이 상속관계에 있는 자손클래스에서 접근 가능default : 같은 패키지 내의 클래스에서만 접근 (아무 것도 명시하지 않..
썸네일 String, Stringbuffer, Stringbuilder 차이 String String은 불변(immutable)객체로, 한 번 생성된 문자열은 수정할 수 없다. 문자열을 수정하게 되면 기존 문자열을 수정하는 것이 아니라 새로운 문자열 객체를 생성한다. 따라서 문자열을 많이 수정하면 할 수록 공간의 낭비와 속도 저하가 발생하게 된다. 하지만 이러한 불변성 덕에 String Constant Pool에 각 리터럴 문자열을 하나만 저장 후 다시 사용하여 힙 공간을 절약할 수있으며 멀티스레드 환경에서 자유롭게 공유할 수 있게 된다.  StringBufferStringBuffer sb = new StringBuffer(); // 기본 크기 16StringBuffer sb = new StringBuffer(50); // 초기 버퍼 크기를 50으로 설정StringBuffer s..
썸네일 String 문자열 String Pool, ==과 equals() 차이점 자바 String 문자열은 문자로 구성된 문장을 뜻한다. 자바에서는 문자열을 나타내는 자료형은 String이다. 자바의  String은 기본형 타입이 아닌 참조형 타입(하나의 클래스)이다. String a = "Hello"System.out.println(a.hashcode())a = a + " World";System.out.println(a.hashcode()) # 해시 값이 서로 다르다String은 불변(immutable)으로 설계되었는데, 이는 처음 만들어진 String은 어딘가에 저장되고, 거기에 추가될 떄는 새로운 String 값으로 저장된다. 선언 방식 리터럴 방식String str = "Hello";상수풀에 문자열을 저장한다. 동일한 문자열 리터럴이 여러번 등장하면 동일한 객체를 재사용한..
썸네일 기본 타입과 참조 타입 변수변수란 데이터를 저장하기 위한 메모리 공간에 이름을 부여한 것이다.  변수에 값을 저장하고 필요할 때마다 값을 꺼내 사용할 수 있다. 자료형 (Data Type)자료형(Data Type)은 변수에 저장될 데이터의 종류와 크기를 결정하는 역할을 한다. 이 자료형은 크게 기본형 타입과 참조형 타입으로 구분된다. 기본형 타입 int, byte, short, long, float, double, char, boolean기본형 타입은 JVM의 스택 메모리 영역에 값을 저장한다. (로컬 변수일 경우)각 기본형 타입은 고정된 크기를 가진다. (ex. int는 4바이트)초기화 하지 않으면 자료형에 맞는 기본값으로 초기화된다. (null을 가질 수 없다)기본형 숫자타입은 모두 부호가 있는 signed 타입으로 음수와..
썸네일 JVM의 동작방식과 구조 자바 가상 머신 (Java Virtual Machine)  JVM은 자바를 실행하기 위한 가상 기계로, OS에 종속받지 않고 CPU가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터이다. Java 소스 코드(*.java)는 CPU가 인식을 못하므로 기계어로 컴파일 해야하는데, Java는 JVM이라는 가상머신을 거쳐서 OS에 도달하기 때문에 OS가 인식할 수 있는 기계어가 아닌 JVM이 인식할 수 있는 자바 바이트코드(*.class)로 변환된다. 이때 자바 컴파일러가 .java파일을 .class파일로 변환한다. 이 바이트 코드는 OS가 이해할 수 있는 기계어가 아니기 때문에 JVM이 이 바이트코드를 해석해주는 역할을 한다. 따라서 바이트 코드는 JVM위에서 OS 상관없이 실행될 수 있다. JVM의 동작..
썸네일 가비지 컬렉션 (Garbage Collection, GC) 가비지 컬렉션 (Garbage Collection)메모리 해제, 자동화, 효율적인 자원 관리 자바는 가비지 컬렉션이라는 자동 메모리 관리 시스템을 제공한다. 개발자가 객체가 더 이상 필요 없을 때 그 객체를 수동으로 메모리에서 해제할 필요가 없다. 즉, 개발자가 명시적으로 메모리를 해제 하지 않더라도, JVM이 주기적으로 가비지 컬렉터를 통해 더 이상 참조 되지 않는 객체를 자동으로 제거하고 메모리를 회수한다.  STW (Stop The World) STW는 JVM이 가비지 컬렉션 과정에서 발생하는 이벤트로, 애플리케이션이 일시적으로 멈추는 현상을 의미한다. 가비지 컬렉션을 수행할 때 JVM은 필요한 작업을 완료하기 위해 GC관련 스레드를 제외한 모든 스레드를 일시적으로 중지 시키게 되는데, 이 현상을 ..