특징 및 구조
2-1. 객체 지향 언어 프로그래밍(OOP, Object Oriented Programming)
- 절차 지향 언어와 다르게 하나의 기능을 객체 형태로 만듦, 객체들을 결합하여 하나의 프로그램을 완성함.
2-2. 인터프리터 언어
- 컴파일 언어인 동시에 인터프리터 언어
- 텍스트 소스를 컴파일하여 클래스 파일로 만든 후 자바 런타임이 클래스 파일을 인터프리트하며 실행됨.
2-3. 독립적인 플랫폼
- 모든 OS에서 독립적으로 자바 사용 가능(JVM에서 실행되므로)
*JVM(Java Virtual Machine): 자바 프로그램 실행 환경을 만들어 주는 소프트웨어
2-4. 자동 메모리 관리
- 개발자가 직접 메모리에 접근 X, 자바에서 직접 관리(C에서는 개발자가 직접 코드를 작성해야 함)
- 객체 생성 시 자동으로 메모리 영역을 찾아서 할당. 사용하지 않는 객체 제거.
2-5. 멀티 스레딩 지원
- 하나의 프로그램 단위가 동일한 스레드 동시 수행 가능
- OS마다 멀티 스레드를 이용하는 API가 다르나 자바의 경우 자바 API를 사용 → 쉬운 구현 가능
*API(Application Programming Interface): OS와 응용 프로그램의 통신을 쉽게 하는 연결 인터페이스
2-6. 동적 로딩
- 객체 간의 상호 작용 정의 → 필요한 객체만 생성하여 사용(필요하지 않은 객체는 생성 X)
- 오류가 발생하면 발생한 오류의 클래스만 수정하면 됨(유지 보수 쉬움)
2-7. 안전, 강력
- 모든 메모리 접근을 자바 시스템에서 관리 → 시스템 붕괴 우려 X
- 포인터 개념 없음
- 실행 전 클래스 파일을 이용한 프로그램 검사 가능
객체 지향 프로그래밍의 특징
3-1. 캡슐화(Encapsulation)
- 관련된 기능과 관련된 데이터를 하나의 클래스로 묶어서 사용
- 정보 은닉(접근에 제한 설정)
- public: 클래스 외부/내부에서 접근 가능
- protected: 해당 객체를 상속받은 객체 내부에서 접근 가능(단순 인스턴스에서는 접근 X)
- default: 동일한 패키지 내의 객체에서 인스턴스를 생성하여 접근 가능
- private: 클래스 내부에서만 접근 가능
3-2. 상속(Inheritance)
- 부모 클래스에서 선언한 변수/메소드를 자식 클래스에서 직접 만들지 않고 ‘상속받음’으로써 자식 클래스가 부모 클래스의 변수/메소드를 사용할 수 있는 기능
- 자바의 모든 클래스는 Object 클래스의 후손
- 부모 클래스의 생성자, 초기화 블록은 상속 X
- 부모의 private 멤버는 상속은 되지만 직접 접근 X
- 자바에서는 단일 상속만 지원
- Is a(상속 관계): 자식 클래스는 하나의 부모 클래스
- Has a(연관 관계): 한 클래스 멤버별로 다른 클래스 타입의 참조 변수 선언
3-3. 추상화(Abstraction)
- 객체에서 공통된 속성, 행위 추출
- 유연성을 확보하기 위해 구체적인 것 제거
- 프로그램에서 필요한 공통점 추출, 불필요한 공통점을 제거하는 과정
3-4. 다형성(Polymorphism)
- 오버라이딩(Overriding)
- 관련된 기능과 관련된 데이터를 하나의 클래스로 묶어서 사용
- 메소드 헤드라인 위에 반드시 @Override 표시
- 부모 클래스와 자식 클래스의 메소드를 비교하여 메소드 이름이 동일하거나 매개변수의 개수, 타입, 순서가 동일하다면 메소드를 재정의할 수 있음(단, 접근제어자 private을 사용하면 오버라이딩 X)
- 오버로딩(Overloading)
- 한 클래스 내에서 같은 이름의 메소드를 여러 개 정의
- 같은 메소드 이름, 다른 매개변수 선언 조건이어야 사용 가능
'Programming Language > Java' 카테고리의 다른 글
[Java] 백준 BOJ 2745: 진법 변환 (0) | 2024.01.09 |
---|---|
[Java] 백준 BOJ 1152: 단어의 개수(asList 값 제거) (1) | 2023.12.01 |
[Java] 백준 BOJ 9086: 문자열 (0) | 2023.11.20 |
[Java] StringBuilder: char 데이터 합쳐서 문자열 만들기 (1) | 2023.11.20 |
[Java] for-each문(향상된 for문) (0) | 2023.11.17 |