Computer/Java, Kotlin

Java Study 1일차 : 개발환경 구성 및 메소드

kentakang 2018. 1. 3. 23:55
반응형

Java Study : 1일차

개발환경 구성 및 메소드


저도 수업을 들으면서 정리하는 내용들이라 놓치거나 부족한 점이 많습니다.

댓글 달아주시거나 연락 주시면 바로 바로 문제 있는 부분 수정하도록 하겠습니다.

이 수업은 C언어를 통해 프로그래밍의 기초를 배우신 분을 타겟으로 하는 수업입니다.

C언어를 배우신 적이 없어도 충분히 보실 수는 있지만, 약간의 어려운 점이 있을 수 있습니다.

하다가 어려운 점은 댓글로 남겨주시거나 연락 주시면 제가 할 수 있는 선에서 도와 드리도록 하겠습니다.


 자바는 Sun Microsystems에서 개발한 객체지향 프로그래밍 언어로,

 현재 Sun Microsystems가 Oracle에 인수되어, 라이센스는 Oracle이 가지고 있습니다.

 자바를 배우는 것은 인기 있는 언어인 것도 있고, 객체지향을 이해하기 좋은 것도 있지만

 가장 큰 이유는 취업하기 좋고, 한국에서 쓸일이 많다는 점이라고 생각합니다.

 전자정부 프레임워크가 자바로 개발되어 있어 우리나라 기업에서 자바 프로그래머들을 

 많이 뽑기 때문에, 저 같은 특성화고 학생들은 취업을 위해서 자바를 배우는 편입니다.

 하지만 제가 자바를 배우는 이유는 좀 다른 것 같습니다.

 취업을 준비해 두는 것도 있지만, 자바라는 언어에 흥미가 있고 재미가 있어서 배우기 시작했습니다.

 이번 수업을 들으면서 목표는, 당장 자바를 통해서 프로그래밍을 하는 것이 아니라,

 자바라는 언어를 이해하는 것이 목표입니다.



자바는 특이한 점이 많은 언어인데요,

자바의 가장 큰 특징은 플랫폼에 종속되어 있지 않다는 것입니다.

C언어와 같은 언어는 소스 코드를 머신 코드로 컴파일 하지만,

자바는 소스 코드를 컴파일러를 통해 .class 파일을 생성해 해당 클래스 파일을 자바 가상 머신이 구동합니다.

자바 가상 머신이 자바의 가장 큰 특징이라 할 수 있는데,

C 계열의 언어들은 윈도우에서 빌드한 프로그램을 Linux나 macOS 환경에서 구동할 수 없지만,

자바는 윈도우에서 빌드한 프로그램을 어떤 플랫폼이든 가상 머신이 있다면 구동할 수 있습니다.

미리 훌륭한 개발자분들이 여러 가상 머신을 만들어 두셔서 우리는 쉽게 자바를 이용할 수 있는거겠죠?


개발 환경 구성


우선 자바 프로그래밍을 하기 위해 개발 환경을 구성해야 합니다.

위에서 말했듯이 자바는 가상 머신을 통해 프로그램을 구동하기 위해서 우선 Java 가상 머신이 필요하며,

또한 자바를 통해 개발하기 위해서는 JDK(Java Development Kit) 가 필요합니다.

보통 JDK를 받으면 자바를 실행할 수 있는 JRE(Java Runtime Environment)가 함께 설치되기 때문에, 우리는 JDK만 설치해주면 됩니다.

Oracle 사이트에서 Java를 다운 받을때는 Java SE(Java Standard Edition)과 Java EE(Java Enterprise Edition)이 있는데,

이번 수업에서는 기초를 다룰 예정이기 때문에 Java SE를 설치하겠습니다.



http://www.oracle.com/technetwork/java/javase/downloads/index.html


Java SE 다운로드 페이지에 들어가면 위와 같은 화면이 뜨는데,

게시글 작성 기준으로는 Java SE 9.0.1이 가장 최신버전입니다.

JDK 밑에 있는 Download 버튼을 눌러 JDK를 다운받도록 하겠습니다.

각자 플랫폼에 맞춰서 JDK를 설치하고 나면,



이런식으로 각 운영체제의 쉘에서 java -version을 입력해서

자바의 버전을 확인해 볼 수 있습니다.



하지만 javac 라는 명령을 입력했을때는 찾을 수 없다는 메세지를 볼 수 있는데,

이 명령을 이용하기 위해서는 환경 변수 설정이 필요합니다.

저는 Windows 환경을 이용하기 때문에 

Windows에서의 환경 변수 설정만 설명하고 넘어가도록 하겠습니다.



제어판을 찾아서 들어가는 방법도 있지만 Windows + Pause Break키를 누르면 바로 시스템 정보 창이 뜹니다.

여기서 형광펜으로 색칠한 고급 시스템 설정을 눌러주면


이런 창이 하나 뜨게 됩니다.

여기서 환경 변수를 눌러서


PATH라는 환경 변수에 설치한 버전의 JDK의 bin 폴더를 환경 변수로 잡아주시면

javac 명령을 사용할 수 있게 됩니다.

