일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- jsp
- oracle
- 웹
- 데이터베이스
- Programming
- 프론트엔드
- 파이썬
- 프로그래밍
- function
- frontend
- 자바
- 서블릿
- java
- Method
- web
- 함수
- 자바스크립트
- It
- 메소드
- PL/SQL
- 문자열
- Database
- JavaScript
- Servlet
- String
- 코딩
- 오라클
- HTML
- Python
- SQL
- Today
- Total
Untitled_Blue
[JAVA] JAVA의 기본 구조 본문
안녕하세요. 자바 첫 포스팅입니다.
다소 부족하더라도 양해 부탁드립니다.
- 자바 소스 코드의 실행 과정
먼저 이클립스를 기준으로 소스 코드를 입력하고 컴파일 버튼을 클릭하면 컴파일러에서 문법에 대한 오류를 검출한다.
해당 과정에서 문법 오류가 없으면 .class 파일을 생성하는 데 이는 "실행하기 위한 최소한의 문법 오류가 없다."는 뜻이라고 볼 수 있다.
그 다음, JVM을 통해 프로그램을 실행하기 위한 메모리 공간을 운영체제(OS)를 통해 할당 받아온다. 이 때 사진 자료에 인터프리터가 있는데 JVM 내 자체적으로 "소스 코드를 바로 실행하는 프로그램"이 내장되어 있다는 뜻으로 흔히 Console 내지 프로그램 실행 화면을 보여주는 역할을 담당한다.
package classes;
public class Main {
public static void main(String[] args) {
System.out.println("Hello, World :)");
}
}
다음은 자바 소스코드이다. 먼저 해당 소스코드에는 크게 패키지, 클래스, 메서드, 출력문이 있는데 하단에 차례대로 설명할 것이다.
* 패키지 : 하나의 프로젝트 내 소스코드가 저장되어지는 위치이다. 만약 생략하게 되면 package default;로 간주되어 어떠한 패키지에도 소속되지 않는 채 저장된다. 이렇게 저장하게 되면 추후 파일이 많아질 때 구분 및 활용이 어려울 수 있으므로 패키지를 선언하는 것이 좋다.
* 클래스 : 물리적인 객체를 소프트웨어적으로 형상화한 것이다. 이때 가장 중요한 클래스인 public class 클래스명 {} 부분은 파일명과 반드시 일치하여야 한다. 해당 클래스 내부에 실행하는 장면을 보여주는 main 메소드가 들어있기 때문이다.
* 메서드 : 함수로서 기능이나 알고리즘을 구현하는 공간이다. 여기서 'public static void main(String[] args)'는 프로그램을 실행하는 데 있어서 가장 기본적이자 필수적인 함수이다. 만약 이 부분 없이 실행한다면 출력되는 값이 아무것도 없다.
* 출력문 : System.out.println()이며 실행 화면에 원하는 값이나 문자를 출력하는 역할이다. 이때 System.out.print()도 가능한데 ln이 붙고 안붙고가 보이는데 이는 line의 뜻으로서 개행의 유무를 의미한다. ln이 있으면 한 번 출력하고 다음 라인으로 넘어가고 반대로 없으면 하나의 출력문 바로 옆에 출력문이 실행되는 것을 확인할 수 있다.
여담으로 C언어에서 자주 사용했던 printf() 또한 사용 가능하다. [ System.out.printf(); ]
// Command -> 한 줄 짜리 주석을 사용할 때
/*
Command
2줄 이상의 주석을 사용할 때 활용한다.
*/
* 주석 (Command) : 일종의 간단한 메모장의 역할을 담당한다. 컴파일 및 실행에는 전혀 영향을 끼치지 않으며 실제로는 간단한 메모부터 시작해서 주로 소스 코드 이해를 위한 설명을 위해 쓰이며 협업할 때는 실제 수정 또는 유지보수 내역과 같이 코드에 대한 정보를 기록할 때 많이 활용된다.
- 클래스, 스택, 힙
자바 가상 머신은 효율적인 메모리 사용 및 관리를 위해 하나의 메모리 크게 3가지로 분류한다.
설명하기 앞서, 자료형은 '데이터를 저장하기 위한 규격화된 저장 공간'이며 그만큼 저장하고자 하는 데이터에 따라 크기(byte 단위)와 종류가 다르다. 종류는 크게 두 가지이며 하나는 '기본 자료형'이고 다른 하나는 '참조 자료형'이다. 이 때 기본형은 있는 그대로의 데이터를 저장하는 반면에 참조형은 객체 내지 데이터의 주소값을 저장한다. 이 부분은 자료형 관련 포스트에서 본격적으로 다룰 예정이다.
먼저 클래스(메소드) 영역이다. 이 부분은 클래스를 시작으로 메소드를 저장하는 영역이다. 추가로 정적(static)과 상수(final) 또한 위치할 수 있다. 이 부분에 저장된 데이터는 프로그램의 시작부터 종료까지 끝까지 남아있다는 점이 특징이다. 모든 스레드(Thread)가 공유하는 영역이다.
스택 영역은 변수(지역, 매개, 전역 등등...)를 저장하는 역할이며 이 때 변수의 자료형이 기본형이면 내부에 데이터도 함께 저장된다. 반면 참조형은 변수명만 저장된다. 사진 자료처럼 String과 배열 같은 참조형 변수는 Stack 영역에는 단순히 변수명만 저장해줄 뿐 데이터(값)도 함께 저장하지는 않는다. 그러나 이러한 참조형 변수는 Heap 영역에 위치한 데이터를 참조할 수 있는 주소값만 보유하고 있다.(C언어로 치면 포인터(Pointer)랑 비슷하다고 생각하면 될 것 같다...)
추가로 String value01 = new String("Hello");와 String value02 = new String("Hello");는 서로 같다고 볼 수 있냐는 의문이 들 수도 있다. 하지만 이 둘은 서로 다른 객체로 취급받는다. 왜냐하면 "new" 연산자를 통해 새로 생성하는 만큼 선언할 때마다 다른 주소값을 부여받기 때문이다.
마지막으로 힙 영역은 객체를 저장하는 공간이며 이 때 참조 자료형에 속하는 배열과 문자열 등이 이에 해당된다. 여기서는 객체(Object)타입의 데이터가 저장되는 공간이기도 하다. 여기서 GC(Gabage Collector)가 이뤄지며 어느 하나의 참조형 변수가 해당 객체를 참조하지 않는다면 자동으로 힙 영역에서 사라지게 된다.
처음이라서 필력이 안 좋고 횡설수설 많이 한 것 같지만 잘 부탁드립니다. 😍
'Programming Language > JAVA' 카테고리의 다른 글
[JAVA] String 메소드 1 - charAt(), length(), isEmpty(), concat(), contain(), trim(), toCharArray() (0) | 2023.05.06 |
---|---|
[JAVA] 배열 (0) | 2023.05.03 |
[JAVA]제어문 (0) | 2023.04.27 |
[JAVA] 연산자 (1) | 2023.04.25 |
[JAVA] 데이터 타입 - 기본형, 참조형 (0) | 2023.04.23 |