본문 바로가기

자바10

[Java] 내부 클래스 Inner Class 내부 클래스 Inner Class class A{ class B{ } } 위와 같이 클래스 내부에 또 다른 클래스가 존재할 수 있다. B는 A의 내부 클래스이고, A는 B의 외부 클래스이다. 내부 클래스 B는 외부 클래스인 A가 아닌 클래스에서 잘 사용되지 않아야 한다. 외부 클래스가 아닌 다른 클래스에서 내부 클래스에 접근해야 한다면 내부 클래스로 선언해서는 안 되는 클래스를 내부 클래스로 선언했다는 의미이기 때문이다. 보통 AWT, Swing 등의 GUI 이벤트 처리 외에는 잘 사용되지 않는다. 내부 클래스의 장점 내부 클래스에서 외부 클래스의 멤버들에게 쉽게 접근이 가능하다. 코드의 복잡성을 줄여준다. (캡슐화) - 외부에는 불필요한 클래스를 감출 수 있기 때문이다. 내부 클래스의 종류와 특징 cl.. 2021. 7. 22.
[Java] 랩퍼클래스 Wrapper Class 랩퍼클래스 Wrapper Class 자료형은 기본형(Primitive, P타입)과 참조형(Reference, R타입)으로 나뉘는데, 컬렉션에 값을 담을 때 참조형(R)만 담을 수 있고 기본 자료형(P)은 담을 수 없기 때문에 P타입 자료형을 R타입 자료형으로 만들어 줄 때 랩퍼 클래스를 사용한다. 기본 자료형의 값을 멤버 변수의 값으로 저장하고, 이 값 주위로 값을 가공하는 메소드들이 감싸고 있다고 해서 랩퍼(Wrapper) 클래스라고 불린다. 다음과 같이 모든 기본 자료형에 대해 그에 대응하는 랩퍼 클래스가 있다. 기본 자료형 랩퍼 클래스 byte Byte short Short int Integer long Long float Float double Double char Character boolean.. 2021. 7. 13.
[Java] 메모리 Memory 메모리 Memory 1. 메소드 영역 - 클래스 데이터 (클래스 변수) 프로그램 실행 중 어떤 클래스가 사용되면 JVM은 해당 클래스 파일을 읽어서 클래스 데이터를 이곳에 저장하고, 동시에 클래스 변수도 이곳에 생성한다. 2. 호출 스택 - 메인 메소드(지역 변수) 메소드 작업에 필요한 메모리 공간을 제공한다. 메소드가 호출되면 호출스택에 메소드 활용을 위한 메모리가 할당된다. 메모리에서 메소드가 작업을 하는 동안, 지역변수와 연산의 중간 결과가 저장된다. 메소드가 작업을 마치면 할당된 메모리 공간은 반환되어 비워진다. 호출스택의 제일 상위에 있는 메소드가 지금 실행중인 메소드이다. 아래에 있는 메소드가 바로 위에 있는 메소드를 호출해서 사용중인 메소드이다. 나머지는? 나머지는 모두 대기한다. 3. 힙 .. 2021. 7. 13.
[Java] 열거 타입 Enum 열거 타입 Enum Enum은 String처럼 클래스처럼 보이는, 자료형이다. 보통 서로 관련 있는 상수들을 모아 심볼릭한 명칭의 집합으로 정의하는 용도로 쓴다. 다음과 같이 자료형 키워드 위치에 'Enum'을 적어 선언한다. public Enum 클래스이름{ ... } Season에는 Spring, Summer, Fall, Winter 라는 상수가 있다. package enumtest; public enum Season { Spring, Summer, Fall, Winter } 이 Season 열거타입을 이용하여 다음과 같이 활용할 수 있다. String 처럼 "Spring"과 같이 바로 대입하면 안되고, Season.Spring 과 같이 표현하여야 한다. package enumtest; public .. 2021. 7. 13.
[Java] String Builder / String Buffer StringBuilder / StringBuffer String은 소위 불변 객체라고 한다. 2개의 String 객체가 있을 때, 두 객체를 더하는 연산을 하면 새로운 String을 생성한다. 즉 더하는 행위는 메모리 할당과 메모리 해제를 발생시키며 더하는 연산이 많아진다면 성능이 낮아지는 결과로 이어질 수 있다. StringBuilder/StringBuffer는 String끼리 더할 때 새로운 객체를 생성하는 것이 아니라, 기존의 데이터에 더하는 방식을 사용하므로 속도가 빠르고 상대적으로 부하가 적다. 따라서 긴 문자열을 더하는 상황이 발생할 경우 StringBuilder를 적극적으로 사용하는 것이 좋다. StringBuilder는 클래스 안에 배열 공간을 미리 만들어놓고 문자열을 추가하는 함수가 호출.. 2021. 7. 9.
[Java] 생성자 Constructor 생성자 Constructor 객체를 생성할 때 사용하는 실제 객체를 생성해주는 코드이다. 즉 생성자 없이는 개체를 만들 수 없다. 생성자는 메소드와 유사한 형식을 가지고 있지만, OOO( ) 메소드와는 기능적인 부분에서 차이가 있다. 1. 생성자의 형식 생성자의 이름은 반드시 클래스 이름과 같아야 한다. 메소드가 아니기 때문에 리턴타입(반환타입)을 선언할 수 없다. 2. 기본 생성자 Default Constructor 파라미터가 없는 생성자를 기본 생성자라고 한다. 기본 생성자를 이용해서 생성된 객체는 기본 객체라고 하며, 모든 필드 값은 기본 값으로 초기화 된다. 클래스에 생성자를 따로 정의해주지 않으면 자바에서 기본 생성자를 자동으로 만들어준다. 즉, 클래스에 생성자가 하나라도 있다면 기본 생성자가 .. 2021. 7. 9.
[Java] 접근제어자 Access Modifier 접근제어자 Access Modifier 자바에서는 접근 제어자를 통해서 각 API의 접근 권한을 제한할 수 있다. 클래스 앞에 붙는 접근제어자는 public, default만 가능하다. 클래스를 만들 때 어떤 클래스에 public을 붙여야 하는가? : 자바 파일명과 동일한 대표 클래스 사람이 소스코드를 읽을 때 public 키워드가 붙은 클래스를 본다면 현 소스가 어떤 자바 파일 이름으로 되어있는지 알 수 있습니다. 즉, public이 없는 클래스는 자바 파일명과 동일한 클래스가 아니라는 것! 그렇다면 왜 파일 이름과 public 클래스명을 맞춰야 하는가? : 가독성 자바 파일 안에 많은 클래스를 정의할 때 하나의 대표 클래스를 지정하고 파일명과 동일하게 맞추는 것이 가독성에 도움이 되기 때문이다. 접근.. 2021. 7. 1.
[Java] 오버라이드, 오버로드 오버라이드(override) 오버라이드는 상속 관계(부모관계 or 인터페이스)에서만 사용가능하다. 상속받은 부모 메소드를 자식 클래스에서 재정의 하여 상황에 맞게 활용하는 것이다. 재정의하는 것이기 때문에 메소드 이름, 리턴타입, 파라미터 등은 동일해야 한다. 오버라이드 하는 메소드 위에 @Override 를 넣어주어 오버라이드 된 메소드임을 표시해준다. ※ 오버라이드 시 주의점 메소드의 형식은 상속받은 메소드와 동일해야 한다. 접근제어자는 반드시 부모의 것과 같은 범위거나 더 큰 범위여야 한다. 재정의된 메소드의 부모 메소드는 자식의 것에서는 은닉(Hide)되어지기 때문에, 직접적으로는 더이상 호출되지 않는다. 은닉 된 부모 메소드를 호출할 때엔 super라는 부모 객체를 호출하는 키워드를 통해 호출한.. 2021. 7. 1.
[Java] 동적가변배열 Dynamic Array 동적가변배열 동적가변배열이 아닌 일반 배열은 처음부터 배열의 길이를 초기화해서 만들어 사용한다. 반면에 동적가변배열은 배열의 길이를 동적으로, 필요시에 생성한다. 즉, 동적가변배열은 필요시에 필요한 만큼 만들어서 사용하는 배열이다. 다음과 같이 []안을 비워두고 선언하여 동적가변배열을 생성할 수 있다. int[][] arr = new int[3][] 예제 01. 길이가 1씩 증가하는 동적가변배열 package may31; import java.util.Arrays; public class DynamicArray { public static void main(String[] args) { int[] arr = new int[3]; int[][] arr01 = new int[3][3]; char[][] ar.. 2021. 7. 1.
[Java] 다차원 배열 Multi Array 다차원 배열 Multi Array 다차원 배열 선언 자료형[][] 배열이름 = new 자료형[행][열]; int[][] multiArr01 = new int[2][4]; 위와 같이 선언한다면, multiArr01 이라는 배열은 2행 4열의 배열이 될 것이고, 자료형은 int(정수형)가 된다. 다차원 배열의 원소 불러오기 multiArray[2][3] 은 multiArray의 2행 3열의 원소를 불러온다. 배열이름.length 와 배열이름[행].length multiArray.length = 2 → 행 길이 multiArray[1].length = 3 → 열 길이 이 부분이 헷갈릴 수 있는데, multiArray[1]은 1행을 의미하는 것 같기 때문에 행 길이가 출력되어야 할 것 같은 느낌이 들기 때문이다.. 2021. 7. 1.