클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

자바 시작 3 - 자바 프로그램 개발 및 자바 언어의 활용 + 단원 연습문제 풀기 본문

프로그래밍 언어/자바

자바 시작 3 - 자바 프로그램 개발 및 자바 언어의 활용 + 단원 연습문제 풀기

huenuri 2024. 8. 7. 07:44

아침을 먹고 나니 10시 반이 조금 넘었다. 30분만에 빨리 먹고 어서 공부를 하고 싶었다. 어제 오후부터 사실 쫄쫄 굶다가 아침도 늦게 먹은 셈이다. 글을 쓰고 공부하다 보면 밥 먹는 것을 잊어버릴 때가 있다. 이렇게 밥 먹는 것보다 더 재미있는 것이 자신이 열정을 갖고 있는 분야라고 한다.
조금 전에 2번째 학습에서 건너뛴 부분이 있어서 이 포스트에서는 그 부분을 학습하고 나머지 뒷장의 내용도 이어갈 생각이다.

여기까지 하면 1장이 끝나는데 연습문제가 남아있다. 문제가 정말 많아서 그 부분은 따로 다루어야 할 것 같다.
그럼 아침 공부를 본격적으로 시작해보자!


 

 

자바 프로그램 개발

“헬로2030”을 출력하는 간단한 자바 프로그램을 작성하고 컴파일하는 과정을 배워보자.

 

자바 소스 편집

이클립스는 사용하지 않고 메모장을 이용하여 다음과 같이 저장한다. 자바에서는 클래스 이름과 소스파일의 이름이 일치해야 한다. 파일 이름은 Hello2030.java로 저장한다. 클래스 명에 대소문자를 구분하므로 주의해야 한다.

 

소스 코드 설명

  • public class Hello2030 : 이름이 Hello2030인 클래스를 선언
  • public static void main(String[] args) : main() 메소드를 선언
  • int n - 2030; : 지역 변수 n을 선언하고 2030으로 초기화
  • System.out.println("헬로"+n) : 문자열과 변수 출력

 

 

자바 소스 컴파일

명령창을 실행시켜 캄파일한다.

 

 

 

 

 

 

난 path가 설치되어 있지 않는지 이상한 오류가 계속 떴다. 근데 이클립스를 실행한 후로 이상하게도 바탕화면 아이콘이 잘 실행이 되지 않는다. 그전에도 이런 문제가 가끔씩 발생했는데 컴퓨터를 껐다가 켜면 다시 되곤 했었다. 하지만 이번에는 몇번이나 껐다 켜도 몇 분이 지나면 다시 원상복귀된다.

해보라는 방법을 따라해보았으나 아직 해결책을 찾지 못했다. 우선은 그냥 넘어가기로 하자.

 

 

이상하게도 찾을 수 없다는 문구가 뜬다. 이유는 잘 모르겠지만 그냥 이클립스에서 잘 되는 것으로 만족해야겠다.

 

 

 

문제들이 어려웠다. 한 문제빼고 다 틀렸다. 그래도 문제를 풀며 개념이 조금 잡히는 것 같다.


 

 

자바 언어의 활용

프로그래밍 언어의 인기 순위를 매기는 지표에 따르면 자바는 최근 10년 동안 다양한 분야에서 가장 많이 사용되는 언어이다.

 

2022년 기준으로 Java가 조금 떨어지는 걸 볼 수 있다. 책에는 2019년에 1위라고 나와있었으나 인공지능이 대두되면서 파이썬이 활용도가 높아지게 된 것 같다. 하지만 웹 분야에 있어서는 여전히 자바의 인기는 높다.

 

 

 

1. 데스크톱 응용프로그램

PC 등의 데스크톱 컴퓨터에 실행되는 자바 응용프로그램이다. 자바 실행 환경이 설치된 어떤 컴퓨터에서도 실행되며 다른 응용프로그램의 도움 없이 단독으로 실행된다.

 

 

 

 

2. 자바 서블릿(servlet) 응용프로그램

서블릿은 웹 서버에서 실행되는 서버용 자바 프로그램으로 쇼핑몰이나 온라인 뱅킹 등을 구현할 때 쓰인다. 서블릿은 웹 브라우저의 요청에 따라 웹 서버에 탑재된 데이터베이스를 검색하거나 요청받은 내용을 처리하고, 웹 페이지로 만들어 웹 브라우저에 응답하는 방식으로 작동한다. 서블릿은 사용자 인터페이스를 필요로 하지 않으며 웹 서버에 의해 실행이 제어된다.

 

 

 

