Super Kawaii Cute Cat Kaoani [JAVA] 자바란 ? 자바의 특징

[JAVA] 자바란 ? 자바의 특징

2024. 1. 20. 15:38
728x90
SMALL

📌 Java란?

자바(Java)는 자바로 기술된 프로그램 개발 및 실행을 할 수 있는 소프트웨어 모임의 총칭이다. 자바 프로그램은 운영체제나 하드웨어에 의존하지 않는 바이트 코드(중간 언어)인 추상적인 코드로 구현된다. 따라서, 자바 프로그램을 실행하기 위해서는 자바 가상 머신(JVM)과 개발에 필요한 표준 라이브러리 세트와 컴파일러의 환경만 맞추면 자바 프로그램은 모든 환경에서 동일하게 동작한다. 이러한 실행환경과 개발환경을 제공하는 것이 자바 플랫폼이다.

출처: 위키백과 사전

 

자바는 C언어에 객체 지향적 기능을 추가하여 만든 C++과 달리, 처음부터 객체 지향 언어로 개발된 프로그래밍 언어이다.

 

WORA (Write Once Run Anywhere)

 

플랫폼 종속성을 극복하고 개발 단계에부터 플랫폼에 독립적으로 설계되어 있다.
운영체제나 하드웨어에 상관없이 가상머신(JVM, Java Virtual Machine)을 사용하여 동일한 실행 결과를 얻을 수 있다.
어디서든 한 번 작성하면, 다시 컴파일하거나 수정하지 않고, 어떤 하드웨어에서나 운영체제에서도 실행시킬 수 있다.

 

개발 도구와 자바 플랫폼

JDK(Java Development Kit)

  • 자바 개발자를 위한 상업용 소프트웨어
  • 자바 컴파일러 등의 개발 도구

JRE(Java Runtime Environment)

  • 자바 응용프로그램이 실행될 때 필요한 소프트웨어들
  • 개발자가 활용할 수 있는 자바 API(이미 컴파일된 다양한 클래스 라이브러리)와 자바 가상 기계를 포함한다.

개발자가 아닌 일반 사용자의 경우 JRE만 필요하다.

 

 

Java SE의 JDK 구조

출처

 

📌 Java의 특징

  • 플랫폼 독립성
    • 자바는 하드웨어, 운영체제 등 플랫폼에 종속되지 않는 독립적인 바이트 코드로 컴파일되며, 자바 가상 기계만 있으면 하드웨어/운영체제를 막론하고 자바 프로그램의 실행이 가능하다.
  • 객체 지향
    • 자바는 객체 지향 언어이다. 캡슐화, 상속, 다형성을 지원한다.
  • 클래스로 캡슐화
    • 자바는 객체 지향 언어의 캡슐화(encapsulation) 원칙을 철저히 지켜, 변수나 메소드는 반드시 클래스 내에 구현하도록 한다.
    • 클래스에 속하지 않은 변수나 메소드는 존재하지 않고, 클래스 안에 새로은 클래스 즉, 내부 클래스를 만들 수 있다.
  • 실행 코드 배포
    • 자바 응용 프로그램은 한 개의 클래스 파일 또는 다수의 클래스 파일로 구성
      • 다수의 클래스 파일은 jar 파일 형태로 압축하여 배포하거나 실행 가능하다
      • Java 9 부터는 자바 응용 프로그램을 위한 맞춤형 커스텀 JRE를 만들어서 실행시킬 수 있다.
    • 자바의 실행은 main() 메소드에서 시작되며, 하나의 클래스 파일에 두 개 이상의 main() 메소드가 있을 수 없다.
      (각 클래스 파일이 main() 메소드를 가지는 것은 상관 없음)
  • 패키지
    • 서로 관련 있는 클래스는 패키지로 묶어 관리한다.
    • 파일 시스템의 폴더 같은 개념이다
  • 멀티스레드
    • 하나의 자바 프로그램이 다수의 작업을 처리할 수 있다.
      • 다수의 스레드 동시에 실행
    • 운영체제가 멀티스레드를 지원하고 멀티스레드와 관련된 API나 라이브러리를 제공해야만 한다,
    • C/C++ 등 많은 언어들은 자체적으로 멀티스레드를 지원하지 않아서 운영체제의 도움을 받지만 자바는 운영체제의 도움 없이 멀티스레드 프로그램이 가능하다.
  • 가비지 컬렉션
    • 자바는 메모리를 할당받는 기능은 있지만, 메모리를 반환하는 기능은 없다.
    • 자바 가상 기계의 가비지 컬렉션 기능에 의해 자동으로 회수된다.
      • 프로그래밍의 부담을 대폭 줄여준다.
  • 안전성
    • 타입 체크가 매우 엄격하며, C/C++와 달리 메모리의 물리적 주소를 사용하는 포인터 개념이 없기 때문에, 잘못된 자바 프로그램으로 인해 컴퓨터 시스템이 중단되는 일은 없음
  • 쉬운 프로그램 작성
    • 포인터 개념이 없기 때문에 작성에 부담이 적다.
    • 프로그램 개발을 쉽게 도와주는 다양한 라이브러리와 스윙 등 강력한 GUI 라이브러리를 지원하므로 프로그램 작성이 빠르고 쉽다.
  • 실행 속도를 개선하기 위해 JIT 컴파일러가 사용
    • 자바 가상 기계가 인터프리터 방식으로 바이트 코드를 실행하므로 일반적으로 C/C++로 작성된 프로그램보다 실행이 느리다고 알려져있지만, 최근에는 실행하는 도중 자바 프로그램을 해당 CPU의 기계어 코드로 컴파일하고 CPU가 바로 기계어를 실행하도록 하는 JIT(Just in Time) 컴파일링 기법을 이용하므로 실행 성능이 C/C++와 비슷해졌다.
  • 분산 네트워크 기술 지원
    • 자바에는 TCP/IP 라이브러리가 기본적으로 포함되어 있고, HTTP 프로토콜을 지원한다.
