1. 배열(array)이란?
- 같은 타입의 여러변수를 하나의 묶음으로 다루는 것.
2. 배열의 선언
- 원하는 타입의 변수를 선언하고 변수 또는 타입에 배열임을 의미하는 []를 붙여주면 된다.
ex) 변수타입[] 변수명;
변수타입 변수명[];
3. 배열의 생성
- 배열을 선언한 다음에는 배열을 생성해야 된다.
- 배열을 생성할때는 연산자 new와 함께 배열의 타입과 크기를 지정해 주어야 한다.
ex) int[] score = new int[3];
int[] score = new int[]{10,20,30};
int[] score = {10,20,30};
1. 정렬(sort)
- 어떤 데이터를 빠르고 쉽게 찾기 위해 일정한 순서대로 데이터를 가지런히 나열하는 작업
- 버블정렬, 선택정렬, 삽입정렬
2. 버블정렬
- 인접한 데이터간에 교환이 계속해서 일어나면서 정렬이 이루어진다.
- 회전이 진행됨에 따라 가장 큰수가 가장 뒤에 확정된다.
2. 선택정렬(select sort)
- 정렬을 대상으로 최소값을 찾아서 기준과 교체하는 방식이다.
1. 다차원 배열
- 자바에서는 1차원 배열뿐만 아니라 2차원 이상의 다차원 배열도 허용한다.
- 선언
int[][] arr;
int[] arr[];
int arr[][];
1. 상속(~은 ~이다.)
- 기존의 클래스를 재사용하여 새로운 클래스를 작성한다.
- 적은양의 코드로 새로운 클래스를 작성할수 있다.
- 새로작성하고자 하는 클래스의 뒤에 상속받고자 하는 클래스의 이름을
키워드 'extends'와 함께 써주기만 하면된다.
class Ambulance extends Car{
}
- 상속해주는 클래스를 '조상클래스', 상속받는 클래스는 '자손클래스'라 한다.
: 조상클래스 - 부모클래스, 상위클래스, 기반클래스
: 자손클래스 - 자식클래스, 하위클래스, 파생된클래스
- 멤버만 상속된다.
- 자손클래스의 멤버의 개수는 조상클래스보다 항상 같거나 많다.
2. 포함(~은 ~을 포함하고 있다.)
- 상속이외에 클래스를 재사용하는 방법이다.
- 한 클래스의 멤버변수로 다른 클래스를 선언하는 방법이다.
3. 단일상속
- 자바에서는 단일상속(두개이상은 불가능)만 가능하다.
class TVCR extends Tv, VCR{
}
- TV와 VCR에 동일명의 멤버가 있다면 어떤것을 상속받을지 결정할수 없다.
- VCR의 method명을 변경한다면 VCR method를 호출하던 모든부분을 수정해주어야 한다.
- 클래스간의 관계가 보다 명확해지고 코드를 더욱 신뢰할수 있게된다.
4. Object클래스 (모든 클래스의 조상)
- 모든 클래스 상속계층도의 가장 위에 위치하는 조상클래스이다.
- 다른클래스로부터 상속받지 않는 모든 클래스는 Object클래스를 상속 받는다.
class A extends Object{
}
- 모든 클래스는 Object클래스를 상속받는다.
- toString(), .eqals()
5. 오버라이드(overriding)
- 조상클래스로부터 상속받은 메서드를 재정의하는 것.
- 오버라이딩이 성립하기 위한 조건 : 선언부가 동일해야 한다.
: 자손클래스에서 오버라이딩하는 메서드는 조상클래스의
메서드의 명칭은 같아야 한다.
매개변수의 개수와 타입이 같아야 한다.
반환타입이 같아야 한다.
접근제어자를 조상클래스의 범위보다 좁은범위로 설정할 수 없다.
예외는 조상클래스의 메서드보다 많이 선언할수 없다.
클래스메서드를 인스턴스 메서드로 또는 그반대로 변경할 수 없다.
public static void method() throws SQLException{
}
6. super.
- this. 지역변수와 인스턴스변수의 명칭이 같을때 구분하기 위해 사용
- super. 자손의 멤버와 부모의 멤버의 명칭이 같을때 구분하기 위해 사용
7. super()
- this() : 같은 클래스내의 다른생성자를 호출할때 사용
- super(): 부모클래스의 생성자를 호출할때 사용한다.
8. 제어자
- 클래스, 메서드, 변수의 선언부에 사용된다.
- 접근제어자와 그외 제어자
- 접근제어자 : public, protected, default, private
그외제어자 : static, final, abstract, native...
- 접근제어자를 가장 왼쪽에 많이 둔다.
- static(클래스의, 공통의)
: 멤버변수, 메서드, 초기화블럭에 사용가능
: 클래스변수
모든인스턴스에서 공통적으로 사용
인스턴스 생성 없이 '클래스명.변수명'으로 호출할수 있다.
클래스가 메모리에 로드될때 같이 생성된다.
: 클래스메서드
클래스메서드 내에서는 인스턴스 멤버를 사용할 수 없다.
- final(마지막의, 변경할수 없는)
: 변수에 사용시 값을 변경할수 없는 상수가 된다.
: 메서드에 사용시 오버라이드 할수 없다.
: 클래스에 사용시 부모클래스가 될수 없다.
- abstract(추상의, 미완성의)
: 메서드와 클래스에만 사용가능
9. 접근제어자
- public : 접근제한이 없다.
- protected : 같은패키지 + 다른패키지의 자손클래스
- default : 같은 패키지 내에서 사용가능
- private : 같은 클래스내에서만 사용가능
- 클래스에는 public, default
10. 캡슐화
- 접근제어자를 사용하는 이유
: 외부로부터 데이터를 보호하기 위해
: 외부에는 불필요한, 내부적으로 사용되는 부분을 감추기 위해
11. 생성자의 접근제어자
- 인스턴스의 생성을 제한할 수 있다.
- 생성자의 접근제어자를 private으로 지정
: 외부에서는 생성자에 접근할수 없으므로 인스턴스를 생성할수 없다.
: 다른클래스의 조상이 될수 없다.
: final을 붙여서 상속할수 없는 클래스임을 알리는 것이 좋다.
12. 다형성 (polymorphism)
- 여러가지 형태를 가질수 있는 능력
- 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있다.
- 부모타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있다.
자손타입의 참조변수로 부모타입의 인스턴스를 참조할 수 없다.
13. 참조변수의 형변환
- 서로 상속관계에 있는 클래스만 형변환이 가능하다.
- 자손타입 -> 부모타입(up-casting) => 형변환 생략 가능
부모타입 -> 자손타입(down-casting)=> 형변환 생략 불가
14. instanceof
- 참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 사용
- 결과가 true인 경우 참조변수가 검사한 타입으로 형변환이 가능하다.
- 클래스메서드는 클래스변수처럼 참조변수의 타입에 영향을 받는다.
- 참조변수의 타입에 영향을 받지 않는 것은 인스턴스메서드 뿐이다.
15. 매개변수의 다형성
- 참조변수의 다형적인 특징은 메서드의 메게변수에도 적용된다.
16. 여러가지 객체배열 - Vector
- 배열을 사용할경우 전체 크기를 한번 정하면 확장할수 없다.
이를 Vector클래스를 이용하여 해결할 수 있다.
- 동적으로 크기가 관리되는 객체 배열 이라고 할수 있다.
Vector() : 10개의 객체를 저장할수 있는 Vector인스턴스를 생성한다.
add() : Vector에 객체를 추가한다.
remove() : 객체를 하나를 삭제한다.
size() : Vector에 들어있는 객체의 수량
isEmpty(): Vector가 비어있는 검사한다.
get(int index):index번째 방의 객체를 반환한다.
17. 추상클래스(abstract class)
- 추상메서드
: 메서드는 선언부와 구현부로 구성되어 있다.
: 선언부만 작성되고 구현부는 작성되지 않을 메서드를 추상메서드라 한다.
abstract 리턴타입 메서드명();
- 추상클래스 : 추상메서드를 포함하고 있는 클래스는 추상 클래스가 된다.
- 추상클래스를 상속받은 자손 클래스는 추상클래스가 되어야 한다.
상속받은 추상메서드를 override통하여 구현부를 작성한다면 일반 클래스가 된다.
18. 인터페이스( interface )
- 일종의 추상클래스이지만 추상메서드와 상수만을 멤버로 가진다.
- 인터페이스의 작성
interface 인터페이스명{
public static final 변수타입 변수명 = 값;
public abstract 반환타입 메서드명(변수타입 변수명...);
}
: 모든 멤버변수는 public static final이어야 한다. 생략가능
: 모든 메서드는 public abstract이어야 한다. 생략가능
- 인터페이스의 상속
: 인터페이스는 인터페이스만 상속이 가능하다.
( 인터페이스가 클래스를 상속받으면 인터페이스가 아니게 된다.)
: 클래스와 달리 다중상속이 가능하다.
: 인터페이스는 클래스와 달리 Object와 같은 최고 조상은 없다.
- 인터페이스의 구현
: 자체로는 인스턴스를 생성할수 없다.
: 인터페이스에 정의된 추상메서드의 몸통을 만들어주는 클래스가 작성되어야 한다.
: 클래스의 확장(extends), 인터페이스 구현(implements)
: 인터페이스의 일부 메서드만 구현하였다면 해당 클래스는 추상클래스가 되어야 한다.
: ~able (~을 할수 있는) Movable
IMember, IMemberImpl
- 인터페이스를 이용한 다형성
: 인터페이스타입의 참조변수로 이를 구현한 클래스의 인스턴스를 참조할수 있다.
- 인터페이스의 장점
: 개발시간을 단축할수 있다.
: 표준화가 가능하다.
: 서로 관계가 없는 클래스들에게 관계를 맺어 줄 수 있다.
: 독립적인 프로그래밍이 가능하다.
: 예제 7-26
- 인터페이스의 이해
: 클래스를 사용하는쪽(user)과 클래스를 제공하는 쪽(provider)이 있다.
: 메서드를 사용하는 쪽에서는 메서드의 선언부만 알면된다.
A - I - B
19. 내부 클래스(inner class)
- 클래스 내에 선언된 클래스이다.
- 서로쉽게 접근할수 있고 외부에는 불필요한 클래스를 감춤으로 복잡성을 줄일 수 있다.
- static 클래스
: 외부클래스의 클래스멤버들과 관련된 작업을 수행한다. 메서드와 관련된 작업을 수행
- 인스턴스클래스
: 외부클래스의 인스턴스멤버들과 관련된 작업을 수행한다.
- 지역클래스
: 외부클래스의 메서드와 초기화 블럭안에 선언되며 메서드가 종료시 삭제된다.
- 익명클래스
: 클래스의 선언과 객체생성을 동시에 하는 이름없는 클래스(일회용)
1. collection Framework
- collection은 다수의 데이터(데이터 그룹)
Framework는 표준화된 프로그래밍 방식을 의미
2. 핵심 interface
- List
: 순서가 있다.
: 데이터의 중복을 허용한다.
: ArrayList, LinkedList, Stack, Vector등..
: 대기자 명단
- Set
: 순서가 없다.
: 데이터의 중복을 비허용한다.
: HashSet, TreeSet..
: 집합
- Map
: key와 value의 쌍으로 이루어져 있다.
: 순서가 없다.
: 키는 중복을 비허용하고, value는 중복을 허용한다
: HashMap, TreeMap, HashTable, Properties..
: 우편번호, 지역번호
3. List
- Vector와 ArrayList
: Vector의 경우 동기화를 보장한다.
: Object배열을 이용해서 데이터를 순차적으로 저장한다.
- LinkedList
: List의 단점을 보완하기 위해 만들어짐
: 자신의 데이터와 다음 요소의 주소값으로 구성되어 있다.
- DoubleLinkedList
: 자신의 데이터와 다음요소의 주소값 이전요소의 주소값으로 구성되어 있다.
4. Stack과 Queue
- Stack : LIFO,FILO
: 저장 push()
: 추출 pop()
: 맨위의 객체 peek()
: 주어진 객체 찾기 search()
- Queue : FIFO
: 저장 offer()
: 추출 poll()
5. Set
- Set인터페이스를 구현한 구현체중 대표는 HashSet이다.
- add메서드나 addAll메서드를 사용하는데 이미 저장된 요소가 있다면
중복등록에 실패하게 된다.
6. Map
- key와 value로 이루어져 있다.
- HashMap, HashTable
- Map<Object,Object> 이지만 일반적으로 key의 경우는 String으로 사용한다.
- key의 경우 유일해야 한다.
1. 정규식이란?
- 텍스트 데이터중에서 원하는 조건과 일치하는 문자열을 찾아내기 위해
사용하는 것.
- 정규식의 구성
: Pattern이라는 클래스를 이용하여 정규식을 정의한다.
: Matcher클래스를 이용하여 Pattern과 데이터를 비교하는 역할을 한다.
1. java.lang 패키지
- java.lang패키지는 자바프로그래밍에 기본이 되는 클래스들을 포함하고 있다.
ex) String, System ....
2. Object클래스
- Object클래스는 멤버변수는 없이 11개의 메서드로 이루어져 있다.
- boolean equals(Object obj)
: 매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean값으로 돌려준다.
: 참조변수에 저장된 주소값이 같은지를 판단할수 밖에 없다.
: 주소값이 아닌 멤버변수가 가지고 있는 값을 비교하기 위해서는 equals메서드를
오버라이드 하면 된다.
: equals메서드가 오버라이드 되어있는 클래스들
=> String, Date, File, wrapper클래스
- hashCode() - 10진수로 이루어짐
: 객체의 주소를 이용하여 해시코드를 반환한다.
: String클래스는 문자열의 내용이 같으면 같은 해시코드를 반환한다.
- toString()
: 인스턴스에 대한 정보를 문자열로 제공할 목적으로 작성
: 기본적인 toString()
return getClass().getName()+"@"+Integer.toHexString(hashCode());
- clone()
: 얕은복사
: 자신을 복제하여 새로운 인스턴스를 생성한다.
: 단순히 인스턴스의 값만을 복사한다.
: 객체가 참조하고 있는 객체까지 복제하지 않는다.
- getClass()
: 자신이 속한 클래스의 Class객체를 반환하는 메서드
: class로 부터 객체를 얻는 방법
1) 생성된 객체로 부터 얻는 방법
Class obj = new Card().getClass();
2) 클래스 리터럴로부터 얻는 방법
Class obj = Card.class;
3) 클래스의 이름으로 부터 얻는 방법
Class obj = Class.forName("Card");
3. String클래스
- 다른언어에서는 문자열을 char형 배열로 다루었으나 자바에서는 문자열을
위한 클래스가 존재한다.
: 문자열을 합치게 될때 새로운 문자열을 가진 String인스턴스가 생성된다.
: 문자열을 합칠때는 StringBuffer클래스를 사용한다.
- 문자열의 비교
: 문자열 리터럴을 지정하는 방식, String클래스의 생성자를 사용하는 방법
- 문자 인코딩 변환
: 한글 윈도우의 경우 인코딩 방식으로 CP949지만 우리는 UTF-8을 사용한다.
- String format
: 기본형을 String형으로 변환
1) 빈 문자열을 더하는 방식
int a = 10;
String s = a+"";
2) valueOf()
int a = 10;
String s = String.valueOf(a);
: String을 기본형값으로 변환
1) wrapper클래스를 이용하는 방법
String s = "123";
int c = Integer.parseInt(s);
int c = Integer.valueOf(s);
2) String을 기본형으로 변환시 결과는 10진수 이다.
String s = "200";
int a = Integer.parseInt(s,16);
4. StringBuffer, StringBuilder클래스
- String클래스는 인스턴스를 생헝할때 지정된 문자열을 변경할수 없다.
- 문자열을 변경하기 위해서 StringBuffer클래스를 이용한다.
5. Math클래스
6. wrapper클래스
- 객체지향의 개념은 모든것을 객체로 다루어야 한다.
- 8가지 기본형은 객체로 다루지 않는다.
- 때로는 기본형 변수도 어쩔수 없이 객체로 다루어야 하는 경우가 있다.
: 매개변수로 객체를 요구할때
: 기본형이 아닌 객체로 저장되어야 할때
기본형타입 | 객체타입
boolean | Boolean
char | Character ***
byte | Byte
short | Short
int | Integer ***
long | Long
float | Float
double | Double
void method(Object obj){
Vector
v = new Vector<>();
}
- 오토박싱 : 기본형 값을 wrapper클래스의 객체로 변환해주는 것
- 언박싱 : wrapper클래스의 객체를 기본형 값으로 변환해주는 것
7. StringTokenizer클래스
- 긴 문자열을 지정된 구분자를 기준으로 토큰(token)이라는 여러개의 무자열로
잘라내는 데 사용된다.
- 단 한 문자의 구분자만 사용가능
1. 프로그램 오류
- 프로그램이 실행중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우
- 컴파일에러 : 컴파일 할때 발생하는 에러
- 런타임에러 : 실행시에 발생하는 에러
- 에러는 프로그램 코드에 의해서 수습될수 없는 심각한 오류
예외는 프로그램 코드에 의해서 수습될수 있는 경미한 오류
2. RuntimeException클래스와 그외 클래스들
- 모든 예외의 최고조상은 Exception이다.
- RuntimeException클래스들은 주로 프로그래머의 실수에 의해서 발생하는 예외
ex) IndexOutOfBoundsException, NullPointException
- Exception클래스들은 주로 외부의 영향으로 발생할수 있는 것
ex) FileNotFoundExeption, ClassNotFoundExeption
3. 예외처리( try-catch )
- 프로그램 실행시 발생할수 있는 예외의 발생에 대비한 코드를 작성하는 것.
- 작성방법
try{
예외가 발생할 가능성이 있는 문장
}catch(Exception1 e){
Exception1발생했을때 대비할 코드
}catch(Exception2 e){
Exception2발생했을때 대비할 코드
}catch(Exception3 e){
Exception3발생했을때 대비할 코드
}
4. 예외발생시키기
- 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든다.
ManException me = new ManException();
- 키워드 throw를 이용해서 예외를 발생시킨다.
throw me;
합치면
throw new ManException();
5. 예외 던지기
- 매서드 예외 선언하기
: 메서드의 선언부에 throws를 이용해서 메서드내에 발생하는 모든 예외를 적어주기만
하면된다.
: 예외의 처리는 메서드를 호출한 쪽에서 처리한다.
6. finally
- try-catch블럭의 예외발생에 상관없이 실행되어야 하는 코드를 포함하고 있다.
try{
예외가 발생할 가능성이 있는 문장
}catch(Exception e){
예외가 발생하였을때 처리할 문장
}finally{
무저건 마지막에 수행될 문장
}
- try -> finally
try -> catch -> finally
// 컴파일러가 예외처리를 강제하지 않는 경우
//1. RuntimeExeption과 그 자식들
//2. Error와 그자손들
// 이런 것들을 'unchecked예외'
*
*
*/
}
}
'it공부 > Java' 카테고리의 다른 글
자바 [Eclipse] 이클립스 단축키 정리모음 (0) | 2020.07.05 |
---|---|
JAVA 자바 개념정리 (0) | 2020.07.05 |
JAVA 수업개념 요점 정리( 1 ) (0) | 2020.07.05 |
Thread 와 Array 를 이용한 예제 (0) | 2020.07.05 |
for while 반복문 예제 (0) | 2020.07.05 |