[JAVA]객체 지향 프로그래밍(1)
자바 프로그래밍
프로그래밍 언어란?
- 프로그래밍 : 컴퓨터가 일을 수행 하도록 프로그래밍 언어로 명령어 집합(프로그램)을 만드는 일
- 컴파일 : 프로그래밍 언어를 컴퓨터가 실행 가능한 기계어로 만드는 일
- 컴파일러 : 기계어로 바꾸어 주는 프로그램(ex. 자바 컴파일러, gcc)
- 프로그램 : 컴퓨터에서 특정 목적을 수행하기 위해 프로그래밍 언어로 작성된 소스를 기계어로 번역한 것
컴퓨터가 이해할 수 있는 언어는 우리의 일상생활 언어와는 너무나도 다른 0과 1로 이루어진 이진코드 기계어이다.
그렇기 떄문에 컴퓨터와 사람이 대화하기 위해서 다리역할을 필요하다. 그것이 프로그래밍 언어이다.
프로그래밍 언어로 작성된 내용을 소스(source)라고 부르고, 소스는 컴파일러(compiler)라는 소프트웨어에 의해 기계어로 변환된 후(compile) 컴퓨터에서 실행 할 수 있게 된다.(program)
자바 프로그래밍 특징
- 플랫폼에 영향을 받지 않으므로 다양한 환경에서 사용할 수 있다.(이식성이 높은 언어)
- 객체 지향 언어이다.
- 함수적 스타일 코딩을 지원한다.
- 메모리를 자동으로 관리한다.
- 다양한 애플리케이션을 개발할 수 있다.
- 멀티 스레드(Muti-Thread)를 쉽게 구현할 수 있다.
- 동적 로딩(Dynamic Loading)을 지원한다.
- 막강한 오픈소스 라이브러리가 풍부하다.
자바 프로그램은 확장자가 .java인 파일을 작성하는 것부터 시작된다. 이것을 소스파일이라고 하고 이 소스파일을 컴파일러(javac.exe)로 컴파일하면 확장자가 .class인 바이트 코드 파일이 생성된다.
바이트 코드 파일은 JVM 구동 명령어(java.exe)에 의해 JVM에서 해석되고 해당 운영체제에 맞게 기계어로 번역된다.
“Write once, run anywhere”
자바는 한번 작성하면 어디서든 실행된다는 큰 장점을 가지고 있다.
C/C++ 언어처럼 컴파일 단계에서 만들어지는 완전한 기계어보다는 속도가 느리다는 단점을 가지고 있지만 기계어로 변환해주는 JVM(Java Virtual machine)내부의 최적화된 JIT(Just In Time)컴파일러와 요즘 하드웨어가 점점 좋아지고 있어서 속도의 격차는 많이 줄어들었다.
객체지향 프로그래밍
- 프로그램의 구현을 시간의 흐름순이 아닌 객체간의 관계와 협력을 기반으로 프로그램하는 것
- Object Oriented Programming(OOP)이라고 한다. (cf. 절차 지향 프로그래밍 Procedural Programming)
객체(Object)란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것을 말한다.
객체는 속성과 동작으로 구성되어 있고 이 속성과 동작들을 각각 필드와 메소드라고 부른다.
객체 지향 프로그래밍의 특징
- 캡슐화(Encapsulation)
- 상속(Inheritance)
- 다형성(Polymorphism)
다음에 더 자세히 예시를 통해 다뤄보도록 하겠습니다.
– 용어 정리 –
JDK(Java Development Kit)
: 자바에서 제공되는 개발용 라이브러리 => JRE + 개발에 필요한 도구
JRE(Java Runtime Enviroment)
: 자바 프로그램이 실행되는 환경 => JVM + 표준 개발 라이브러리
JVM(Java Virtual Machine)
: 자바 가상 머신으로 프로그램이 실행되는 환경인 JRE가 설치되어 있어야함 => JDK or JRE를 설치하면 자동으로 설치됨
JDk와 JRE는 운영체제별로 제공된다.
객체
: 객체 지향 프로그램의 대상, 생성된 인스턴스
클래스
: 객체를 프로그래밍 하기위해 코드로 정의해 놓은 상태
인스턴스
: new 키워드를 사용하여 클래스를 메모리에 생성한 상태
멤버 변수
: 클래스의 속성, 특성
메서드
: 멤버 변수를 이용하여 클래스의 기능을 구현한 함수
참조 변수
: 메모리에 생성된 인스턴스를 가리키는 변수
참조 값
: 생성된 인스턴스의 메모리 주소값