Java란?
1995년에 개발된 객체 지향 프로그래밍 언어이다.
또한 플랫폼 독립적이라는 특성도 가지고 있다.
객체지향은 뭐고 플랫폼 독립적이란건 뭘까...?
이것에 대해 알려면 일단 프로그래밍 언어의 동작 방식을 알아야한다.
프로그래밍언어는 인터프리터 언어, 컴파일 언어라는 두 개의 동작방식으로 구분할 수 있다.
인터프리터 언어는 코드를 인터프리터를 통해서 실행한다.
코드를 실행하려면 인터프리터가 os에 설치되어 있어야 한다.
대표적으로 python 등이 있다.
컴파일 언어는 코드를 컴파일(실행파일로 변경)해서 실행한다.
대표적으로 C, C++ 등이 있다.
그렇다면 Java는?
Java는 컴파일 언어와 인터프리터 언어의 특징을 모두 가지고 있다.
아래 그림은 java 파일이 실행되는 과정이다.
소스 코드를 기계어로 직접 컴파일하여 링크하는 C/C++의 컴파일러와 달리 자바 컴파일러는 바이트코드인 클래스 파일(.class)을 생성하고, 이 파일의 바이트코드를 읽은 뒤 기계어로 바꾸어 실행하는 것은 자바 가상 머신이다.
왜 2가지 방식을 같이쓸까?
컴파일 언어의 단점인, 타 운영체제에서 실행이 되지 않는 문제를 보완하기 위함.
ex) 사용환경이 편리한 윈도우에서 프로그램을 작성하고, Linux나 Unix 서버에 올려서 실행한다.
각각의 컴퓨터에는 그 운영체제에 맞는 JRE(JVM이 포함되어있음)가 설치되어 있어야 한다.
예를 들어 플랫폼에 종속된 경우 윈도우 버전으로 빌드한 프로그램을 그대로 리눅스나 macOS에서 실행하는 것은 불가능하다. 반면 Java로 작성된 프로그램은 플랫폼에 맞는 자바 가상 머신만 설치되어 있다면 대체로 문제없이 동작한다. 이는 바이트코드가 플랫폼이 아닌 자바 가상 머신에서 실행 가능하며, 프로그램 실행의 주체가 운영 체제가 아닌 자바 가상 머신이기 때문이다. 이러한 점을 일컬어 플랫폼에 독립적이라고 한다.
그래서 Java 코드는 다시 작성하지 않고도 Windows, Linux, iOS 또는 Android와 같은 기본 플랫폼에서 실행할 수 있다는 장점을 가져서 많은 사랑을 받고 있다.
객체지향 언어란?
소프트웨어를 개발할 때 부품에 해당하는 객체들을 먼저 만들고, 이 객체들을 하나씩 조립해서 완성된 프로그램을 만드는 기법을 객체지향 프로그래밍 Object Oriented Programming, OOP이라고 한다.
객체 object란 물리적으로 존재하거나 개념적인 것 중에서 다른 것과 식별 가능한 것을 말한다. 예를 들어 물리적으로 존재하는 자동차, 자전거, 책, 사람은 물론, 개념적인 학과나 강의, 주문 등도 모두 객체가 될 수 있다.
객체는 속성과 동작으로 구성된다. 사람은 이름, 나이 등의 속성과 웃다, 걷다 등의 동작이 있고, 자동차는 색상, 모델명 등의 속성과 달린다, 멈춘다 등의 동작이 있다. 자바는 이러한 속성과 동작을 각각 필드 field와 메소드 method라고 부른다.
객체지향 프로그램의 특징은 캡슐화, 상속, 다형성이다.
☑️캡슐화
캡슐화 Encapsulation란 객체의 데이터(필드), 동작(메소드)을 하나로 묶고 실제 구현 내용을 외부에 감추는 것을 말한다. 외부 객체는 객체 내부의 구조를 알지 못하며 객체가 노출해서 제공하는 필드와 메소드만 이용할 수 있다.
필드와 메소드를 캡슐화하여 보호하는 이유는 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하는 데 있다. 자바 언어는 캡슐화된 멤버를 노출시킬 것인지 숨길 것인지를 결정하기 위해 접근 제한자 Access Modifier를 사용한다.
☑️상속
객체지향 프로그래밍에서는 부모 역할의 상위 객체와 자식 역할의 하위 객체가 있다. 부모 객체는 자기가 가지고 있는 필드와 메소드를 자식 객체에게 물려주어 자식 객체가 사용할 수 있도록 한다. 이것이 상속이다. 상속을 하는 이유는 다음과 같다.
• 코드의 재사용성을 높여 준다.
잘 개발된 부모 객체의 필드와 메소드를 자식이 그대로 사용할 수 있어 자식 객체에서 중복 코딩을 하지 않아도 된다.
• 유지 보수 시간을 최소화시켜 준다.
부모 객체의 필드와 메소드를 수정하면 모든 자식 객체들은 수정된 필드와 메소드를 사용할 수 있다.
☑️다형성
다형성이란 사용 방법은 동일하지만 실행 결과가 다양하게 나오는 성질을 말한다. 자동차의 부품을 교환하면 성능이 다르게 나오듯이 프로그램을 구성하는 객체(부품)를 바꾸면 프로그램의 실행 성능이 다르게 나올 수 있다.
'Java' 카테고리의 다른 글
[JAVA] Thread (0) | 2025.01.08 |
---|