Java에 대한 메모. - 수업시간에 공부한 내용 노트 다 정리. 혹은 어딘가에 들어가기가 애매해서 따로 놓은 Stack.

Junhyeok Choi·2023년 2월 12일

Java 101

목록 보기
2/10

자바 언어특성

Reference
https://www.youtube.com/watch?v=eIrMbAQSU34
Programming with Mosh
https://www.youtube.com/watch?v=9yzMKaKcoC0
Amigoscode
Reference
https://docs.oracle.com/en/java/javase/19/
Java JDK 매뉴얼
수업에서 많이 쓰는 매뉴얼은
https://docs.oracle.com/en/java/javase/11/docs/api/index.html
https://docs.oracle.com/en/java/javase/11/
특히 더 많이 쓰는 매뉴얼은
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/package-summary.html
이클립스 환경설정(폰트 / 내부 시스템 아이콘 사이즈)
https://mi2mic.tistory.com/219

<3일차>

제어문

Historic
제어문은 2가지가 있음. 제어문이란 건 무엇인가?
모든 프로그램은 순서가 있다. 흘러내려가다가 순서를 skip하게 할 수도 있고, 흐름을 반복적으로 진행시킬 수도 있겠죠 즉 제어문에서 제어한다는 것이 도대체 무엇을 제어한다는 것이냐?
흐름을 제어하는 것이다.

0. 단축기 모음

Contrl + Shift + F --> 자동정렬
Control + Shift + O ---> import
Control + space --> 추천 명령어

1. Java란 무엇인가?

Java란 기본적으로 프로그래밍 언어다. 그 전에도 프로그래밍 언어는 여러가지가 있었음. C라는 언어를 주로 사용했었음. 큰 맥락에선 어셈블리어 -> C -> Java -> Python
현재는 Java와 Python 양대산맥임.

가장 중요한 건 Java라는 것은 기계어와 자연어 사이의 가교역할을 한다. 기계어(01010...)과 자연어(apple)을 변환해주는 기계기 때문에 항상 컴파일러가 있다는 걸 기억해야함. 여기서 기억해야할 건 컴파일러는 정해진 대원칙이 있고 내장된 함수(메소드)가 있다는 것을 기억해야함.
좀 더 정확하게 말해주자면, 기계어(OS-운영체제)

사용자는 웹이라는 서버에 요청을 하고, 이런 요청을 서버는 받아서 화면을 만들어요. 그 화면이 html로 만들어짐. 즉, html/JavaScript/CSS은 결과물이고(Web Client), 이 것이 사용자에게 주어지는 것임. - frontEnd
이 기술은 웹 클라이언트 기술임. 실제로 중요한 것은 결과물은 서버에서 만들어지는 것임을 생각해야함. 다시...중요한 것은 결과물은 서버에서 만들어짐.

고객이 잔액조회를 요청했습니다. 그 요청에 대한 처리는 모두 Java가 합니다. 즉, 고객의 요청에 대한 receiver는 Java가 하는 것임. Java는 고객이 요청한 것에 대해 database에서 자료를 access해서 가져온 데이터를 가지고 화면을 구현한다. (html/JavaScript) 왜 그 가져온 데이터를 가지고 화면을 구현할까? HTML과 JavaScript는 정적인 언어임. 요청을 할 때마다
기획에서 일이 오면 업무부서와 협업을 함.

소스(=코드)라는 건.

  1. 역사
    웹과 Java가 같이 성장했다. 2000년도 y2k 사태로 이를 대비하기 위해 노력을 하는데 특히 은행은 다 Java로 개발하게 됨. 2005년까지 이 기세는 계속됨. 전세계적인 일이다. 단순히 한국만 그랬던 것이 아님. Spring이라는 프레임워크가 2005년 때 나오게 되고, Java 언어 하나로 그냥 하드코딩하기엔 너무 힘드니깐, Spring이 등장하는 것임. JQuery도 마찬가지임.
    Java는 이렇게 폭풍성장해서 엄청난 시스템을 만들어냄. 수많은 돈을 쏟아내서 개편을 다했으니 더이상 전산시스템에 더 투자할 필요가 없었음. 2005년을 정점으로 Java 시장은 저물어들어가고, 더이상 개편이 필요가 없어져서 시스템 회사가 많이 저물게 됨.
    2010년까지 이어짐. 이 때 IBM은 판매회사가 아니라 솔루션 컨설팅업체로 변화하게됨. 2010년에 4차산업혁명이라는 단어가 유럽에서 먼저 나오게 됨.(다보스포럼 2010) IT산업은 2005년부터 2010년까지 힘들어졌으나 2010년에 Big Data와 A.I 그리고 Cloud 개념이 앞으로의 산업 표준이라고 pin point를 정해줌.
    --> 다보스 포럼이나 이런 것들이 굉장히 큰 영향을 미치는구나.
    이 때 기술의 혁신이 이뤄지면서 스마트폰이란 디바이스가 이를 실현할 수 있게 되고, 이를 정점으로 발전이 이뤄짐.

