Java/Java Study

java 스터디 1주차(1/11~17)

모모토 2021. 1. 15. 02:38
반응형

쉽게 배우는 자바 COURCE 

CHAPTER 4-1 ~ 4-3

 

˙ JAVA공부의 시작 'eclips'

 

JAVA라는 객체 지향 프로그래밍 언어를 이용하여 코드를 짜고 디버깅을 하기 위해선, 이를 도와주는 통합 개발 환경 (IDE, Integrated Development Environment)가 필요하고 이번 강의를 들으며 내가 쓰는 IDE는 바로 eclips이다.

 

˙ Eclips 그리고 Compile

 

eclips의 핵심은 바로 compile!

 

우리가 이클립스를 이용하여 'JAVA SOURCE CODE(. JAVA)' 내가 하고자 하는 일을 지시하는 코드를 작성, 이 코드를 컴퓨가 읽기 좋게끔 변환하여 JAVA APP(. CLASS), 클래스를 만드는 것이 바로 'COMPILE'

 

▩ 생각해보기

 

1) 클래스 파일은 왜 필요한가?

 

컴퓨터에게 우리가 원하는 지시를 내릴 때, 컴퓨터는 인간의 언어를 이해하지 못한다 따라서 이클립스라는 개발환경을 통하여  JAVA APP(. CLASS) 즉, 프로그램을 만들어야 한다.

 

2) 이번 강의와 같은 과정을 이클립스 없이 하려면 어떻게 해야 하는가?

 

CMD 나  JDoodle(https://www.jdoodle.com/)을 이용해 봐야 하지 않을까

 

 

 

˙ HelloWorld

 

HelloWorld를 출력하는 기능을 가진 어플리케이션을 만들었다.

 

※ 기본 자바 명령 순서 -> class의 main에 속한 중괄호에 있는 코드를 실행한다.(나의 명령이 실어질 곳!)

 

 

IDE, eclips를 통하여서. java를 작성하고 compile을 통하여. class로 저장하며, console을 통하여 내가 작성한 코드가 프로그램으로 잘 만들어졌고 이것이 잘 작동하는지 확인하는 과정을 통하여 자바입문을 성공적으로 마쳤다.

 

내가 작성한. java는 프로그램을 실행시키는 소스(SOURCE) 이자 코드(CODE), 언어(LANGUAGE)라고 통용되지만,

제일 중요한 것은 이 소스가 바로 프로그램을 구현시키는 '원인'이라는 것

 

 

 

˙ 어떻게 작동하는가? 

 

코드도 작성해 보았고, 실제로 어플도 만들어 보았는데 이쯤에서 자바의 작동원리를 정리해보면

 

인간의 언어. Java를 컴퓨터가 읽기 쉽게끔. class로 변환하여, 애플리케이션(=프로그램)을 만들고 비로소 컴퓨터에서 run! 

 

 

다음 그림을 참고해보자

출처 - 네이버 boostcource , 쉽게배우는자바

 

. class로 변환한 나의 코드가 컴퓨터로 가기 전 잠시 어딘가 들르는 듯하다 , JVM? 이게 뭐야 

 

 

˙ JVM (JAVA Virtual Machine, 자바 가상 머신) <★중요>

 

앞서 우리는. java를. class로 컴파일하여 컴퓨터로 보내 run 한다고 정리를 하였는데, 사실 우리는 컴퓨터로 가기 전 JVM이 알아들을 수 있는 기계어 즉, 중간 코드(. class)를 만든 것이다. 참고로 이를 JAVA bytecode라 한다. 그리고 이 JVM은. class를 읽고 난 다음에야 컴퓨터를 동작시킨다.

 

 

▩ 생각해보기

 

1) 자바의 동작 원리

 

출처 - _Jbee 님 블로그 , https://asfirstalways.tistory.com/

 

. java 작성 --(compile)-->. class 생성 --(RUN)--> JVM --(RUN)--> computer 작동

 

 

2) 왜 자바의 실행 과정 중에 JVM이 끼어있는 것일까요? 컴파일을 거쳐 바로 컴퓨터를 실행시키는 것은 안될까요?

 

JVM을 거쳐야 하는 건 알겠는데 '왜' 거쳐야 하는가 하면 핵심적으로 2가지의 이유가 있을 수 있다.

 

첫 번째는 JVM은 JAVA와 OS 사이에 중개자 역할을 수행 따라서 OS에 구애받지 않고 재사용을 가능하게 해 준다.

-OS에 구애받지 않고 재사용을 가능하게 해 준다는 게 무슨 의미인지 잘 모르겠다...

 

