웹개발생존기/JAVA_개발공부

JAVA 생초보 필기 - 기초용어편

개발하는 나비 2022. 7. 11. 18:30

 

왜 JAVA를 공부하는가? 

JAVA를 공부하는 이유는 간단하다. 

그 이유는 현장에서 기존의 프로그램들을 유지, 보수를 하는 과정에서

관리하는 데에 널리 쓰이고 있는 언어이기 때문이다.

 

( 공부의 방향성을 잡을 때, 무엇부터 해야하는가?의 기준으로는

개인적으로 현장에서 널리 쓰이고 있는 부분이며

가장 빠르게 알 수 있는 방법은 기업, 기관에서

구하는 인력에게 필요로 하는 능력이 무엇인지

채용공고를 보면 더욱 빠르게 알 수 있다는 점. )

 

이제부터, JAVA공부를 하면서

개인적인 이해를 돕기위한 예시/비유

필기/ 복습/ 실습해보기 과정을 블로그에 기록하려 한다.

(나와 같은 생초보들에게 도움이 되길 바라며...)

 

1. JAVA는 무슨 언어인가? (컴파일, 인터프리터)

 

자바는 컴 파일 언어다.

언어에는 두가지, 컴 파일/ 인터프리터가 있다.

 

- 컴 파일 언어란?

: 컴퓨터가 읽을 수 있게 파일로 미리 만들어 놓는 것

컴 파일 -> 빌드(건물을 만든다) - 빌딩을 지을 때 자재검수를 한다. 왜냐하면.. 무너지면 안되니까

자바/백엔드 언어는 보안을 위하기에.. 자재검수를 하는시간을 거친다고 생각하자.

 

ex: 고객이 오면 안내를 해! 

->  건물을 지은 순간부터는 안내가 바로 가능하니까 속도가 빠르다.

= 초기 실행시간이 느리다, 비용도 많이 들고 시간도 많이 든다., 

 

- 인터프리터 언어란?

: 파파고에 돌려보면 뜻이 ‘통역사’라고 나옴

ex: 푸틴이 러시아어 쓰고, 미국대통령이 영어를 쓴다,

이때 통역사가 물을 마시다가 목에 걸려 켈록거리면..

푸틴이 말을 하는데 동시통역이 끊긴다. 푸틴이 욕을 해도 끊김

-> 중간에 놓치면 회복이 안된다.

= 뒤로 되돌릴 수가 없음

-> 1년동안 고객이 안오면 일 안함

대신, 고객이 오면 바로 빌딩 짓는데

부실공사라서.. 엘리베이터를 짓다가 엘리베이터가 고장이 쉽게 나는걸 볼 수 있다.

대부분의 프론트엔드언어.

 

장점:

컴 파일 = 안정성, 사람을 많이 수용가능하고 쓰는 서비스, 안내가 바로 되기에 인터프리터에 비해 빠르다

인터프리터 =  같은 영역에서, 보여지는것만 달라지고 타입이 없기 때문에 유동성이 있음. (ex: 네이버 뉴스 이미지 칸, 웹툰 칸 등)

 

단점:

컴 파일 = 초기실행이 느리다,  빌딩을 지을 때 자재검수하는 전문인력이 필요하듯.. 어렵다.

인터프리터 = 안전하지 않다(자재검수를 하지 않았으니), 신경쓰지 않으면 프로그램이 죽어버린다.

 

 

컴 파일 인터프리터
정적언어 동적언어
타입이 있는 타입이 없는

 

2. 변수는 무엇일까?

: 흔히 변할 수 있는 수?라고 인식하기보단

변수= 박스라고 인식하자.

 

박스 안에 내용물은 무엇이든 언제든 넣다 뺐다 할 수 있다.

그리고 내용물은 변한다. 그렇기에 변수다.

 

책 넣으면 책 상자

연필 넣으면 연필 상자라고 불리겠죠?

-> 이게 왜 중요한가?

-> 컴 파일 언어와 인터프리터 언어라고 되어있는데 컴 파일 언어는 다른 말로 정적언어라고 하고

인터프리터는 동적언어라고 함, 컴파일은 타입이 있는 언어, 인터프리터는 타입이 없는 언어라고 불림.

-> 변수 기준으로 정해놓은 것.


문자 안에 숫자도 포함인 것임 => 0, 1, 2, 3을 쓰는데 문자를 쓰고 있는 거임

즉, 문자를 쓰는 거니까 숫자도 포함이란 거임

= ‘ 경우’를 뜻하는 거임, 경우라는 건 문자/숫자/시간 등

 

변수가 있다면 반대말은..?

: 상수가 있다. ex: 3.141592~~

: 나는 틀을 바꾸고 싶어! 나에게 파이는 5.141592~~라고 할거야!

라고 하면..?

: 출근시간은 9시인데, 나는 10시에 나갈거야!하면 ...

 

제대로 된 계산 값이 나올까? = No!!

그렇기에, 변하지 않는 수라는 뜻으로 ‘상수’라고 하는 것임.

 

 

컴 파일은 컴퓨터가 읽을 수 있는 파일로 만들어놓고 빌드(=짓다라는 뜻)를 해야함

빌드를 할 때는, 마치 건물을 지어야하는데 어떤 위치에 어떤 자재를 쓸지 정해놔야하고, 컴 파일은 타입이 있다라고 했으니

빌드를 할 때 자료형태(변수의형태:여기는 철근이야, 대리석이야)를 지정을 해놔야 건물에 문제가 생기지 않을 수 있다.

 