우리나라에서 빅데이터를 할 수 있는 회사는 삼성뿐이다. 글로벌 데이터가 엄청 많아야함. AI는 새로운 패러다임이다. 하루에도 수억명이 운영하는 회사가 AI를 지배할 수 밖에 없음.

클라우드는 지금은 그냥 당연한 것임. 옛날에는 국민은행 전산센터 큰 곳에 컴퓨터 서버를 만들고 운영인력 만들고 한 건물에 다 밀어넣어놓음. 매해 유지보수하고 비용을 천문학적으로 쏟아야함. 그런데 클라우드 회사가 이를 통일시킴. 아마존 웹서비스 등이 이 때 큰 것임. 규모의 경제가 여기서 이뤄진 것. AI는 그들만의 리그. 빅데이터 TF는 절대 이뤄낼 수 없음. 그 데이터 수준은 정말 매우 많이 쌓여야함. 10년치 데이터로 미래를 예상할 수 있는 데이터 양이 아님. 빅데이터는 사실상 AI에 쓰이고 있고, 이제 빅데이터라는 이야기는 AI의 하부개념으로 들어오는 툴이지 더이상 독립적인 이야기가 되진 않을 것임. --> 마이데이터부는 그다지..
즉, 중국도 이게 안되는 상황임. 3개의 업체가 메이저업체인데 어떤 회사가 가장 많은 데이터를 만들 수 있냐? 즉 데이터 양이 천문학적인 수준이어야함. 은행에서 자체적으로 챗봇 만들 수 없다. 빅데이터는 그저 tool임. 그 자체가 목적이 아님. 은행의 빅데이터는 앞으로 장치 장비의 유지보수를 위한 빅데이터 분석으로 이뤄질 가능성이 높지. B2C로 고객 빅데이터 분석은 일어나기가 어려움.

자바의 특징 5가지 - 자바는 왜 인기가 있을까?

Java = SE / EE / ME 3가지 버전으로 나옴. Standard Edition, Enterprise Edition, Micro Edition.
Micro Edition --> Kiosk, ATM. 근데 대부분의 키오스크는 C로 되어있고, 실패해서 없어짐. 하지만, Java MicroEdition은 안드로이드로 발전하여, 이를 Google이 가져가게 됨.

1. 플랫폼 독립적

Java가 가장 인기가 있는 이유임. 예를 들어 유닉스만 해도, 하드웨어에 따라 유닉스가 달라져서, IBM 유닉스, DELL 유닉스, Sun 유닉스.....하다못해 서버에 다양한 기계가 있으면 그 기계마다 유닉스가 달라서 IBM 유닉스에서 짠 소스는 DELL 유닉스 체제에서 안돌아감. 얼마나 불편하냐?
그에 대한 솔루션으로 운영체제와 관계없이 실행가능하게 Java가 가능하게 함. 즉, 윈도우에서 .exe는 Java에서 class임. Mac에서 .app는 Java에서 .class임. 즉, Java에서 짜인 .class는 다른 모든 OS에서 다 가능함. 그걸 가능하게 하는 것이 JVM (Java Virtual Machine) 즉, 가상머신임. 다시말해, 과거엔 매번 엔지니어 불러다가 해야했던 일을 가상머신이 이를 대신해줌. 이 운영체제별 JVM은 오라클에서 각각 개발해줌. 알아서 변환될 수 있도록.

2. 객체지향언어 OOP

(Object Oriented Programming)
JavaScript는 linear하게 진행이 된다. 1000라인 10000라인 되면 그 코딩양을 이해할 수가 있겠냐. 스파게티 코드가 됨. Java는 기능마다 잘잘하게 쪼갠 거임. 그럼 내가 뭔가를 수정하고 싶으면 그 기능(Method or Class)만 열어서 수정하면 됨. 즉, 조각조각 낸 퍼즐이기 때문에 퍼즐 한 부분이 문제면 그 부분만 고치면 되는데 JavaScript처럼 linear interpretation 언어는 그렇게 정정하려면 논리흐름을 하나하나 다 열어봐야해서 사실상 안된다고 봐야함.
javaScript 언어는 만들어지는 곳은 서버에서 하지만, 구현과 실행은 사용자의 디바이스에서 이뤄짐. 정확하게는 브라우저에서 이뤄짐.
JavaScript 언어같이 linear한 언어를 Script언어라고 워딩하고, Script언어는 심지어 결과도 곧바로 볼수가 없고 브라우저에 가서 봐야알 수 있음.
Java같은 레고블럭같은 언어를 Compile언어라고 워딩함. Java는 컴파일러를 해야함.
과거엔 JS는 천대받았음. 잘 안쓰였기 때문임. 사용자가 많아지면 인기가 많아짐.
진리임. 사용자와 니즈가 많아지면 몸값이 오름.

3. 함수형 코딩지원

어려운 표현이지만, 이를 람다식이라고 함.
코드가 간결하게 짜일 수 있다는 것임.