두 번째는 가장 중요한 메모리 관리를 해주어 한정된 메모리를 효율적으로 사용하여 최고의 성능을 내기 위해서다.

 


 

 

쉽게 배우는 자바 COURCE 

CHAPTER 5-1 , 5-3

 

˙ 데스크톱 애플리케이션을 만들어봅시다.

 

개인적으로 용어에 관한 편집증을 가지고 있어서 처음에 데스크톱 애플리케이션이 거창한 프로그램인 줄 알았는데 그냥 '데스크톱 창'을 만드는 것이었다. 웹 공부를 시작하시는 분들은 저처럼 겁먹지 마시고 대범한 자세로 용어나 개념을 받아들이시길

 

시작하기 앞서서 용어 정리!

 

GUI (Graphical User Interface) : 그래픽으로 화면을 구성하고, 마우스 키보드로 입력을 받을 수 있도록 지원하는 사용자 인터페이스, 자바에서 GUI는 AWT와 Swing 패키지로 GUI 컴포넌트를 제공했다.

 

AWT (Abstract Windowing Toolkit) : 자바 초기 gui 프로그래밍 도구로써, 운영체제의 리소스를 사용한다. 따라서 운영체제의 변화가 있을 시 영향을 받는다.

 

Swing : 순수 자바 컴포넌트 패키지로써 자체 리소스를 사용하므로 운영체제와 독립적 AWT의 업그레이드 버전

 

gui는 그래픽을 통해서 하드웨어와 상호작용하는 환경이다. 우리가 앞서 텍스트 기반의 애플리케이션으로 HelloWorld를 출력했다면, 이번엔 그래픽을 이용하여 데스크톱 창에 HelloWorld를 출력할 것이다!

 

 

HelloWorldGUI 프로젝트

 

swing 패키지를 이용한 helloworldGUI 프로젝트 완성, 필자 같은 경우 10번째 줄의 명령어를 수정함으로써 GUI의 크기를 조절하였다.

 

 


 

 

쉽게 배우는 자바 COURCE 

CHAPTER 6-1 ~ 6-5

 

˙ 데이터와 연산

 

'컴퓨터는 데이터를 가지고 연산을 하는 기계라고 할 수 있습니다.'

 

컴퓨터가 숫자(Number)를 계산하고, 문자열(String)을 배열하고 검색하는 행위를, 데이터를 연산한다고 표현한다. 이러한 데이터 타입들을 우리는 java를 이용하여 제어할 것이다. 하지만, 우리가 이런 데이터들을 효율적이고 빠르게 다루기 위해서는 이 자료들의 정리정돈이 잘되어있어야 한다. 마치 약국의 조제실처럼 어디에 무슨 약이 있어서, 환자의 병명에 맞게 이약 저 약 빠르게 꺼내서 조제하는 것처럼 말이다.

 

*자료형이란?

숫자, 문자열, 영상, 소리 등은 데이터 종류로써 각각의 연산 방식이 필요하다. 이들은 각각의 데이터 종류 즉 '자료형'을 갖고 자신의 자료형에 해당하는 데이터들의 집합인 자료형 체계에서 서로 연산될 때 프로그램은 오류 없이 작동한다.

만약, 해당 자료형에 맞지 않는 값이 할당되어 연산이 된다면 이를, 자료형 오류라고 부른다. 논리적으로 이 데이터는 해당 자료형이 아니어서 해당 자료형 체계에 있어선 안 되는 상황이기 때문에 이런 자료형 오류가 발생하는 상황이다.

 

 

▩ 생각해보기

 

1) 이번에 언급된 데이터 타입 이외에 어떤 데이터 타입이 필요할까?

 

 

2) 앞서 생각한 데이터 타입에 어떤 연산 작업이 필요하다고 생각하나요?

 

 

 

 

˙ 데이터 타입, 아 그래서 어떻게 연산한다는 건데? - 1) 숫자와 연산

 

꿀팁) sysout + ctrl + space bar -> System.out.println(); 괄호안을 표현 자동완성!

 

main의 괄호 안의  system.out.println(); 는 기본적으로 숫자를 출력하는 명령어이다. 문자열을 출력하고 싶다면 ("") 안에 추가해서 작성해야 한다.

그렇다면 이제 괄호 안에 무엇이 들어가 어떻게 인식되느냐를 따져보자, 괄호() 안에 6이 들어가 (6)이라면, 숫자 6이 인식되어 출력된다. ("6")은 숫자 6이 아닌 문자열로 인식된다 이게 무슨 의미 일까?

 

바로 연산의 종류가 바뀐다는 뜻이다.

 

(6+6) = 12이지만, ("6"+"6") = 66으로 출력되는 것처럼 괄호 안에 어떻게 적느냐에 따라 자료형이 바뀌고 그에 따른 연산 방법도 달라진다

 

 

 

