정말 기초적이지만 구체적인 원리에 대해 알게 된 것들이 많아 정리해보았다.
환경변수를 설정해줘야 하는 이유?
intellij, 웹어플리케이션 서버는 자바의 홈 경로가 필요하고 그래야 실행이 가능하다.
.
<자바의 홈 경로 요청하는 방법>
- 홈디렉토리를 환경변수에 지정하면 "내 홈 여기야"라고 자바가 알려주고 그 부분이 사용될 수 있다.
- 환경변수 "PATH" 실행파일: ~.exe : 경로에 와야만 java, javac 같은 애들이 실행 가능
- 근데 다른 데서도 동작시키고 싶기 때문에 환경변수 지정하면 어떤 경로에서든 java, javac가 동작
자바가 만들어진 배경
1️⃣ 마이크로소프트사, "news" 개발 실패
⬇️
1990년대의 트렌드는 "인공지능" 이었다고 한다. 그런데 오늘날의 인공지능의 느낌이기보다 온갖 가전제품에 "인공지능" 네이밍이 붙는 식이었다.
news 대신 찾게 된 게 트렌드를 따라 "인공지능 잘하는 애 만들기"였고, 그렇게 자바가 탄생하게 된다.
객체지향이 나온 이유: 가전제품에 "인공지능" 프로그램을 탑재하려고 하는데 걸리는 시간을 단축하기 위해서였다고 한다. 개발하는 사이 가전제품이 부식될 수도 있기 때문에 빠른 개발 속도가 관건이었다고 한다.재사용할 수 있어야 했다.
또한 어느 가전제품에든 탑재해야 했기 때문에플랫폼 독립적이어야했다고 한다. ➡️ jvm
자바가네트워크에 강한것 역시 동일한 이유에서이다.
↳자바를 이용한 채팅 서비스 만드는 것이 쉬운 이유가 네트워크가 잘 만들어져 있기 때문
cf. "객체지향" 자체는 자바 때문에 만들어진 개념이 아님
시뮬이 시초였고, 자바는 c++에서 많이 가져왔음 (그 당시에는) 자바는 쉬웠다
쉬웠어야 했던 이유: 빠른 기능 개발 때문
객체지향
설계가 중요한 언어이다. 어떤 객체들이 필요하고, 객체들을 어떻게 엮어서? 사용할 수 있을까
처음에 받아들여지지 않은 이유: 그동안 개발은 "짧게, 나만 알 수 있게"가 경쟁력이었다. 다른 이들을 이해시키는 게 아니라 혁신적인 코드인 것이 더 중요했으므로 밥통을 다 만들어야 했다. 이러한 방식에 익숙해 있던 사람들은 다 내가 해야 속이 편했기에 처음에는 불편해 했다.
객체지향 잘하기: 이제는 해야 할 일이 너무 많아서 그렇게도 안 됨: 협업의 시대가 왔다. 따라서 이미 만들어놓은 밥통을 가져다 쓰는 시대가 됐다.
얼마나 잘 갖다 쓰느냐가 핵심!
↳이미 만들어진 것들 잘 아는 것이 중요
자바는 어렵다?
쉽다고 대표적으로 알려져 있는파이썬은 개인이 "~ 언어를 만들어볼까?"하고 만든 언어이다.처음에 사용할 때는 쉽고 직관적이지만일관성이 떨어지는경우가 많다. 점차 커뮤니티가 커지며 오픈소스로 기능이 계속 추가되며 발전했기 때문에언어 철학이 없다.❌
but자바는 microsoft 연구실에서 만들었기에언어 철학이 있음⭕
처음에는 어렵지만(알아둬야 할 약속들이 많기 때문) 나중에는일관성이 있기 때문에 오히려 쉽다.
자바는
컴파일+인터프리티언어
위에서도 짧게 언급했지만 자바는 세탁기 냉장고에 담고 싶으니까 플랫폼 독립적이고 싶었다. 짧게 설명하자면,
인터프리티 언어는 한줄씩 통역해주는 언어이고,
컴파일 언어는 한꺼번에 통역해주는 언어인데,
자바는 이걸 둘다 쓰기로 했다.컴파일이 빠르지만 플랫폼 독립적이려면인터프리티를 써야 하므로! 그래서 먼저 ".class"파일로 중간 번역(컴파일)을 하면 각각의 운영체제에 맞게인터프리티로 실행하는 방식이다.
자바의 메모리 관리
c,c++는 메모리 관리를 프로그래머가 했었는데(cf. 포인터), 이것이 어렵고 까다로웠기에 자바는 이것을 알아서 해주는가비지 컬렉터(아무도 사용하고 있지 않는 메모리를 회수해주는 방식)를 통해 구현
그 외 쫌쫌따리 지식+...
명령프롬프트: 열리는 시점에 환경변수 참조한다. 그래서 다시 열어줘야 함import라고 위에 써있지 않으면 모두 java의lang패키지 안에 있는 함수들api= 사용설명서.- 모든 객체들은
Object 클래스로부터 상속받고 있다.- java api 들어가보면
메소드 오버로딩기능으로 이름은 다 똑같지만 다양한 변수로 사용이 가능하도록 만들어두었다. 사용자는 이걸 쓰기만 하면 된다.자바에서클래스로 정의된 것들은 실체가 아님: 단순히 설계도 : 설계도를 가지고 있다고 해서 컵을 사용할 수 있는 건 아님!
↳Hello h = new Hello(); // 실체를 만드는 것! Hello라는 설계도를 이용해서 h라는 인스턴스가 만들어진 것!
↳ system이라는 것을 실체화 한적이 없으나system.out하고 출력을 할 수 있는 이유는 위 name에static을 붙였기 때문
자바에서 클래스는 모두가 다 설계도; 틀이고, 설계도 안에 static이라는 키워드가 붙어잇는 것들은 미리 만들어서 메모리에 올려둠
자바의 변수
- 데이터 = 값 = 리터럴은 반드시 값을 담는 그릇이 필요하다. 국을 접시에 담을 수 없다는 점을 생각해보자. 그릇은 용도에 따라 다른 모양을 하고 있다. 자바 역시 값의 종류에 따라 다른 그릇을 사용한다. 즉, 자바는 변수의 타입이 중요한 언어이다. 이렇게 말하는 셈이다. "난 여기다 물만 담을 거야." "난 여기다 국만 담을 거야."
- 그런데 모든 언어가 자바처럼 변수의 타입을 신경 쓰는 것은 아니다. 접시에 과일도 담고 잡채도 담는 언어가 있다. 이렇게 막 쓰는 그릇은 물론 편하지만, 실행할 때 오류가 날 확률이 더 높다.
자바와 같이 그릇별 용도가 다른 것이강형 언어이고, 과일도 담고 잡채도 담는 것이약형 언어(자바스크립트, 타입스크립트)이다.
자바와 같은강형 언어는 컴파일 시점부터 오류 검거를 통한 문제 해결이 가능하지만, js 같은약형 언어는 컴파일 단계에서 문제 검거가 불가능한 번거로움이 있다.
💡tip. 코드 작성 중 빨간 줄이 나타나면 이것이 컴파일 오류날 거라는 걸 보여주는 것
코딩 꿀팁
- 주석 구구절절 x(고치기도 어렵고 코드 고칠 때마다 바꾸기도 쉽지 않음), 코드 자체를 도큐먼트화 하는 것이 좋다
- api문서 자주 들어가보면서 '내가 나중에 객체를 만들어도~~' 객체들을 바라보고 왜 저렇게 만들었을지, 왜 필요했을지 생각하기