3. 안드로이드(Android) 응용프로그램

검색 엔진으로 유명한 구글의 주도로 여러 모바일 회사가 모여 구성한 OHA에서 개발한 무료 모바일 플랫폼을 안드로이드라고 한다. 개발 언어는 자바를 사용하나 오라클 사의 자바 라이선스를 피하기 위해, Dalvik이라는 새로운 자바 가상 기계인 별도의 개발 도구를 개발하였다. 또한 오라클의 바이트 코드의 효율을 개선한 새로운 바이트 코드 체계를 개발하였으며, 기존 오라클의 바이트 코드와는 호환성이 없어 변환이 필요하다.

안드로이드는 스마트폰뿐 아니라 모바일 학습기기, 태블릿 PC, PMP, 스마트 TV 등 다양한 종류의 모바일 플랫폼으로 확장하고 있다.


 

 

자바의 특징

 

1. 플랫폼 독립성

자바는 하드웨어, 운영체제 등 플랫폼에 종속되지 않는 독립적인 바이트 코드로 컴파일되며 자바 가상 기계만 있으면 하드웨어/운영체제를 막론하고 자바 프로그램의 실행이 가능하다.

 

2. 객체 지향

자바는 객체 지향언어로서 캡슐화, 상속, 다형성을 지원한다.

 

3. 클래스로 캡슐화

자바는 객체지향 언어의 캡슐화 원칙을 철저히 지켜 변수나 메소드는 반드시 클래스 내에 구현하도록 한다. 클래스에 속하지 않은 변수나 메소드는 있을 수 없다. 자바는 클래스 안에 새로운 클래스, 즉 내부 클래스를 만들 수 있다.

 

4. 소스와 클래스 파일

클래스 파일에는 반드시 하나의 자바 클래스만 들어있다. 그러므로 하나의 자바 소스 파일에 여러 개의 클래스를 작성한 경우, 컴파일하면 클래스마다 별도의 클래스 파일이 생성된다.
하나의 자바 소스 파일에 작성된 클래스 중 오직 한 클래스만 public으로 선언할 수 있다.

 

5. 실행 코드 배포

자바 응용프로그램은 한 개의 클래스 파일 또는 다수의 클래스 파일로 구성된다. 다수의 클래스 파일을 jar 파일 형태로 압축하여 배포하거나 실행할 수 있다. Java 9부터 자바 응용프로그램을 위한 맞춤형 커스텀 JRE를 만들어 실행시킬 수 있다. 자바의 실행은 main() 메소드에서 시작되며, 하나의 클래스 파일에 두 개 이상의 main() 메소드가 있을 수 없다.
그러나 각 클래스 파일이 main() 메소드를 가지는 것은 상관없다.

 

6. 패키지

서로 관련 있는 클래스는 패키지로 묶어 관리한다. 패키지는 파일 시스템의 폴더와 같은 개념이다.

 

7. 멀티스레드

하나의 자바 프로그램이 다수의 작업을 처리할 수 있도록 다수의 스레드가 동시에 실행할 수 있는 환경을 지원한다. 보통 멀티스레드 프로그램을 작성하기 위해서는 운영체제가 멀티스레드를 지원하고 멀티스레드와 관련된 API나 라이브러리를 제공해야만 한다.
그러나 자바는 운영체제의 도움 없이 멀티스레드 프로그래밍이 가능하다.

8. 가비지 컬렉션

자바 언어는 메모리를 할당받는 기능은 있지만, 메모리를 반환하는 기능은 없다. 이것은 개발자로 하여금 대단히 기쁜 일이며, 프로그래밍의 부담을 대폭 줄여준다. 프로그램 내에 사용되지 않는 메모리는 자바 가상 기계의 가비지 컬렉션 기능에 의해 자동으로 회수된다.

 

9. 실시간 응용 시스템에 부적합

자바 응용프로그램은 실행 도중 예측할 수 없는 시점에 가비지 컬렉션이 실행되므로 프로그램이 일시적으로 중단된다. 이런 문제로 인해 일정 시간 내에 반드시 실행 결과를 내야만 하는 실시간 시스템에는 자바 언어가 적합하지 않다.

 

 

