개념과 제품을 혼동해서는 안된다.
ex) InteliJ, Eclipse는 제품, IDE는 개념이다.
오라클에서 자바의 설명은 아래와 같다.
Java는 Sun Microsystems가 1995년에 처음 출시한 프로그래밍 언어이자 컴퓨팅
플랫폼으로, 수 많은 응용 프로그램 및 웹 사이트가 Java를 설치하지 않으면 작동되지
않으며, 이 수는 매일 늘어나고 있습니다. Java는 빠르고, 안전하며, 안정적입니다.
랩톱에서 데이터 센터, 게임 콘솔에서 과학용 수퍼 컴퓨터, 휴대 전화에서 인터넷에
이르기까지 Java 기술은 어디에나 존재합니다.
즉, 객체지향 프로그래밍 언어이자, 프로그램 및 웹사이트를 작동시키기 위한 플랫폼
자바는 객체지향 언어이다.
객체지향 프로그래밍(OOP, Object Oriented Programming)이란 프로그램을 개발하는 기법으로 부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립 및 연결하여 전체 프로그램을 완성하는 것을 말한다.
객체를 만들기 위해서는 설계도인 클래스를 작성하고, 객체와 객체를 연결하여 목적에 맞는 프로그램을 만들어 낸다.
객체지향 언어의 특징인 캡슐화, 상속성, 다형성을 완벽하게 지원한다.
서로 다른 실행환경을 가진 시스템간에 프로그램을 옮겨 실행할 수 있는것을 말한다.
자바는 자바 실행환경(JRE)이 설치 되어 있는 모든 운영체제에서 실행이 가능하다
컴파일 언어인 동시에 인터프리터(Interpreter) 언어이다.
텍스트 소스를 컴파일 하여 2진 파일(클래스 파일)로 만든 다음 자바 런타임이 클래스 파일을 인터프리트 하면서 실행한다.
시스템에 무관한 2진 파일을 만듬으로써 자바는 컴파일 언어에 가까운 속도와 시스템 독립성을 얻을수 있다.
C++은 메모리에 생성된 객체를 제거하기 위해 개발자가 직접 코드를 작성해야한다.
만약 이 작업을 성실하게 해주지 않는다면 프로그램은 불완전해지고 갑자기 다운되는 현상을 겪을수도 있다.
자바는 개발자가 직접 메모리에 접근할 수 없으며 메모리는 자바가 직접 관리한다.
객체 생성시 자동으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면 쓰레기 수집기(Garbage Collector)를 실행시켜 자동으로 사용하지 않는 객체를 제거한다.
덕분에 개발자는 메모리 관리의 수고를 덜고, 핵심기능 코딩에 집중할 수 있다.
운영체제에 따라 멀티 스레드를 구현하는 방법이 다르지만, 자바는 스레드 생성 및 제어와 관련된 라이브러리 API를 제공하므로 운영체제에 상관없이 멀티 스레드를 쉽게 구현할수있다.
실행시에 모든 클래스가 로딩되는것이 아니라 필요한 시점에 클래스를 로딩하여 사용할 수 있다는 장점을 지닌다.
애플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 애플리케이션을 장성할 수 있다.
자바에는 TCP/IP 라이브러리가 기본적으로 포함되어 있다.
또한 HTTP 프로토콜을 기본적으로 지원한다.
오픈소스 라이브러리가 풍부
자바는 오픈소스(Open Source) 언어이고 자바 프로그램에서 사용하는 라이브러리 또한 오픈소스의 양이 방대하다.
고급 기능을 구현하는 코드를 작성하는 대신 검증된 오픈소스 라이브러리를 사용하면 애플리케이션을 다시 컴파일 할 필요가 없다.
따라서 유지보수를 쉽고 빠르게 진행 할 수 있다.
프로그래머가 되기위해 C 언어를 가장 먼저 학습하게 되는데 C언어와의 JAVA의 차이를 알아본다.
차이점은 여러가지가 존재한다.
절차지향과 객체지향
C 언어는 순차적으로 코드를 읽어가는 절차지향 언어이고,
JAVA는 설계적인 측면이 강조된 객체지향 언어이다.
절차지향은 데이터 중심으로 함수를 구현하며, 객체지향은 기능 중심으로 메서드를 구현하는 차이가 있을 뿐입니다.
속도
C 언어 상대적으로 빠르다.
안정성
C 언어 상대적으로 낮다.
JAVA 상대적으로 높다
개념 : 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 자신이 아닌 다른 것과 식별이 가능한 것을 의미한다.
또한 SW 세계에서 구현할 대상이기도하고, '클래스의 인스턴스' 라고도 부른다.
개념 : 객체를 만들어 내기위한 설계도 혹은 틀이며 연관되어 있는 변수와 메소드의 집합이라고 할 수 있다.
개념 : 설계도를 바탕으로 구현된 구체적인 실체이다.
인스턴스는 객체에 포함된다.
개념 : 프로그램을 개발하는 기법으로 부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립 및 연결하여 전체 프로그램을 완성하는 것을 의미한다.
객체지향의 사실과 오해라는 책에서는
객체지향의 목표는 "실세계를 모방하는 것이 아닌 새로운 세계를 창조하는 것"이라고 언급된다.
객체지향 프로그래밍의 가장 큰 특징은 클래스를 이용해 연관있는 처리부분(함수)과 데이터 부분(변수)를 하나로 묶어 객체(인스턴스)를 생성해 사용한다는 점이다
그리고 객체지향 프로그래밍에서는 프로젝트를 독립적인 객체 단위로 분리해서 작업할 수 있기 때문에 여러 개발자와 협업해 규모가 큰 프로젝트를 진행할 수 있으며 유지보수측면도 뛰어나다는 장점이 있다.
캡슐화, 상속, 추상화, 다형성이 존재한다.
클래스 단위 프로그래밍과 객체지향 프로그래밍의 차이
일반적으로 객체지향 프로그래밍은 객체지향 프로그래밍의 4가지 특징(추상화, 캡슐화, 상속, 다형성)을 골고루 사용해 코딩하는 프로그래밍을 객체 지향이라고 한다.
하지만 클래스 단위 프로그래밍은 이런 객체지향의 특징이 사용하지 않고 클래스만을 이용해 코딩하는 방식을 말한다.
이와 같이 클래스 단위 프로그래밍과 객체 프로그래밍은 차이가 있다
References (참고 자료)
- 객체지향의 사실과 오해
- https://ko.wikipedia.org/wiki/