1) 숫자에서는 +와 *와 같은 연산자를 사용했는데 문자열에서는 연산은 수행하기 위해. length()와 같은 형식을 사용했습니다. 숫자에도 연산자 이외의 형식을 가지는 연산 종류가 있을까요?

2) 문자열에서 쓸 수 있는 다른 연산은 어떤 것들이 있을까요?

 

 

˙ 연산 도구 - Math

 

우리는 java를 이용하여 데이터를 체계적으로 정리 정돈하여 효율적으로 사용해야 한다 그리고, 그 데이터들을 빠르고 편리하게 다룰 도구도 존재한다 바로 Math 클래스이다. 이 math 클래스는 함수의 연산, 절댓값 변환 등 단순 계산을 넘어 비교적 더욱 수학적인 영역을 다룰 도구이다.

 

 

▩ 생각해보기

 

1) PI, floor, ceil 이외에 Math에서 제공하는 기능이 어떤 것들이 있는지 찾아보자

 

Math.abs(); : 절댓값을 반환해주는 기능을 가진 math클래스 도구이다.

 

 

˙ 문자열의 연산 - Character vs String

 

기본적으로 문자열의 입력은 "" 안에 작성한다, 하지만 '' 안에 작성하면 자바는 문자열이 아닌 문자로 인식하며, '' 안에는 하나의 문자밖에 들어가지 못한다는 걸 가볍게 새기고 가자

 

다시, Character는 문자, String은 문자열 즉 문자들의 나열이다. 자바에서 표현해보자면,

'H'는 Character이고 , "H"는 String이다. 자바가 H를 문자로 인식시키는가 아니면 문자열로 인식시키느냐는 아주 다른 것이고 정보를 정리 정돈하는 데 있어서도 매우 중요한 것이다. 구분을 잘하는 것은 어쩌면 코딩을 잘할 수 있는 재능일 수도

 

Character와 String의 정보가 더 필요하다면 아래를 클릭해보자, 나도 아직 이해를 다 못했다.

docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

 

˙ Escape 기호 , \

 

자바에서는 \가 아닌 역 슬래쉬로 나오는 이 기호는 특정 문자와 결합하여 쓰일 시 제어 문자가 되어 줄 바꿈을 해주기도 하고,  " 같은 자바 내에서 특정한 역할이 있는 특수문자들 옆에 붙어 , \" 이런 식으로 쓸 경우 " 가 가지고 있던 역할을 지워버리고 일반 문자로 나타내 주는 역할도 한다. 따라서 escape라는 이름이 붙은 것이다.

 

문자와 문자열의 표현차이,  \의 쓰임새 실습 \의 정의를 잘 생각해보며 실습에 쓰인 코드를 이해해보자

 

▩ 생각해보기


1) \n과 같은 제어 문자들은 왜 생겨나게 된 것일까요?

 

2) \n 이외의 다른 제어 문자들은 어떤 것이 있을까요?

 

 

▩ 간단한 문자열 실습

 

 

name에 괄호를 친 이유는 만약 내용중에 다른 name이 존재할시 구분하기 위한것이라고 생각이 됨

 

 

. length 나. replace 등을 이용하여 문자열을 조작해볼 수 있었고, 수작업으로 장시간 노동을 해야 하는 그런 수고를 덜어줄 수도 있다는 걸 알 수 있다. 개발 공부를 열심히 하여 남에게 상처를 입히는 해를 끼치는 일이 일어나지 않도록 하자

 

 

 

 

 

 

▩ 생각해보기

 

1) length와 replace 외에 String 데이터에서 처리할 수 있는 명령들을 댓글로 공유해 보세요.

2) 이러한 명령들로 어떤 일을 할 수 있을까요?

 


 

쉽게 배우는 자바 COURCE 

CHAPTER  8-1 ~ 8-3

 

˙ 자바에서의 변수란

 

자바에서의 변수란 우리가 아는 변수와는 사뭇 다른 느낌이다. 수학에선 식에 따라 변하는 값을 의미한다면, 자바에서는 변수의 데이터 타입을 정해버린다.

 

변수 'a'를 만들면서 우리는 이 변수가 정수(int), 그중에서도 1임을 정의했다. 따라서 a를 넣었을 때 1을 출력

