- 객체지향
- 우리가 실생활에서 쓰는 모든 것을 객체라 하며,객체 지향 프로그래밍은 프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것.
- 객체는 클래스라는 틀에서 생겨난 실체(instance). 따라서 객체 지향 프로그램은 객체와 객체 간의 연결로 되어 있으며 각각의 객체 안에 자료구조와 알고리즘이 들어있는 것.
- 객체 지향
- 기능이 아닌 객체가 중심이 되며 "누가 어떤 일을 할 것인가?"가 핵심
- 객체를 도출하고 각각의 역할을 정의해 나가는 것에 초점
- 객체 지향 프로그래밍의 특징
1. 추상화(abstraction)
- 객체들의 공통적인 특징(기능, 속성)을 도출하는 것
- 객체지향적 관점에서는 클래스를 정의하는 것을 추상화라고 할 수 있음
(클래스가 없는 객체지향 언어도 존재 ex.JavaScript)
2. 캡슐화(encapsulation)
- 실제로 구현되는 부분을 외부에 드러나지 않도록 하여 정보를 은닉할 수 있음
- 객체가 독립적으로 역할을 할 수 있도록 데이터와 기능을 하나로 묶어 관리하는 것
- 코드가 묶여있어서 오류가 없어서 편리
- 데이터를 보이지 않고 외부와 상호작용을 할 때는 메소드를 이용하여 통신.
보통 라이브러리로 만들어서 업그레이드해 사용할 수 있음.
3. 상속성(inheritance)
- 하나의 클래스가 가진 특징(함수, 데이터)을 다른 클래스가 그대로 물려받는 것
- 이미 작성된 클래스를 받아서 새로운 클래스를 생성하는 것
- 기존 코드를 재활용해서 사용함으로써 객체지향 방법의 중요한 기능 중 하나에 속함
4. 다형성(polymorphism)
- 약간 다른 방법으로 동작하는 함수를 동일한 이름으로 호출하는 것
- 동일한 명령의 해석을 연결된 객체에 의존하는 것
- 오버라이딩(Overriding), 오버로딩(OverLoading)
ㄴ 오버라이딩 : 부모클래스의 메소드와 같은 이름을 사용하며 매개변수도 같되 내부 소스를 재정의하는 것
ㄴ 오버로딩 : 같은 이름의 함수를 여러 개 정의한 후 매개변수를 다르게 하여 같은 이름을 경우에 따라
호출하여 사용하는 것
5. 동적바인딩(Dynamic Binding)
- 가상 함수를 호출하는 코드를 컴파일할 때, 바인딩을 실행시간에 결정하는 것
- 파생 클래스의 객체에 대해 기본 클래스의 포인터로 가상 함수가 호출될 때 일어남
- 함수를 호출하면 동적 바인딩을 통해 파생 클래스에 오버라이딩 된 함수가 실행
- 프로그래밍의 유연성을 높여주며 파생 클래스에서 재정의한 함수의 호출을 보장(다형 개념 실현)
- JVM(Java Virtual Machine)
- 자바 가상 머신(JVM)은 자바 프로그램 실행환경을 만들어 주는 소프트웨어
- 자바 코드를 컴파일하여 .class 바이트 코드로 만들면 이 코드가 자바 가상 머신 환경에서 실행됨
- JVM은 자바 실행 환경 JRE(Java Runtime Environment)에 포함
- 현재 사용하는 컴퓨터의 운영체제에 맞는 자바 실행환경(JRE)가 설치되어 있다면
자바 가상 머신이 설치되어 있다는 뜻
- Java의 경우 Java언어로 작성된 Test.java는 컴파일하면 Test.class 파일이 생성됨
- 이렇게 생성된 바이트 코드는 각자의 플랫폼에 설치되어 있는 자바 가상 머신(JVM)이
운영체제에 맞는 실행 파일로 바꿔줌
- 즉, Java에서는 C언어와는 달리 JVM을 사용하기 때문에 각자의 플랫폼에 맞게끔 컴파일을 따로따로
해줘야 할 필요가 없음
- Java는 플랫폼에 종속적이지 않지만 JVM은 플랫폼에 종속적
- 이렇게 Java는 컴파일된 바이트 코드로 어떤 JVM에서도 동작시킬 수 있기 때문에 플랫폼에 의존적이지 않음
- 하지만 반대로 자바 가상 머신(JVM)은 플랫폼에 의존적임
- 리눅스의 JVM과 윈도우의 JVM은 서로 다름
- 자바로 작성된 모든 프로그램은 자바 가상 머신에서만 실행될 수 있으므로 자바 프로그램을 실행하기
위해서는 반드시 자바 가상 머신이 설치되어 있어야 함.
- 따라서 오라클은 대부분의 주요 운영체제뿐만 아니라 웹 브라우저, 스마트폰, 가전기기 등에서도
손쉽게 설치할 수 있도록 지원.
'개발공부 > Java/Spring' 카테고리의 다른 글
[Git] ignore intelliJ에 추가, 재적용 (0) | 2023.04.18 |
---|---|
[TroubleShooting] Unsupported class file major version 64 & IntelliJ h2 연결 (0) | 2023.04.14 |
내가 정리한 Java의 기초(2) (0) | 2023.04.07 |
내가 정리한 Java의 기초(1) (0) | 2023.04.04 |
토이프로젝트 UBS (0) | 2023.03.30 |
댓글