[Java] 기초, 들어가기에 앞서
Java
객체지향 프로그래밍 언어
운영체제에 독립적 실행이 가능하기 때문에
Write Once, Run Anywhere 이라는 슬로건을 내세웠다
다양한 운영체제가 공존하는 웹 환경에 적합한 언어이다
자바 이전 언어들은 특정 CPU에서만 작동하거나 특정 OS에 따라 작성해야 하는 언어들이 대부분이었다
자바는 이를 해결하기 위해 JRE(자바 러닝타임 환경, JVM 자바 가상머신 + 표준 클래스 라이브러리) 가 설치되어 있는 모든 운영체제에서 실행이 가능하도록 만들어졌다
모든 기능은 객체로 만들어 사용하는데, 객체는 프로그램이 동작하는 부품이라고 생각하면 편하다 여러 부품들을 만들고 조립해서 하나의 프로그램을 실행하는 개념이 OOP 이다
객체 지향적으로 설계된 프로그램은 유지보수가 쉽고 확장성이 높다
자바 8버전부터 함수형 프로그래밍을 지원하는 문법인 람다식과 스트림이 추가되었다 컬렉션의 요소를 필터링, 매핑, 집계 처리가 쉬워지고 코드가 간결해진다
자바는 또한 자동으로 메모리를 관리해주는 기능을 추가했다 기존에 C나 C++ 같은 경우엔 메모리 생성, 소멸을 개발자가 직접 설계했어야 했지만 자바는 가비지 컬렉션을 실행시켜서 자동으로 사용하지 않는 메모리를 수거한다
JVM ( Java Virtual Machine)
자바 언어를 JVM이 이해할 수 있는 코드(바이트코드)로 변환하는 컴파일을 하게된다
자바 프로그램을 실행시키는 도구이며
자바가 운영체제에 독립적인 이유는 JVM이 있기 때문에 가능한 것이다
JVM은 자바 코드로 작성한 프로그램을 해석해 실행하는 별도의 프로그램 즉, 프로그램을 실행하는 프로그램이라고 할 수 있다
프로그램이 제대로 실행되기 위해서는 컴퓨터의 다양한 자원을 활용해야 하는데 이런 자원을 관리하는 것이 운영체제이기 때문에 프로그램은 이 운영체제가 정한 규칙을 따를 수 밖에 없다
운영체제 별 규칙을 따르는 별도의 절차를 JVM이 해결해줄 수 있다
JVM의 경우 JDK나 JRE를 설치하면 자동으로 설치된다 자바는 JVM을 거치기 때문에 C, C++에 비해 속도가 느린 편이지만 JVM 내부 최적화된 JIT 컴파일러를 통해 속도를 개선해나가고 있다
JDK (Java Development Kit) : JRE + 개발도구 JRE (Java Runtime Environment) : JVM + 표준 클래스 라이브러리
자바 프로그램 실행만 할거라면 JRE만 있어도 충분하다 그러나 자바 프로그램을 개발할 것이라면 JDK를 설치해야한다
..
라고 이야기를 했지만.. 배울 때 나왔던 내용의 일부이다
누구나 책이나 강의를 보면 저런 내용이 있지만
바로 와닿진 않는다
그도 그럴 것이
나는 이렇게 뭔가 꼬리에 물릴 법한 대략적인 이야기를 별로 좋아하지 않는 편이기 때문이다
왜 ? 그래서 이게 뭔데? 라는 질문을 계속 해나가다보면 결국
OOP (Object Oriented Programming) 객체 지향 프로그래밍
이게 뭔데 ?
라는 원초적인 질문이 나오게된다
그러면 아주 기초적인 이 명칭부터 정의해보는 걸로 출발해보겠다
컴퓨터 프로그래밍 패러다임 중에 하나로써 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고, 그 객체들 간 유기적 상호작용을 통해 로직을 구성하는 프로그래밍 방법.
이라고 정의할 수 있다
패러다임 중에 하나라고 했는데 그러면 다른 것도 있나 ?
있다
C언어 같은 절차지향언어
자판기를 생각해보면
시작할 때
동전을 넣고
동전이 충분한지 여부를 판단하고
상품을 선택하고
그 재고가 있는지 확인하고
상품을 내보내고
끝난다
이러한 흐름, 절차에 중점을 설계해서 순서대로 작동하게끔 하는 프로그래밍이 절차 지향 프로그래밍이다
그렇지만 컴퓨터를 이용해서 문제를 해결하는 이 세상에는 저렇게 단순한 일련 행위만 존재하는 것이 아니다
어떠한 존재 간의 관계, 상호작용 같이 복잡하게 구성되어 있기 때문에
이러한 것을 효과적으로 표현하기 위한, 여러 존재를 객체로 표현하고 이들 간의 관계, 상호작용을 객체 지향 프로그래밍 프로그램으로써 나타낸 것이다
여러 장단점도 당연히 존재한다
코드의 재활용이 쉽고, 유지보수가 쉽고 크고 작은 여러 프로젝트에 적합한 장점과
처리속도가 상대적으로 느리고 객체가 클 경우 용량이 커지고 설계할 때 시간과 노력이 좀 많이 필요하다는 단점이 있다
왜 코드 재활용이 쉽나 ?
다른 사람이 만들어놓은 클래스를 가져와서 사용할 수 있고 상속을 통해서 확장할 수 있기 때문이다
클래스는 뭐고 상속이 뭔데?
나중에 자세하게 공부하고 포스팅할거지만 조금 알고 있는 지식으로 지금 말하자면
클래스는 쉽게 말해서 객체를 찍어낼 수 있는 프레임이라고 보면되고
상속은 부모 클래스의 속성과 기능을 그대로 이어받아서 사용할 수 있게 해주고 기능의 일부를 변경해야 할 경우에 상속받은 자식 클래스에서 해당 기능만 다시 수정해서 사용할 수 있게 해주는 것 이라고 말할 수 있다
그니까 수정하려고 하면 다른 라이브러리가 되어 버려서 버전에 따라 동작하지 않을 수도 있고 불필요하게 코드 수정작업을 하게되는 일도 발생하니까 그걸 해결하기 위해 도입한 것이라고 보면 된다
왜 유지보수가 쉽나 ?
코드 수정 할 때 수정해야 할 클래스 내부에 멤버 변수, 메소드 같은 걸로 존재하기 때문에 이 부분만 수정하면 돼서 쉽다 멤버 변수나 메소드는 나중에 배워서 포스팅할 것이다
왜 큰 프로젝트에 적합한가 ?
클래스 단위로 모듈화 시켜서 개발할 수 있기 때문에 여러 회사나 팀단위로 개발할 때 업무 분담이 쉽기 때문이다
대충 이 정도 이해를 했다면 전체적으로 자바를 시작하기 전에 납득을 하고 갈 수 있다
그 외에도
객체 지향 프로그래밍 키워드 5가지
클래스 + 인스턴스(객체) 캡슐화 추상화 상속 다형성
이러한 내용도 나오지만
나중에
개념을 익힐 때 내가 방금 했던 일련의 사고 처럼 해나가서 완전히 내 것으로 만들 것이다