< 자바 1 개념정리 >
변수
: 값을 담는 저장공간
입출력 함수
: 출력 (println, printf, print) / 입력 (Scanner)
개발자를 위해 사용한다. 입출력 함수로 오류를 확인해야한다.
제어문
- 조건문
- if: 다양한 조건과 부등호를 사용할 수 있음
- switch : 등호만 사용가능- 반복문
- for: 변수가 있고 변화량이 필요할 때 사용
- while : 변수가 없다.
배열
- 1차원 배열
- 2차원 배열
메서드( 자바의 꽃이다... )
- 이름(소괄호 )
- 단 키워드 뒤에 (소괄호)는 메서드가 아니다.
- 가장 중요한 기능 : 오버로딩!
- 사용 이유 : 반복되는 작업을 효율적으로 쉽게 사용하기 위해 메서드에 담는다.
클래스
- 사용 이유 : 반복되는 필드(메서드와 변수)들을 공통요소를 묶어서 여러 객체로 나누어서 쓰자.
- 클래스를 만드는 순간 기본적으로 생성자가 내부에 존재한다. 클래스 이름과 같지만 (소괄호)가 있고 메서드의 기능과 같다. but return 타입이 없다!
인터페이스는 추상클래스와 주로 함께 쓰인다.
:- 추상적인 내용만 정의하고 있는 클래스로 구체적인 내용은 하위 클래스에서 구현되도록 해놓은 클래스
- 추상클래스는 (부모) 클래스들의 (자식) 공통요소들을 가상화 시켜놓는다.
- 객체화는 가능하나 잘 사용하지 않는다.(목적에 어긋난다.) -> 미구현된 메서드가 있기 때문에 객체화해서 필드로 접근하는건 거의 하지 않는다.
- 부모 추상 클래스의 역할은 단지 자식 클래스를 만들 때 도와주는 역학을 수행하기 위해 존재한다. (다형성)
- 자식 클래스에서 사용할 메서드의 이름만 갖고 있다. (미구현 상태) 즉, {바디}를 갖지 않는다.
- 그 메서드를 추상메서드라고 하며, abstract 키워드가 앞에 붙는다.
- 일반 메서드도 선언 가능하다.
abstract 추상클래스명 { abstract 리턴타입 추상 메서드 (매개변수,...); }
: 안에서 구현되지 않은 상태로 메서드를 만든 후 (미구현) 자식클래스를 통해서 재정의로 구현한다.
:추상 클래스를 고도화 시킨 문법이며, 반드시 추상 메서드와 상수만 선언해야
한다.
- 다른 클래스에서 인터 페이스를 지정할 때에는 implements를 사용한다.
- 지정된 인터페이스가 가지고 있는 추상 메서드들을 반드시 재정의 해야한다.
- 인터페이스는 클래스가 아니다. 일반메서드는 존재할 수 없다.
부모 중에 똑같은 이름의 필드가 있을 수도 있어서 자바에서는 다중상속이 불가능하다.
추상클래스에 일반메서드가 작성이 가능한건 다중상속이 안되기 때문이다.
인터페이스는 이렇게 할 필요가 없다. extends 하나 상속받아서 다중상속 받을 수 없을 때
그 뒤에 implements을 사용해 인터페이스를 사용해서 다중으로 상속을 받으면 된다.
< example >
일등병, 이병, 상병, 병장 클래스를 만들고
군인이면 해야할 일들을 정의만 해놓은 인터페이스를 상속받아 구현해보자.
-> 인터페이스 생성
Soldier
라는 인터페이스를 만들고 안에 미구현된 추상메서드 5개를 정의해 주었다.void work();
: 미구현된 추상 메서드 abstract 가 생략이 되었다.int arms = 2;
변수에는 final static가 생략되어있다.
-> 인터페이스를 상속받는 이등병, 일병, 상병 클래스
- 이등병, 이병, 상병 동일하게
Soldier
인터페이스를 implements해서 구현한다.Soldier
인터페이스가 가진 모든 추상메서들을 강제적으로 구현해야한다.
!! 그런데 병장은 강제적으로 하지 않아도 되는 부분이 생긴다. -> salute 와 work!
그래서 필요한것만 골라서 재정의하는 방법도 알아야한다.
강제성을 부여해주는건 추상메서드인데 걔를 이미 한번 재정의를 했다고 생각해보자.
=> 이 병장을 자식 클래스로써 상속을 받게 되면 강제성이 사라진다.
부모클래스에서 재정의한 애들은 일반메서드이기 때문에 자식메서드에서 골라 사용할 수 있다.
그렇다면 인터페이스를 상속받을 클래스가 필요하다. 그 클래스를 추상클래스로 받자!
Soldier
인터페이스를 상속받는Army
추상 클래스를 만들어서 추상 메서드들을 재정의 해주었다.
Army
의 목적은Soldier
에 있는 강제성있는 애들을 골라서 쓰기 위해서 존재한다.
-> 이러한 목적으로 만들어진 추상클래스는 이름에Adapter
가 붙는다.
이미 인터페이스를 추상클래스에 지정해놓은 Adapter 있다.
=> 원하는거만 골라서 재정의할 수 있다.
- 골라서 사용해야하는 병장클래스에서
Army
Adapter
를 상속받아서 골라서 재정의 하면 된다!!
< 정리 >
병장말고 나머지는 강제성이 부여되서 인터페이스를 사용하고
병장은 골라써야하기 때문에 Adapter를 만들고 Adapter를 상속받는다.
회사에서 자주 쓰는 인터페이스이다. 웹개발, 안드로이드개발에 자주 사용.
- 클래스들의 공통 그룹명으로 인터페이스를 생성하고 아무것도 구현해놓지 않는다. (비어있다)
즉, 그 클래스들이 같은 그룹으로 묶였다는 표시를 하기 위해 사용한다.
- 얘가 Marker Interface가 되는 것이다.