자바 소스 코드를 컴파일하기 위해 꼭 필요한 명령이니, 꼭 환경 변수 추가를 해주셔야 해요.

이제 JDK 설치가 끝났으니, Java 개발을 할때 주로 사용하는 IDE(통합 개발 환경)인 Eclipse를 설치 해보겠습니다.



eclipse.org 에 접속해서 Download를 누르시면 위 사진과 같이 이클립스를 다운 받으실 수 있습니다.

게시물 작성 시점에서는 Eclipse Oxygen이 최신 버전입니다.

다운 받으신 파일을 실행하시면



위 사진과 같은 eclipseinstaller가 실행되게 됩니다.

더 수업을 진행하다 보면 Java를 통한 웹 개발도 진행하게 되니 2번째 항목인

"Eclipse IDE for Java EE Developers" 를 눌러서 설치해주세요.



설치가 완료되면 LAUNCH 버튼을 눌러 실행해주세요.



Eclipse를 실행하면 이렇게 Workspace를 지정하는 창이 하나 뜹니다.

Workspace에는 Eclipse에서 작업하는 프로젝트들이 저장됩니다.

기본으로 설정되어 있는 경로를 사용하시거나, 따로 지정해주세요.

제가 체크해 놓은 Use this as the default and do not ask again 이라는 설정은 

이 경로를 기본으로 설정하고, 다시 물어보지 않게 한다는 뜻입니다.



Launch 버튼을 누르시면 이렇게 Eclipse가 실행됩니다.

Java 프로젝트를 한번 생성해볼까요?

File -> New -> Project 메뉴를 눌러주세요.



Java Project가 보이네요.

Java Project를 클릭한 뒤 Next를 눌러주세요.



Project의 이름을 입력하라고 하네요.

저는 test라고 입력하고 Finish를 눌러 프로젝트 생성 마법사를 완료하도록 하겠습니다.



드디어 저만의 프로젝트를 만들었습니다!

왼쪽에 있는 Package Explorer에서 열려 있는 패키지의 구조를 보고, 파일을 열 수 있고

파일을 열면 가운데 비어있는 곳에 편집기가 나타나게 됩니다.

우선 클래스를 하나 만들어볼까요?

src는 소스 코드가 들어가는 폴더입니다.

src 폴더에서 오른쪽 클릭을 한 뒤 New -> Class를 눌러 클래스를 만들어봅시다.



여기서 알아두셔야 할 점이 하나 있습니다.

자바에서는 Class 이름을 지을때 첫 글자를 대문자로 해주셔야 합니다.

저는 Test라는 Class를 만들도록 하겠습니다.



Test 클래스가 만들어졌습니다!

하지만 뭔가 좀 허전하죠?

Hello, World를 출력하는 프로그램을 한번 만들어볼까요?



제가 코드를 한번 작성해봤습니다.

첫줄부터 차근차근 설명 해드리겠습니다.

우선 public static void main(String[] args) 부분은 C 언어의 main 함수와 같다고 보시면 됩니다.

자바에서는 함수가 아닌 메소드라고 표현을 하니, 앞으로는 메소드라고 하겠습니다.

String 자료형을 매개변수로 받고, return 값이 없는 메소드인 main 메소드 입니다.

아까 Eclipse 클래스 생성에서 그냥 지나쳤지만,



아래에 Which method stubs would you like to create? 라는 항목이 있는 것을 보실 수 있습니다.

여기서 public static void main(String[] args)를 체크해주시면 main 메소드를 자동으로 생성시켜 줍니다.

앞으로 자주 이용하게 될 옵션입니다.



다시 편집기로 돌아와서, System.out.println("Hello, World!") 는

밑의 콘솔 창을 보시면 알 수 있다시피 Hello, World!를 표시해 주는 기능을 합니다.

C언어의 표준 입출력 기능을 하는 것이 자바의 System 클래스라고 볼 수 있습니다.

println은 Print Line의 줄임말로, \n을 통해 줄 바꿈을 한 기능을 합니다.

줄 바꿈을 원치 않으시면 System.out.print라는 함수를 이용할 수도 있습니다.

이렇게 첫 클래스를 만들어 봤습니다.

그러면 이번에는 자바를 통해서 반복문을 한번 해볼까요?


이런식으로 c언어와 같이 for문을 통해서 짤 수 있습니다.

위의 소스 코드는 1부터 10까지 숫자를 출력하는 코드였죠?

한 줄에 출력해주기 위해서 System.out.println이 아닌 System.out.print를 사용해주었습니다.

중요한 점을 알려드리자면 C언어에서는 변수의 내용을 표시할때 printf("%d", variable); 과 같은 방식으로 사용하지만,

자바는 Python과 같이 System.out.println(variable + "내용"); 과 같은 식으로 +를 사용합니다.


이제는 자바에서 조금 중요한 부분을 보고 넘어가려 합니다.

바로 Class 입니다.

객체 지향 프로그래밍을 위해서는 꼭 알아둬야 할 중요한 개념입니다.

저는 People 이라는 Class를 만들어 보겠습니다.



이렇게 People이라는 Class를 하나 만들었습니다.

