0. 복습
추상 클래스
- 미완성된 클래스
- 추상메서드(미완성된 메서드)가 한개라도 있는 클래스는 반드시 추상 클래스가 되어야 한다
abstract class 클래스명{
abstract 리턴타입 메서드명();
일반 메서드도 선언 가능
}
- 추상 메서드는 상속받은 자식 클래스에서 반드시 재정의하여야 한다
=> 강제성 부여
인터페이스
- 클래스처럼 타입으로 사용
- 기본적으로 상수와 추상 메서드만 선언할 수 있다
1) 인터페이스 선언
interface 인터페이스명 {
public static final 자료형 필드명;
public abstract 리턴타입 메서드명();
}
2) 인터페이스의 특징
- 다중 구현이 가능하다
- 인터페이스는 extends(상속)이 가능하다
- 하나의 클래스에 extends와 implements 동시에 가능
1. 인터페이스 업데이트
(자바 버전 확인)
window + r => cmd(명령 프롬프트)
java -version
: java8버전 이후로 인터페이스에 선언할 수 있는 메서드의 종류가 추가됨
(1) default 메서드 (jdk8)
(2) static 메서드 (jdk8)
(3) private 메서드 (jdk8)
=> 위 3개의 메서드 모두 구현부({}중괄호)를 가질 수 있는 메서드
1) 인터페이스와 모호성(Ambiguity)
- 자바는 모호성을 방지하기 위해 다중 상속을 허용하지 않는다
- 인터페이스는 다중 구현이 가능한데 구현 가능한 메서드가 추가되면서 모호성 문제가 발생되었다
2) 인터페이스의 default 메서드 모호성 해결 방법
- 2개 이상의 인터페이스를 하나의 클래스에서 구현할 때
동일한 선언부를 가진 default 메서드가 존재한다면
모호성이 발생한다
- 모호성을 해결하기 위해 구현 클래스에서 재정의를 한다
2. 프로그래밍 패러다임
- 프로그램을 설계하고 구현하는 방법론이나 스타일을 "프로그래밍 패러다임"이라고 한다
- 쉽게 말하면 방법론이다(어떻게, 어떤 구조로 프로그램을 만들 것인가?)
- 대표적으로 객체 지향 프로그래밍, 절차적 프로그래밍, 함수형 프로그래밍, 선언형 프로그래밍이 있다
1) 프로그래밍 패러다임의 종류
: 요리 방식으로
(1) 객체 지향 프로그래밍 :
요리 재료(데이터)와 조리법(메서드)을 하나의 레시피(클래스)로 묶어 요리한다
ex) 피자 레시피(클래스)에는 재료(속성)와 만드는 방법(메서드)이 모두 포함되어 있다
(2) 절차적 프로그래밍 :
요리 과정을 순서대로 나열하여 진행
ex) 1. 재료 준비 -> 2. 볶기 -> 3. 양념 넣기 -> 4. 접시 담기
(3) 함수형 프로그래밍 :
- 각 요리 단계를 독립적인 함수로 만들고, 이들을 조합하여 요리한다
ex) 채소 썰기(당근) -> 볶기(썬 당근) -> 양념하기(볶은 당근)
- 함수형은 선언형의 한 종류(선언형의 큰 범주에 속하는 게 함수형)
(4) 선언형 프로그래밍 :
원하는 요리의 최종 결과만 명시하고, 과정은 시스템에 맡김(과정을 생각하지 않음)
ex) "야채볶음을 만들어줘"(구체적인 과정은 명시하지 않음)
- 각 요리 방식(패러다임)은 상황과 목적에 따라 장단점이 있으며
- 요리사(프로그래머)는 상황에 맞는 적절한 방식을 선택해야 한다
2) 객체 지향 프로그래밍(Object-Oriented-Programming, OOP)
- 프로그램을 객체들의 모음으로 설계하고 구현하는 프로그래밍 방법론
=> 쉽게 말해 객체가 주인공
- 자바 객체 지향 프로그래밍 언어 => 객체 지향에 특화된 언어
(1) OOP의 주요 개념
(1-1) 클래스와 객체를 사용
(1-2) 캡슐화
- 데이터와 데이터를 처리하는 메서드를 하나로 묶음
(클래스는 필드와 연관된 메서드를 가짐)
- 데이터 은닉을 통해 객체 내부 구현을 숨김
(접근 제한자를 활용하여 외부에 공개되는 멤버를 제한)
(1-3) 상속
- 기존 클래스의 속성과 기능을 새로운 클래스가 물려받아 재사용
- 코드 재사용성을 높이고 클래스간의 관계를 구현
(1-4) 다형성
- 하나의 것이 여러 형태를 가지는 성질
- 하나의 이름의 메서드가 다양한 형태로 동작(오버로딩, 오버라이딩)
- 하나의 참조 변수로 여러 객체를 참조(부모 타입 변수로 자식 객체를 가리킴)
(1-5) 추상화
- 복잡한 개념에서 핵심 개념을 추출함
- 여러 클래스에서 공통적으로 사용하는 메서드는 인터페이스나 추상 클래스로 추출해서 구현
3. Java API
라이브러리
- 특정 기능을 수행하기 위해 만들어 놓은 코드의 집합(클래스, 인터페이스 등으로 구성됨)
- 라이브러리는 패키지 단위로 구성됨(1개 이상의 패키지로 구성됨)
- 개발자가 모든 것을 바닥부터 만들 수 없음(시간이 오래걸림)
그래서 자주 사용되는 기능들을 라이브러리로 만들어 제공함
- 라이브러리는 개발자가 코드를 작성할 때 가져다 사용하는 도구의 역할을 함
1) Java API(Application Programming Interface) : 표준 라이브러리, 내장 라이브러리
- java에서 제공된 기본 내장 라이브러리, JDK에 포함됨
(자바 설치하면 기본적으로 내장되어 있음)
- 'System.out.println()', 'sc.nextInt()' 같은 것들이 모두 Java API에서 제공하는 것들
- 일반적으로 API 또는 Open API 라고 부르는 것들과는 다른 개념임
2) 외부라이브러리(서드파티 라이브러리)
- java에서 내장된 라이브러리가 아닌 다른 외부 개발자들이 만들어 제공하는 라이브러리
- 다른 개발자들이 만들어 .jar 파일로 배포하면 우리가 받아서 사용할 수 있다
3) 이클립스 JAR 만들기
(1) JAR파일 배포
배포할 클래스 또는 패키지 우클릭 > Export > JAVA > JAR file > 경로 선택 > Export Java source .... 체크 > finish
(2) 외부 JAR 파일 추가
배포한 JAR 파일 다운받기 > 프로젝트 우클릭 > Build Path > Configure Bulid Path > Libraries 탭 > Add External Jars > 저장된 .jar 파일 추가 > Apply > Orders and Exports 탭 > jar 파일 Select > Apply and Close
4. Object 클래스
- 모든 클래스의 최상위 부모 클래스이다
- 상속을 받지 않으면 자동으로 Object가 상속된다
1) Object 클래스의 주요 메서드
(1) toString()
객체를 출력했을 때 나타낼 값을 정의한다
기본구현: 클래스명@16진수해쉬코드 -> 참조값
우리가 재정의하여 원하는 값을 출력하도록 만들 수 있다
(주로 객체 필드를 출력하는 목적으로 재정의)
(2) equals()
(3) hashCode()