본문 바로가기

JAVA38

[JAVA] 컬렉션 프레임워크 (Collection Framework) 컬렉션 프레임워크 (Collection Fremework)- 자료구조를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 관련된 인터페이스와 클래스들의 모음집-> 자료구조 종류의 형태들을 자바 클래스로 구현한 모음집자바에서는 저 모음집을 java.util 패키지에 포함시켜 놓았다.주요 인터페이스로는 List, Set, Map이 있다.List와 Set은 객체를 추가,삭제하는 방법에 있어 공통점이 있어 공통된 메소드만 따로 모아서 Collection 인터페이스로 정의Map은 키와 값을 하나의 쌍으로 묶어서 관리하는 구조Collection Interface인터페이스 분류특징구현 클래스List- 순서를 유지하고 저장- 중복 저장 가능ArrayList, Vector, LinkedListSet- 순서를 .. 2024. 11. 22.
[JAVA] 제네릭(Generic) 제네릭 (Generic)- 클래스 내부에서 사용할 데이터 타입을 실제 사용할 때, 외부에서 지정하는 기법- 객체 별로 다른 타입의 자료가 저장될 수 있도록 해준다.public class Box { public T content;}-> Box 객체 생성 시 , 파라미터 T를 외부에서 원하는 타입으로 지정하겠다는 의미Box box = new Box();-> 타입 라파미터 T에 String을 할당, 구체화시킨다.  제네릭을 사용하는 이유?타입을 유연하게 처리 가능잘못된 타입 사용으로 발생할 수 있는 런타임 타입 에러를 컴파일 과정에서 검출 가능// 제네릭 사용 없이List myList = new List();myList.add(new Integer(5));Integer x = (Integer) myList... 2024. 11. 22.
[JAVA(자바)] 오류 Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0+ 해결 방법 백준 1541번 잃어버린 괄호 문제를 풀다가 split()을 사용하는 부분에서 아래와 같이 오류 java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0+ 가 발생했다. "+"를 기준으로 잘라서 문자열 배열에 저장하는 부분에서 에러 발생 원인 String[] num = str[i].split("+"); split()은 구분할 기준 문자열을 정규표현식으로 받는다. -> 예약어로 사용되는 일부 특수문자(?, +, *, (, ), [, ], {, }, \)를 split(), replaceAll() 등을 사용할 때 기준으로 하면 인식할 수 없다. 해결방법 특수기호를 인식할 수 있도록 "+" 대신 "\\+"나 "[+]"로 입력.. 2023. 2. 28.
[JAVA(자바)] 인터페이스 (feat. 인터페이스와 추상클래스 비교) 인터페이스의 정의는 사물과 사물 등 두 장치를 연결해주는 매개체를 말한다. 자바에서는 이 사물을 객체라고 생각하고 보면 된다. 인터페이스 객체들을 연결해주는 역할 (객체a와 객체b가 있을 때, a가 인터페이스 메소드 호출을 통해 b메소드 호출의 결과를 받아올 수 있다.) interface 키워드를 사용한다. 객체를 생성할 수 없고, 따라서 생성자도 가질 수 없다. (추상 메소드를 가지고 있어 미완성인 코드가 존재할 수 있기 때문) 클래스처럼 접근 제한자로 public , defalut만 사용할 수 있다. 클래스와 달리 상수필드와 추상메소드, defalut 메소드, private메소드 , public 메소드만 가질 수 있다. 다중 상속이 가능하다. (껍데기만 존재하는 것과 같아 클래스와 달리 다중상속으로 .. 2023. 1. 22.
[JAVA(자바)] 배열 복사, 배열 특정 구간 복사(copyOf, copyOfRange) 원본 배열을 복사하는 것으로 배열이 null이 아닌 상태여야 한다. 배열 복사 copyOf(배열, int length): 원본 배열의 처음부터 length길이까지의 배열을 복사한다. length가 배열의 길이보다 클 경우 -> 초과 범위는 배열 타입의 기본값으로 채워서 복사한다. length가 0보다 작은 경우 -> NegativeArraySizeException 발생 배열 특정 구간 복사 copyOfRange(배열, int index1, int index2): 원본 배열의 인덱스 index1 ~ index2-1 구간의 배열을 복사한다. index1>index2 -> IllegalArgumentException 발생 index1 초과 범위는 배열 타입의 기본값으로 채워서 복사한다. 사용예시 - Strin.. 2023. 1. 21.
[JAVA(자바)] 추상 클래스(abstract)와 봉인된 클래스(sealed) 추상클래스 추상 메소드를 포함하는 클래스 또는 추상메소드가 없지만 abstract로 선언한 클래스 클래스 선언시 반드시 abstract 키워드를 사용해서 선언해주어야 한다. 실체 클래스의 부모 역할로 추상클래스에는 실체 클래스의 공통된 필드나 메소드를 가지고 있고, 실체 클래스에서 이를 오버라이딩해 실행 가능한 코드로 작성한다. 즉, 미완성인 코드가 존재할 수 있다. -> 객체 생성 불가 실체 클래스에서 실행 가능한 코드로 구현할 때만 사용하는 게 목적이므로 extands 뒤에만 올 수 있다. 자식클래스에서 객체생성시 super()로 부모클래스의 생성자를 호출하기 때문에, 생성자도 있어야 한다. abstract class 클래스명 { //추상클래스 선언 } // 1. 추상메소드를 포함하는 추상클래스 ab.. 2023. 1. 20.
[JAVA(자바)] 업캐스팅과 다운캐스팅 (feat. 다형성, instanceof) 자바에서 클래스에서도 타입 변환(casting)이 이루어진다. 클래스에 대한 캐스팅은 업캐스팅과 다운캐스팅으로 나뉜다. 업캐스팅 (자동타입 변환) 자식클래스의 객체는 부모 클래스의 속성을 모두 상속받기 때문에, 부모의 객체로도 취급할 수 있다. (학생은 사람이다.) 업캐스팅된 자식타입 변수는 부모타입 객체의 필드,메소드만 접근할 수 있다. 예외로 메소드 오버라이딩이 된 메소드가 있다면 자식클래스의 메소드가 호출된다. 자동타입 변환으로 캐스팅 연산자를 생략해도 된다. ex) Person p = (Person)s; (Perosn)이 캐스팅 연산자 예를 들어 Person 클래스를 상속받은 Student 클래스가 있다면 업캐스팅은 아래처럼 작성할 수 있다. Student s = new Student(); Per.. 2023. 1. 19.
[JAVA(자바)] 메소드 오버라이딩 (feat. 오버로딩) 메소드 오버라이딩(메소드 재정의) 상속받은 부모 클래스의 메소드를 자식클래스에서 재정의해서 사용하는 것 오버라이딩되면 부모 클래스의 메소드는 무시되고, 자식 클래스의 메소드만 실행된다. (=동적 바인딩이라고도 한다.) 메소드 오버라이딩 작성 부모 메소드의 이름, 리턴타입, 매개변수가 동일해야 한다. 접근을 막는 범위를 더 작게 변경할 수 없다. ex) publc -> private 변경 못함 static, private, final로 선언된 메소드는 오버라이딩 할 수 없다. 부모 메소드에 없는 예외를 throw할 수 없다. @Override - 컴파일시에 오버라이딩 제대로 되었는 지 확인하라는 의미이다. - 잘못 되었다면 컴파일 에러 출력하는 어노테이션 - 생략가능 class Red { public vo.. 2023. 1. 18.
[JAVA(자바)] 상속과 생성자(super()) 상속(Inheritance) - 자바에서는 부모 클래스의 필드와 메소드를 자식 클래스가 물려받는 것을 말한다. - 클래스 사이의 상속이기 때문에 자식 객체 생성 시, 자식 클래스와 부모 클래스에 있는 모든 멤버(필드, 메소드)를 가지고 생성된다. 상속 선언 public class 자식클래스 extends 부모클래스 { ... } 상속 필요성 - 중복되는 코드의 작성을 줄일 수 있다. -> 클래스의 구현이 간결해짐 - 부모 클래스를 수정하면 자동으로 자식 클래스에서 수정된다. -> 클래스 관리가 용이해짐 상속 특징 클래스의 다중 상속을 허용하지 않는다. (extends 키워드 뒤에는 하나의 클래스만 올 수 있음) 상속의 횟수에 제한이 없다. 계층 구조의 최상위에는 java.lang.Object 클래스가 있.. 2023. 1. 17.
[JAVA(자바)] 접근 제한자(public, protected, default, private) 객체의다른 클래스의 접근 허용 범위를 제한하기 위해(중요한 필드나 메소드의 외부 노출을 막기 위해) 접근 제한자를 사용한다. 접근 제한자(Access Modifier)에는 public, protected, private가 있으며, default는 접근 제한자를 지정하지 않은 경우를 말한다. 접근 제한자 사용 대상 클래스 : public, default 필드 : public, protected, default, private (필드를 읽고 변경할 수 있는 범위) 생성자 : public, protected, default, private (생성자 호출 가능 범위는 객체 생성 가능 범위를 의미) 메소드 : public, protected, default, private (메소드 호출 가능 범위) 공개 범위는 .. 2023. 1. 16.