이 클래스에는 아무런 기능도 없어 보이지만, 사실 중요한 기능이 있습니다.

바로 객체를 만드는 기능인데요,



이런식으로 People 클래스의 인스턴스인 sana를 만들었습니다.

클래스에 의해서 만들어진 객체를 인스턴스라고 하는데요,

People sana = new People(); 로 만들어진 sana는 객체이고 sana라는 객체는 People의 인스턴스 입니다.

인스턴스라는 말은 어떤 객체가 어떤 클래스의 객체인지 관계 위주로 나타낼때 쓰이는 말이라고 할 수 있습니다.

클래스에 대해서 설명이 잘 되어 있는 사진이 있어 가져와 봤는데요,


출처 : https://wikidocs.net/214

                             출처 : WikiDocs 점프 투 자바


위 사진과 같은 개념으로 생각하시면 클래스에 대한 이해가 간단할 것 같습니다.

우리는 무수히 많은 인간 객체들을 People 클래스로 만들어 줄 수 있는거죠.



이런식으로 말이죠.

이제 People 클래스의 내용을 좀 더 추가해볼까요?

저는 사람들의 이름과 나이를 추가해주고 싶으니,



이런식으로 People 클래스에 name 변수와 age 변수를 추가했습니다.

이를 객체 변수, 혹은 멤버 변수라고 부르는데요.

이러한 객체변수는 객체.객체변수 의 방법으로 접근이 가능합니다.

예를 들어 sana의 이름을 미나토자키 사나로 지정해주고 싶다면,

sana.name = "미나토자키 사나" 이렇게 지정해주면 되는거죠.

그럼 제가 추가했던 People 클래스들의 이름과 나이를 넣어주겠습니다.



앞서 위에서 얘기했듯이 이런 식으로 객체 변수에 대입을 해 줄수 있고,

변수에 넣었으면 사용도 해봐야겠죠?



그냥 변수를 사용하는 것 같이 사용해주시면 됩니다.

아래에 우리가 대입해 준 값들이 제대로 표시되는 거 보이시죠?

이제 우리가 만들어 놓은 클래스를 약간 수정해 주려고 합니다.

우선 봐두셔야 할 게 있는데요,



바로 접근제어자라는 개념입니다.

접근 제어자는 private -> default -> protected -> public 순으로 많은 접근을 허용하는데요,

우선 private 부터 설명드리겠습니다.


private 접근 제어자는 위 표에서 볼 수 있다시피 같은 클래스에서만 접근이 가능합니다.



People 클래스의 객체 변수들의 접근 제어자를 private으로 설정해 주었는데요,

바로 Test3.java 파일에서 접근한 객체 변수들이 오류를 표시하는 걸 보실 수 있으시죠?

name과 age는 private 접근 제어자가 붙어 같은 클래스에서만 접근할 수 있기 때문에,

Test3 클래스에서 직접 접근을 하려고 하니 오류가 나는 상황입니다.



하지만 앞에 있는 private 접근 제어자를 지워주니 오류가 사라졌죠?

앞에 아무것도 안 붙어 있을때는 default 접근 제어자 입니다.

default 접근 제어자의 경우 같은 패키지까지 접근이 가능하기 때문에,

같은 test1 패키지에 속해 있는 Test3 클래스에서 접근해도 오류가 나지 않습니다.

나머지 접근 제어자들은 아직까지는 다룰 일이 없어, 다룰 일이 있을 때 다시 설명드리겠습니다.



다시 객체 변수들을 private으로 돌리고,

외부에서 객체 변수에 접근할 수 있게 하기 위해서 Getter 메소드와 Setter 메소드를 만들어줬습니다.

Getter 메소드는 앞에 get이 붙은 메소드로 해당 변수의 값을 리턴해주는 메소드이고,

Setter 메소드는 set이 붙은 메소드로 해당 변수의 값을 정하는 역할을 하는 메소드입니다.

우리가 People 클래스에서 객체 변수들의 접근 제어자를 private으로 설정해주고,

Getter, Setter 메소드를 만들어줬으니 Test3 클래스에도 반영을 해줘야 합니다.



실제로 Test3 클래스를 보면, People 클래스에서 객체 변수에 직접 접근하는 것을 접근제어자를 통해 막아놨기 떄문에,

기존에 직접 접근했던 소스들에서 오류가 엄청나게 발생하는 것을 볼 수 있습니다.

이를 이제 Getter, Setter 메소드를 통해서 접근 하도록 변경해주도록 하겠습니다.



코드를 메소드에 맞춰 변경해주었습니다.

똑같은 기능으로 작동하는 거 보이시죠?

하지만 Class를 사용할때는 객체 변수에 직접 접근하는 것보다 메소드를 통하여 접근하는 방법이 더 좋기 떄문에

앞으로는 클래스를 만들면 기본적으로 Getter, Setter 메소드를 만들어 준다고 생각하시면 될 것 같습니다.


1일차 수업 내용은 여기까지 였습니다.

상당히 긴 글인데 봐주셔서 감사합니다.

앞으로도 함께 배워 나가면서 발전할 수 있었으면 좋겠습니다.

감사합니다.

반응형