10. 자바 프로그램은 안전하다

자바 언어는 타입 체크가 매우 엄격하며, C/C++와 달리 메모리의 물리적 주소를 사용하는 포인터의 개념이 없기 때문에 잘못된 자바 프로그램으로 인행 컴퓨터 시스템이 중단되는 일은 없다.

 

11. 프로그램 작성이 쉽다

자바 언어는 C/C++에 있는 포인터의 개념이 없기 때문에 프로그램 작성에 부담이 적다. 또한 프로그램 개발을 쉽게 도와주는 다양한 라이브러리와 스윙 등 강력한 GUI 라이브러리를 지원하므로 프로그램 작성이 빠르고 쉽다.

 

12. 실행 속도를 개선하기 위해 JIT 컴파일럴가 사용된다

 

자바는 자바 가상 기계가 인터프리터 방식으로 바이트 코드를 실행하므로 일반적으로 C/C++로 작성된 프로그램보다 실행이 느리다고 알려져 있다. 하지만 최근에는 실행하는 도중 자바 프로그램을 해당 CPU의 기계어 코드로 컴파일하고 CPU가 바로 기계어를 실행하도록 하는 JIT(Just in Time) 컴파일링 기법을 이용하므로, 실행 성능이 C/C++와 거의 비슷하도록 개선되었다.


 

 

실습 문제 풀기

핵심 체크 문제

 

Open Challenge

화면에 자신의 이름, 나이, 학과 등의 정보를 출력하는 자바 응용프로그램을 작성하라. 이클립스를 사용하여 OpenCallenge1이라는 이름의 프로젝트를 만들고, 클래스 이름을 MyInfoApp로 하라.

변수를 int로 선언했는데 오류가 떠서 그냥 그대로 출력해주었다. 아직 변수에 대해서는 학습하지 않아서 잘 모르겠다.

이제 연습문제도 풀어볼 것이다.


 

 

연습문제 풀기

 

이론문제

 

 

한 문제빼고 다 맞았다.


 

실습 문제

 

1번 문제 : "Welcom!!", "자바 세계로 오신 것을 환영합니다"를 출력하는 프로그램 작성하기

이 문제를 풀기까지 해야 할 설정들이 있어서 한 시간 가까이 걸렸다. 이클립스는 전에 사용하던 비주얼 스튜디오와 달리 좀 복잡한 구조로 되어 있는 것 같다. 워크스페이스도 새로 만들어서 책으로 하는 것, 수업 받는 것, 예제 파일 소스 이렇게 3가지로 만들어주었다.
그리고 새로 워크스페이스를 만들면 설정이 모두 바뀌어서 하나하나 다시 해주어야 했다. 불편한 점이 있지만 그래도 적응하는 중이다.

 

 

 

 

2번 : "Sorry~~", "재밌어서 미안합니다~"을 출력하는 프로그램 작성하기

 

2번 문제도 잘 풀었다.


 

학습을 마치고

10시 반부터 거의 3시간 가까이 이 부분을 학습한 것 같다. 아직 이클립스가 많이 낯설어서 처음 하다보니(수업 시간에 만져보기는 했으나) 안 되는 부분들이 많았다. 하지만 이렇게 버벅거리면서 배운 것들도 꽤 있다.
그리고 세벌식을 20년이나 쓰다가 처음으로 오늘 자판에 있는 특수기호를 발견했다. 그동안 ;표시가 세벌식에는 없는줄 알고 매번 영타와 한타를 반복해서 쳤었다. 그러다보니 남들보다 타자가 많이 느렸던 것 같다.

 

코딩에는 늘 ; 이 기호가 빠지지 않으니 문장 하나 치고 한영 바꾸고, 따옴표도 세벌식은 영타와 달라서 영타에서 매번 바꾸어주어야 했다. 조만간 이 기호로 바꾸는 법을 한번 연구해볼 것이다.
이제 자바가 무엇인지 감이 잡히고 좀 알 것 같다. 다음은 새로운 단원에 들어가서 학습을 진행해볼 것이다. 아마 오늘 많아야 3일치 수업을 듣겠고, 이틀치를 다 듣는 것도 버거울 수도 있겠다. 그래도 하는데까지 해보자!