반응형

 

📌 객체 지향 언어

 

📎  객체 지향 언어란?

  • 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다
  • 객체를 조립해서 전체의 프로그램을 만드는 조립식 프로그래밍이다.

 

 

⚡ 객체(Object)란?

  • 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신과 다른 것을 식별가능한 것을 말한다.
  • ex) 물리적으로 존재하는 학생, 회원 등과 추상적으로 생각할 수 있는 생산, 주문, 배송 등이 모두 객체가 될 수 있다.

 

⚡  클래스(Class)란?

  • 객체라는 추상적인 개념을 코드화 한 것을 클래스라고 한다.
  • 자바 프로그래밍은 무조건 하나 이상의 클래스가 존재한다.
  • 내부에는 필드와 메서드로 구현할 수 있다,

 

 

클래스 변수(멤버)

  • 각각 객체마다 다른 속성을 띄는 경우 인스턴스 변수 선언, 모든 객체가 공통적인 속성을 띄고 공유할 경우 클래스 변수를 선언해야 한다.
  • static 키워드 사용 가능
    • 객체 생성 필요 없으며, 객체가 메모리에 자동으로 생성됨
public class Hello{
	String name;
    String color;
    static String address
}

 

✔ 상태: 멤버변수

클래스 안에서 선언되는 변수를 멤버 변수라고 하며 객체가 가지는 속성을 표현하는데 사용된다.

 

✔ 동작: 메소드

메소드는 객체 안에서 사용하는 함수로 객체가 제공하는 기능을 구현하는데 사용된다.

 

✔ 멤버변수와 메소드 예시

멤버변수와 메소드를 각각 클래스의 상태와 동작의 역할이라고 생각하면 이해하기 쉽다.

 

ex) 아이폰이 있다면

멤버 변수 : os, 배터리, 색깔

메서드 : 전화하는 것, 사진을 찍는 것

 

객체 지향 언어의 특징 4가지

캡슐화(Encapsulation)

  • 데이터와 코드의 형태를 외부로부터 알 수 없게 하고, 데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 만드는 방법
    • 멤버 변수 앞에 접근 제어자 private를 붙인다(private: 자기 클래스에서만 접근할 수 있는 것)
    • 멤버 변수에 값을 넣고 꺼내올 수 있는 메서드를 만든다. (접두어 set/get을 사용해서 메서드 생성)

추상화 (Abstraction)

  • 클래스들의 공통적인 특성(변수, 메소드)들을 묶어 표현하는 것