자바에서 왜 변수를 사용할까? 자바에서 변수를 사용한다면 다른 말로 곧 데이터 타입을 지정한다는 것이다. 그렇다면 왜 데이터 타입을 지정하는 것일까? 그것은 바로 데이터의 타입을 바로바로 판단하여 사용할 수 있기 때문이다. 따라서 그 변수에 어떤 데이터가 포함되는 데 성공했다면, 그 값을 사용할 때 다시 한번 검토할 필요도 없이 내가 원하는 타입의 데이터임이 틀림없다.(물론 데이터의 타입을 정하는 것은 매우 엄격하게 관리되어야 한다.) 따라서 효율적으로 연산을 하거나 데이터를 처리할 수 있다는 것

 

▩ 생각해보기


1) 컴퓨터 프로그래밍 언어에서 변수는 수학에서의 변수와 어떻게 다른가요?

 

2) 자바에서는 왜 변수의 데이터 타입을 지정하는지 생각해봅시다.

 

3) 자바에서 숫자 데이터의 세부적인 분류에 대해 더 알아보세요.

 

4) 자바에서 변수의 데이터 타입을 바로바로 판단할 수 있다는 것은 어떤 편의성을 가질 수 있을까요?

 

 

˙ 변수의 효용

 

그래서 변수를 설정하는지 이해는 가지만 뭔가 와 닿지는 않는다, 나만 그런가? 우리가 변수를 설정함으로써 우리가 얻는 효율이 무엇인지를 알아보자

 

name 의 변수를 String으로 설정 , 그값은 hoon 

 

컴퓨터에서 연산은 가끔 반복적인 동작을 하는 경우가 많다 그럴 때 변수 코드 한 줄을 추가해주면 우리는 그 반복적인 작업을 일일이 수작업으로 해야 할 필요가 사라진다는 것이다. 즉 우리가 설정한 변수를 계속 재사용한다는 것! 얼마나 효율적인가?

 

그리고 가장 중요한목적은 바로 '가독성'이다, 이게 무슨 말인가 하면 개발을 하면서 프로젝트를 여럿이서 진행하는 경우 남이 나의 코드를 볼 경우가 생기고 그럴 때 내가 정한 변수의 이름을 나만 알게 지으면 서로 프로젝트를 진행하면서 어려움이 생길 수 있다. 개발에 있어서 협업은 아주 중요하고 협업에 있어 소통이 원활함은 엄청난 시너지이기 때문에 이 변수의 이름을 잘 정하는 것도 개발자의 재량이라고 할 수 있겠다.

 

따라서 변수의 효용은 두가지 키워드로 요약하자면 재사용의 용이함, 가독성 명심하자!

 

▩ 생각해보기

 

1) 변수의 효용과 변수를 어떻게 사용하면 좋을지 댓글로 공유해 주세요.

 

 

˙ 데이터 타입의 변환 - casting

 

변수의 효용도 배워봤고 변수가 얼마나 중요한지도 어느 정도 감이 온다, 그렇다면 만약 엄청나게 재사용을 하고 있는 변수의 데이터 타입을 바꿔야 할 때가 온다면 바꾸는 게 가능할까? 가능하다면 어떻게 바꿀 수 있겠는가?

 

※ CASTING은 어려운 개념이므로 이런 게 있구나 이 정도로 이해하고 나중에 작업하면서 CASTING으로 인한 문제가 생길 시 공부해보자!

 

 

double이라는 데이터 타입은 '실수'를 의미한다. 따라서 a , b를 출력할 때 온전히 , 손실 없이 출력된다고 말한다.

int는 '정수'라는 데이터 타입인데 변수값이 1.1로 타입에 맞지 않는 값들이다. 자바는 당연히 이를 감지하고 우리에게 올바른 길을 두 가지나 제시한다. 하나는 Add cast to 'int'라는 명령어로 해당 데이터를 손실을 보면서라도 정수 값으로 맞춰서 출력하겠다는 선택지이고, 다른 하나는 데이터 타입을 double로 바꾸어서 손실 없이 데이터를 출력하겠다는 선택지이다.

 

각각의 방법으로 바뀐 명령어와 결과

 

▩ 생각해보기

 

1) Casting에 대해서 알게 된 것을 댓글로 정리해 보세요.

2) 실수를 문자열로 변환하려면 어떻게 해야 할까요?

3) 정수 1과 정수 2를 나누었을 때 우리가 원하는 값이 나오게 하려면 어떻게 해야 할까요?

 


 

쉽게 배우는 자바 COURCE 

CHAPTER  9-1 ~ 9-3

 

 

˙ Programming이란 무엇인가?

 

우리가 배운것은 JAVA라는 프로그래밍언어이다. 우리는 이 언어로 컴퓨터에게 명령을 하달하기 위하여 그에 관련된 것들을 배웠다. 프로그래밍은 컴퓨터에게 우리가 할일을 시키는것이다. 따라서 우리는 컴퓨터를 이용한 자동화된 처리를 사용할 수 있게 되는것이다.