변수란 것에 ‘이거 철근박스야, 이거 대리석 박스야’

이런걸 컴 파일이 다 검사를 해준다.

 

‘이 박스에는 이거밖에 못들어와, 대리석에 철근 못들어와!’라고 한 것

= 타입이 있다란 것

 

and

철근 박스 안에 철근 동그란 것 넣든.. 사각형을 넣든..

철근이면 상관없는 상자다
즉, 변하는게 아니니 정적언어가 되는거임

 

인터프린터 언어는 타입이 없을 수 밖에 없음.

ex:

[읽는 순서]↓

a = 안녕

.

.

.

.

a = 5

읽으면서 주우우욱 내려오는데

그 안에 첨에는 a라는 변수는 ‘안녕’이라고 정의를 했다.

a는 5다 라고 했을 때 ‘a는 안녕이네? 어? 문자네?’ 했는데

 

내려가다보니 또 a가 5래, 아까 말했드 뒤로 돌아가서 보는게 안됨..

그럼 a가 5네 숫자네?라고 되니까

 

결론적으로 a가 안녕인지 5인지 검증이 안된다.

(뒤로 못가는데 .. 검증이 됨? 안된다.)

즉, 박스의 모양이 변하니까 동적언어라고 하는 거임

 

왜 되돌리기가 안됨?

-> 실시간 통역사, 실시간 송출이니까.

푸틴이 말하는데 통역사가 붙어 있는데 실시간 통역하는데 한번 지나간 말들은 재생이 안되니까요.

 


 

3. 객체지향

: 자바를 하면, 객체지향을 알아야 한다!

 

* 객체란?

우리 존재도 하나의 객체다, 인간이란 큰 틀 안에서의 객체이다.

우리는 객체를 '지향'한다. 

 (솔직히 공부하면서 많이 추상적이다라고 느낀 부분

공부하면서 익힙시다!)

 

즉, 객체란.. 예를 들어

인간이면 인간의 조건(이족보행/문자를 쓰고, 말하고/눈 두개 코 하나...)을

충족하면서 인간 개개인이거나

모니터 공장에서 모니터 틀에서 모니터를 찍어냈지만 각 고유번호, lot가 다름

건물들 하나하나, 자동차 하나하나

모두 공통점/일정한 틀을 가지고 있고,

 

(~란 )큰 틀 안에서의 각각을 뜻하는 것.

세상의 모든 것은 객체이다.

(A가 훼손된다고 해서 B가 훼손되지는 않음)

 

*객체의 요건

: 공통점을 가지고 있다.

 

예를 들어보자면..

에르메스 가방은 객체가 아님, why?

장인의 손길 하나하나..만들 때마다 달라서.

근데 공장에서 찍어나오는건 객체임.

 

*객체의 장점

: 즉, 애초에 틀을 하나 만들어놓으면 찍어내는대로 재사용이 가능하다.

 

객체지향의 특성

ex) 인스턴트 라면도 찍어내니까 객체

우리가 라면을 먹을 때 라면스프의 성분을 알 필요가 있을까?

맛있게 먹는게 목적일 때- 알 필요 없다라고 생각할 때

-> 캡슐화(봉지로 라면을 감싸니까) -> 은닉화(안에 있는게 보여지지 않는다.)

 

안에 신라면이 너구리로 바뀌면? 바뀌니까

= 다형성

 

 

객체에 대해 예를 들어봅시다.

클래스: 공장

객체: 인스턴스(트) 라면이라고 생각해봅시다.

 

농쉼공장에서는

주문이 들어오면

무슨 라면을 원해?

씬라면이요!

하면

 

면-> 씬라면 스프를 넣고 -> 포장지에 마감을 합니다.

요 공장에서는 씬라면만 생산할까요?

 

시인라면, 나구리 하나를 주문을 하면

공장에서 만드는과정이 다를까요?

나구리는 대신에 오동통한 면발인거죠. 스프 후레이크 넣고

핵심 다시마2개 포장지로 마감합니다.

 

포장된 라면은 객체입니다.

같은 공장에서 나왔지만 객체 모양이 다르다는거죠.

 

신라면

너구리

new 라면(); 새로운 라면을 주세요!

 

목표: 라면 클래스에서 객체를 만들자!

 

new 라면(“신라면”);

new 라면(“너구리”);

생산요청 = 생성자에게 요청을 한다.

생성자를 통해 라면을 생성한 거다.


4.그럼 클래스는 무엇인가?

 

라면 공장의 내부를 살펴보자.

(이해를 돕기위해 그려봤다.)

 

클래스 = 공장

변수 = 박스(컴파일 자재타입이 있는)

(라면을 생산하려면 자재가 필요하죠. 밀가루 후레이크 등

이런 것들을 박스에 담아놓고 팔아야겠쥬? 바닥에 내팽겨치면 안팔립니다..)

 

공장에는 그럼

후레이크 만드는 사람1

면을 넣는 사람2

다시마 한 개 넣는 사람3

= ~하는 사람 = 메소드

 

해석:

공장(클래스)에는

자재들이 있는 박스(변수)

일하는 사람(메소드)이 있다.

 

클래스는 안쪽에

멤버변수가 있다.

class : 멤버 변수

그 회사의 멤버가 아닌가

그렇기에 멤버 변수, 멤버 메소드라고 한다.

그리고 주문 받는 사람 : 생성자