상속화(Inheritance)

  • 부모 클래스에 정의된 변수 및 메서드를 자식 클래스에서 상속받아 사용하는 것

다형화(Polymorephism)

  • 다양한 형태로 표현이 가능한 구조를 말한다.
  • 메시지에 의해 객체가 연산을 수행하게 될 때, 하나의 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
  • 다형화 지원 방법
    • 오버로딩 : 하나의 클래스 안에서 같은 이름의 메서드를 여러개 정의하는 것
    • 오버라이딩 : 부모 클래스로부터 상속받은 메서드 내용을 변경하여 사용하는 것

 

 

객체 지향의 5원칙

 

단일 책임 원칙 (SRP, Single Responsibility Principle)

  • 하나의 클래스는 하나의 책임만 가져야 한다는 원칙이다.
  • 즉, 어떤 변화(요구사항의 변화) 등에 의해 클래스를 변경해야 하는 이유는 오직 하나여야 함
  • 나머지 4원칙의 기초가 되는 원칙이기 때문에 SRP 원칙만 잘 지키면 다른 책임의 변경으로 인한 연쇄작용을 방지 가능하다.

 

개방 폐쇄 원칙(OCP, Open-Closed Principle)

  • SW의 구성요소인 모듈, 컴포넌트, 클래스, 메소드는 확장에는 열려있고, 변경에는 닫혀 있어야 한다.
  • 확장에 열려있다는 뜻은, 새로운 변경사항이 발생했을 때 유연하게 코드를 추가 또는 수정할 수 있어야 한다는 뜻
  • 변경에 닫혀있다는 뜻은, 객체를 직접 수정하지 않고도 변경사항을 적용할 수 있도록 설계해야한다는 뜻이다.
  • 시스템의 아키텍쳐를 떠받치는 원동력이되는 원칙이다.

 

리스코프 치환 원칙(LIP, The Liskov Subsitution Principle)

  • 부모 클래스를 상속한 자식 클래스는 부모 클래스의 역할을 정확히 해내야 한다.
  • 자식 클래스의 상세 내부를 부모 클래스는 알 필요가 없지만, 상속의 과정 중 메소드의 재정의가 필요할 때 자식 클래스가 부모 클래스의 기존 메소드 의미를 해치지 않아야 한다.

 

인터페이스 분리 원칙(ISP, Interface Segregation Principle)

  • 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다.
  • 즉, 꼭 필요한 인터페이스만 상속해야 한다.
  • 클라이언트 자신이 사용하는 메소드에만 의존해야 하며, 사용하지 않는 인터페이스의 메소드를 의존하면 안된다.
  • 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.

 

의존성 역전의 원칙(DIP, Dependency Inversion Principle)

  • DI는 의존성 주입으로, 변화하기 쉬운 것 혹은 자주 변화하는 것 보다 변화하기 어려운 것 혹은 변화가 거의 없는 것에 의존해야 하는 원칙이다.
  • 고차원 모듈은 잘 변화하기 않는다.

 

📎  객체지향언어 장점

  • 재사용성
  • 신뢰성 향상
  • 유지보수의 우수성

📎  객체지향언어 단점

  • 개발속도가 느림
  • 실행속도가 느림

 

 

<본 포스팅은 '명품 JAVA Programming'을 참고하여 포스팅하였습니다>

 

 

 

 

 


Reference
https://xangmin.tistory.com/152

 

객체 지향 4가지 특징과 5가지 원칙

객체지향 이란? • 객체지향 프로그래밍 (Object Oriented Programming, OOP)이란? - 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고객체들 간의 유기적인 상호작용을 통해 로직을 구성하

xangmin.tistory.com

https://javanewbie.tistory.com/56

 

[JAVA] 왕초보를 위한 어렵고 헷갈리는 자바 용어 총 정리 [1] ( 클래스, 객체, 인스턴스, 매개변수,

용어들이 헷갈리고 종류가 많아서 용어를 제대로 파악한 뒤 개념에 접근하면 이해가 빠르게 될 것이다. 일단 1편은 코딩에 직접적으로 사용되는 용어들로 구성하였다. 📌클래스 자바 프로그래

javanewbie.tistory.com

 

728x90
LIST

BELATED ARTICLES

more