4. 분산처리지원

Java는 한 컴퓨터에서 다른 컴퓨터로 가는 게 굉장히 쉽다. 다른 언어가 안된다는 건 아니다. 그런데, 1000만명 2000만명에게 원활한 서비스를 하려면, 은행에서 가장 민감한 게 특정 날짜를 위해서 서버를 100대 안 쓸 걸 둘 수가 없잖아. 어찌 되었든간

더 나아가선, 이 쪽에 불이 나더라도 다른 곳에서 바로 실행될 수 있게 하는...만약 카카오가 이런 분산서버가 있었다면 사고가 나지 않았겠죠...

5. 멀티 쓰레드 지원 = 멀티태스킹가능.

뭔가 하나를 하고 있으면(예를 들어 뭐 pc로 치면 내가 인터넷을 하고 있는데) 다른 하나를 하려면(카톡을 키려면) 멀티태스킹 지원이 되어야함. 즉, 백그라운드에서 그 프로그램이 돌아가야함.

전산실에선 Java를 반대함. C보다 빠른가? 검증이 되었는가? 누가 책임질래? 그 때 치고 나아간 곳이 포털회사임. Web이라는 곳에서 개발은 Java환경이 더 큼.

조금 더 정확하겐 서버에 수많은 사람들이 접속할 때 동시접속했을 때 서버가 수많은 프로그램을 돌려야하는데, 동시에 여러 서비스를 제공할 수 있게 하는 것이 멀티 쓰레드다.
Server는 명확하겐 2개다. Web Server와 Web application Server. 정적인 정보(예를 들어, 개개인의 정보가 필요없는 경우...단순한 공지사항)는 이 1단계 서버에서 빠르게 처리해준다. 반면, 동적인 정보(예를 들어, 개개인의 정보가 필요한 경우...계좌정보 잔액...)은 2단계 서버에서 DataBase에 접속해서 가져가는 경우임.

사용하지 않는 객체는 자동으로 메모리에서 제거함. 과거 개발자들에게 가장 중요한 것은 메모리 관리였음. 메모리에 프로그램이 올라감. 즉, 프로그램을 실행하면 순서대로 하나하나 변수를 불러서 메모리에 호출하고 기록하고 제거되는 식임.
서버의 퍼포먼스는 메모리 사용량을 줄이는 것임.

과거엔 개발자들이 코딩 내에서 메모리를 clear해주는 코드를 짜야했으나 Java는 메모리를 자동으로 제거해줌.(내장)

6. 막대한 규모의 커뮤니티

막강한 오픈 소스 라이브러리들이 있음.(JavaScript의 라이브러리처럼)

프로그램을 공부할 때 공통적인 사항

  1. 개발환경세팅
  2. 구조를 익히고
  3. 변수(모든 프로그램을 변수가 기본)
    변수 체계가 어떻게 되어있는가?
  4. 제어문(if문)
    흐름을 제어하는 방법.
  5. 반복문(for문 while문)
    여러개를 돌리는 방법.
  6. 배열

  1. API
    최소값 최대값이라든지 기본 내장 API
  2. OOP
    코드를 체계적으로 작성하기 위한 방안.
  3. 예외처리
    abnormal한 상황(개발자도 모르는) 예를 들어, ATM에 스포츠센터 카드를 넣을지 어떻게 예상하냐? 이것이 매우 중요하다.

=============
그 외엔 제너릭, 람다식 등이 있음.

워드문서와 같음. 워드 문서를 작성하면, 그 작성된 데이터는 저장이 되지만, 실제로 보이는 결과물은 OS에서 나오는 결과물.

println은 그래서 쓰면 안됨. OS에 빨대를 꼽는 거기 때문에 이게 있으면 OS가 터질 수도 있음. 과부하.

Java는 처음 열릴 때 java.lang Package를 먼저 연다.

java.lang 이외의 package에 있는 API를 쓰고 싶다면, public class 위에
import API 이름 ; 를 넣어줘야한다.
예를 들어, import java.util.Random;

기타 내용

은행은 JSP로 90%이상 구축되어있고, 아주 오래된 프레임워크를 사용함. 매우 변화가 없는 조직.
Save만 눌러주면, 컴파일화 되는구나. 그럼, bin이라는 폴더 안에 들어가는데 이는 JVM만 알 수 있는 코드로 바뀌는 것이다. 이 bin폴더 안에 있는 것을 바이트 코드라고 함. JVM은 메모리를 할당하고, main메소드가 실행하는 것임.
바이트코드가 JVM을 거쳐 window에서 돌아갈 수 있게 바이너리로 바뀌는 것이고, Mac에서 돌아갈 수 있게 바이너리로 바뀌는 것이다.

명명규칙

Package는 소문자 (의외지) 왜냐면, class가 대문자라서
Class는 대문자로 시작.
Variables도 소문자로 시작

Argument란 무엇인가?

Swith( aaa ){  }

aaa와 같이 괄호 안을 argument라고 한다.

profile
Just do it jun

0개의 댓글