1. 자바란?
자바란 흔히 객체 지향 프로그래밍(OOP) 언어라고 한다.
이는 OOP의 기본 구성 요소인 객체, 클래스 및 상속의 개념을 기반으로 하는 것이다.
(1) 자바의 객체
method 및 static 값들을 공유하는 클래스의 인스턴스이다.
다시 말해, 클래스라는 템플릿으로 만든 값이다.
(2) 자바의 클래스
인스턴스를 만들기 위한 템플릿이다.
클래스에서는 method나 로직을 구성하여 인스턴스들의 작동 방식을 정의할 수 있다.
(3) 자바의 상속
하위 클래스에서 상위 클래스를 상속하여 코드의 중복을 줄일 수 있고 새로운 클래스를 만들 수 있다.
템플릿을 변형시켜 새로운 템플릿을 만드는 것이다.
OOP에서 중요한 점은 또 있다.
(1) 캡슐화
내부의 정보를 숨기면서 외부의 호출이 있을 때 정해진 동작을 수행하는 인터페이스를 제공하는 방법이다.
좀 다를수도 있지만 남들이 만들어 놓은 라이브러리를 그냥 쓰는것이라고 이해했다.
캡슐화를 통해 객체의 무결성과 보안을 보장하는데 좋다고 한다.
(2) 다형성
상속과 밀접한 다형성은 서로 다른 클래스의 객체가 같은 부모를 가지고 있다.
이 두 객체는 같은 부모의 인스턴스로 정의할 수 있다.
따라서 두 객체는 부모가 정의한 동일한 속성을 가지고 있을 수도 있다.
이러한 속성을 통해 코드를 모듈식으로 유지하는 것을 다형성 이라고 한다.
맥가이버 칼로 예를 들면 칼 하나로 여러가지 행동을 할 수 있다.
맥가이버 칼은 부모가 되고 여러가지 행동은 서로다른 클래스라고 할 수 있다.
(3) 추상화
추상화는 필수적인 부분에 집중하고 세부적인 부분은 무시하는 개념이다.
예를 들어 사람들은 1월1일 모두가 새해에 다짐을 한다.
나는 운동을 하기로 다짐했다.
이처럼 운동은 필수적인 부분이고 어디서 어떻게 무슨 운동을 할지는 무시했다.
이를 추상화라고 한다.
추상화를 통해 코드를 모듈화하여 효율적으로 개발할 수 있다.
2. OOP vs FP (functional programming)
그렇다면 객체지향 프로그래밍과 함수형 프로그래밍은 어떤것이 다를까
OOP는 재사용성을 목표로 두고 점차 확장하며 복잡한 구조를 만들 수 있다.
반면 FP는 말그대로 함수를 만든다.
입력을 받고 출력을 뱉는 행동위주의 프로그래밍이다.
FP는 동일한 입력이 주어지면 항상 동일한 출력이 생긴다.
OOP와 FP는 반대되는 의미가 아닌 그냥 다른 접근 방식인 것이다.
그래서 OOP안에서도 FP를 사용할 수 있는것이다.
3. 자바의 작동방식
자바는 컴파일 언어이다.
즉 코드를 쓰면 컴퓨터가 읽기 좋은 코드로 변경하는 컴파일 과정이 필요하다.
컴파일 한 코드는 컴퓨터가 읽으면서 실행된다.
java 코드를 컴파일하는 컴파일러는 JDK( Java Development Kit) 의 일부로서 Oracle 웹 사이트에서 무료로 다운로드 할 수 있다.
java 코드를 컴파일 하면 .class 라는 파일안에 코드들을 바이트코드로 컴파일한다.
이 바이트코드를 컴퓨터가 실행할 수 있는 코드로 한번더 변형시켜야 한다.
이 작업을 해주는 것이 JVM ( java Virtual Machine) 이다.
JVM을 거친 코드를 실행시키는 것이기 때문에 windows, macOs, linux등 OS환경이 달라도 같은 값을 실행시킬 수 있다.
3. jshell
jshell 은 JVM 커널과 통신하며 우리에게 컴파일러와 같은 환경을 구성하지 않아도 java 코드를 실행할 수 있게 해준다.
우리가 jshell에 코드를 입력하면 jshell은 JVM 커널로 코드를 보내고 결과를 받아 우리에게 보여준다.
즉 jshell 도 java api를 통해 JVM 커널과 통신하는 클라이언트 어플리케이션이다.
그래서 간단한 코드는 클래스를 구성하지 않아도 jshell에서 간편하게 테스트 해볼 수 있다.
'개발 > JAVA' 카테고리의 다른 글
[Java] 필드 주입시 생성자에 this 꼭 써야할까? (0) | 2023.06.05 |
---|---|
[Java] @Override 꼭 적어야 하나? (0) | 2023.05.04 |
[Java] 인터페이스가 가진 객체지향의 특징 (0) | 2023.05.03 |
[Java] List<T> list = new ArrayList<>(); (0) | 2023.04.25 |
[JAVA] 입력 받은 숫자가 소수인지 판단하는 문제 뜯어보기 (0) | 2023.04.06 |