1. 자바(Java)란 무엇인가?✅
1995년에 발표된 자바는 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이다. 처음에는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발했지만 현재는 웹 애플리케이션과 모바일 앱 개발에 가장 많이 사용하는 언어이다.
2. 자바의 특징 7가지✅
2-1. 객체 지향 언어
- 절차 지향 언어와 다르게 하나의 기능을 객체형태로 만들어 객체들을 결합하여 하나의 프로그램을 만드는 것.
위 내용은 컴퓨터로 예를 들자면 아래와 같다.
· 컴퓨터 = 완성된 프로그램
· 메모리,HDD,CPU등 = 객체
- '자바'는 객체 지향 언어의 대표적인 언어이다.
2-2 인터프리터 언어
- 자바는 컴파일 언어인 동시에 인터프리터 언어이다.
- 자바는 텍스트 소스를 컴파일하여 클래스파일로 만든다음 자바 런타임이 클래스 파일을 인터프리트 하면서 실행된다.
2-3 독립적인 플랫폼
- 어떠한 운영체제라도 독립적으로 자바언어를 사용할 수 있다.
- 그 이유는 JVM에 의해서 실행되기 때문이다.
2-4 자동 메모리 관리
- 자바는 개발자가 직접 메모리에 접근할 수 없으며 자바가 직접 관리한다.
- 객체 생성시 자동적으로 메모리 영역을 찾아서 할당. 또한 사용하지 않는 객체를 제거시켜 준다.
- C언어는 개발자가 직접 코드를 작성해야 했지만 자바는 이러한 작업을 자동으로 해주기 때문에 메모리 관리에 신경쓰지 않아도 된다.
2-5 멀티 쓰레딩 지원
- 하나의 프로그램 단위가 동일한 쓰레드를 동시에 수행할 수 있다.
- 운영체제마다 멀티 쓰레드를 이용하는 API가 다르나 자바의 경우는 자바 API를 사용하기 때문에 쉽게 구현 가능하다.
2-6 동적이다
- 객체간의 상호 작용을 정의하기 때문에 필요하지 않는 객체는 생성되지 않고, 필요한 객체만 생성하여 사용한다.
- 오류가 발생하면 발생한 오류의 클래스만 수정하면 되므로 전체를 수정할 필요가 없다. 즉 유지보수를 쉽고 빠르게 진행할 수 있다.
2-7 안전하고 강력하다
- 모든 메모리 접근을 자바 시스템이 관리하기 떄문에 시스템 붕괴의 우려가 없다.
- 자바는 포인터 개념이 없고 유형 정의가 강고하여 실행 전에 클래스 파일을 이요한 프로그램 검사가 가능하다.
3. 객체 지향 4대 특성✅
3-1. 캡슐화(Encapsulation)
- 관련된 기능과 관련된 데이터를 하나의 클래스로 묶어서 사용하는 법
- 정보 은익 (접근에 제한을 설정)
- public (+) : 클래스 내부/외부에서 접근이 가능하다.
- protected (#) : 해당 객체를 상속받은 객체 내부에서 접근할 수 있다. 단순 인스턴스에선 접근할 수 없다.
- default : 동일한 패키지 내의 객체에서 인스턴스를 생성하여 접근할 수 있다.
- private (-) : 클래스 내부에서는 접근이 가능하나 외부에서 접근할 수 없다.
3-2. 상속(Inheritance)
- 재사용 (extends) , 부모 클래스에서 선언한 변수나 메소드를 자식 클래스에서 직접 만들지 않고 상속받음으로 자식 클래스가 부모 클래스의 변수나 메소드를 사용할 수 있는 기능
- 자바의 모든 class는 Object 클래스의 후손이다.
- 부모클래스의 생성자, 초기화 블록은 상속이 되지 않는다.
- 부모의 private 멤버는 상속은 되지만 직접 접근 불가하다.
- 자바는 단일 상속만 지원한다.
- Is a (상속관계) : 자식 클래스는 (하나의) 부모 클래스이다.
- Has a (연관관계) : 한 클래스 멤버벼수로 다른 클래스 타입의 참조변수를 선언한다.
3-3. 추상화 (Abstraction)
- 객체에서 공통된 속성과 행위를 추출한다.
- 유연성을 확보하기 위해 구체적인 것은 제거한다는 의미이다.
- 프로그램에서 필요한 공통점을 추출하고, 불필요한 공통점을 제거하는 과정이다.
3-4. 다형성 (Polymorphism)
- 오버라이딩 (Overriding)
+ 관련된 기능과 관련된 데이터를 하나의 클래스로 묶어서 사용하는 법
+ 메소드 헤드라인 위에 반드시 Annotation, @Override 표시
+ 부모 클래스와 자식 클래스의 메소드를 비교하여 메소드 이름이 동일하거나 매개변수의 개수,타입,순서 동일하다면 메소드를 재정의 할 수 있다. (단, 접근제어자 private을 사용하면 오버라이딩 되지 않음)
- 오버로딩 (Overloading)
+ 한 클래스 내에서 같은 이름의 메소드를 여러개 정의하는 것
+ 같은 메소드 이름, 다른 매개변수 선언 조건이어야 사용가능