목차
자바의 소스 코드는 .java
이고 class
로 구성되어 있다.
여기서 class
는 여러 개를 생성할 수 있다.
여러개의 클래스로 소스 코드를 만들면 컴파일 시 여러 개의 파일이 만들어 진다. (이때 만들어진 컴파일 파일 이름은 클래스명을 따라 생성된다.) 하지만 하나의 소스 코드에 하나의 클래스를 생성하는 것을 추천한다.
class
의 기본 구성 요소
클래스의 기본 구성 요소에는 메서드, 필드, 생성자가 있다.
메서드
메모리에 대하여
- 자바는 메모리 영역을 클래스, 스택, 힙으로 나눠서 관리한다.
클래스 영역
- core: 클래스 영역에는 자바를 실행하기 위해 핵심적인 숨겨진 부분이 있다.
- 상수 영역
- static 영역
스택 영역
- 홈페이지 뒤로가기 버튼과 같이 FirstInLastOut 구조로 실행된다.
- main 메서드가 제일 먼저 실행되고 그 다음 function들이 실행됐다 종료되는 방식으로 실행된다.
힙
- 객체 생성 (non-static 메서드를 사용할 때 생성하는 객체가 만들어지는 공간)
- garbage collection의 관리 영역
static 메서드
public static 리턴타입 메서드명(매개변수){실행코드;}
class Ex02 {
public static void main(String[] args) {
System.out.println("시작");
func01(2);
func01(9);
System.out.println("종료");
}
public static void func01(int dan) {
System.out.println("구구단 " + dan + "단 출력");
for(int i=2; i<10; i++){
System.out.println(dan + " x " + i + " = " + dan*i);
}
System.out.println();
}
}
main
메서드는 자바가 실행될때 자동으로 호출되어지는 메서드라 이름을 수정하거나 지울 수 없다.- 메서드명으로 키워드는 사용하지 못하고 문자로 시작되어야 한다.
- 숫자x,
- 대문자로 시작되는 메서드명은 클래스로 오인될 수 있기 때문에 소문자로 시작하는게 좋다.
- 또한 특수문자 _, $는 사용할 수 있지만 다른 기능과 오인될 수 있기 때문에 사용하지 않는 걸 추천
- camelCase를 사용하여 작성된다.
- 리턴타입
- 호출할 값의 형을 적는다.
- 리턴값이 없을 때는
void
라 적는다. return;
이 소스 코드에 명시적으로 존재하지 않을 때는 컴파일 과정에서 자동으로 생성된다.
public static void main(String[] args) {
System.out.println("시작");
func01(2); System.out.println("종료");
}
public static void func01(int dan) {
System.out.println("구구단 " + dan + "단 출력");
for(int i=2; i<10; i++){
System.out.println(dan + " x " + i + " = " + dan*i);
if(i==2)return;
}
System.out.println();
}
- 메서드의 호출
메서드명();
메서드명(매개변수값);
메서드명(매개변수값1, 매개변수값2, ...);
- 매개변수 (=parameter, 인자, arguments)
(타입 변수명1, 타입 변수명2, ...);
- 변수의 선언
- 변수의 생명 주기는 그 변수가 생성된 중괄호{}가 시작된 시점에서 중괄호가 닫힐때까지 이다.
- 두번째 a는 세번째 a가 호출되기 전에 이미 닫혔기 때문에 다음과 같이 출력된다.non-static 메서드
/// main before a = 1111 /// func01 a = 3333 /// main after a = 1111
public static void main(String[] args) {
int a = 1111;
System.out.println("main before a = " + a);
func01();
System.out.println("main after a = " + a);
}
public static void func01() {
int a = 3333;
System.out.println("func01 a = " + a);
}
non-static 메서드
static과 달리 non-static은 메모리에 미리 할당된 공간이 없기 때문에 먼저 객체생성을 한 후 선언해서 사용한다.
class Ex04 {
public static void main(String[] args) {
Ex04 me = new Ex04();
me.func01(); // me는 참조변수
}
public void func01(){
System.out.println("non-static method func01");
}
}
- static과 달리 객체를 생성해야 하기 때문에 성능이 느려지는 단점이 있다.
- 반면, static이 많으면 자바를 실행할 때 로딩이 길어질 수 있기 때문에 non-static이 더 빨리 실행되고, 메모리 사용량이 더 적다.
- 생성된 참조변수가 사용되지 않을 때 garbage collection에 의해 지워진다.
- 객체를 생성하는 건 IO 다음으로 제일 무거운 작업이어서 꼭 필요할 때만 생성하도록 한다.
- single time pattern : 객체 생성을 무분별하게 하는 것을 막기 위한 디자인 패턴
메서드 overload
원칙적으로 메서드명의 중복은 불가하다.
단, 다음의 세가지가 구분 가능하면 중복이 허용된다.
- 매개변수의 유무
- 매개변수의 타입
- 매개변수의 갯수와 순서
(쉽게println
을 사용할때를 생각하면 된다.)
-> 주로 사용자 편의성을 위해 존재한다.
class Ex05 {
public static void main(String[] args) {
func01();
func01(123);
func01("test");
func01(111, 222);
}
public static void func01(){
System.out.println("매개변수 없음");
}
public static void func01(int a){
System.out.println("매개변수 int : " + a);
}
public static void func01(String a){
System.out.println("매개변수 String : " + a);
}
public static void func01(int a, int b){
System.out.println("매개변수 int 2개 : " + a + ", " + b);
}
}
변수
클래스 변수(static)
public static int su1;
멤버필드(non-static)
public int su2;
public static void main(String[] args) {
Ex06 me = new Ex06();
System.out.println(me.su2);
}
class Ex06 {
public static int su1 = 1111;
public int su2 = 2222;
public static int su3; // default value 0으로 초기화된다.
public static String msg; // default value는 null이다.
public static void main(String[] args) {
System.out.println(su1);
Ex06 me = new Ex06();
System.out.println(me.su2);
System.out.println(su3);
System.out.println(msg);
}
}
- 클래스 변수는 선언과 초기화가 따로 될 수 없다.
Windows script 만들기
.bat
파일을 만들어 cmd에 적었던 실행 코드를 적어 저장 후 폴더에서 실행한다.
'bat 배치문법'을 검색해서 사용할 수 있는 기능들을 살펴본다.
pause
: 프로그램이 끝난 후 창이 바로 꺼지지 않고 멈춘다.- @echo off : 명령어의 이름을 감춘다.
JDK가 설치되지 않은 사용자들을 위해서
- class 실행시키는 윈도우 스크립트 만들기
set PATH=C:\Program Files\AdoptOpenJDK\jdk-8.0.292.10-hotspot\jre;%PATH%
cls
@echo off
java Ex09
pause
compile.bat 만들기
@echo off
set /p fname=Insert Filename :
javac -encoding utf8 -d dist %fname%.java
cd dist
cls
java %fname%
cd ..
pause
cls
'100일 챌린지 > 빅데이터기반 인공지능 융합 서비스 개발자' 카테고리의 다른 글
Day 06 - break, return, continue 그리고 배열 복사와 String의 기능들 (0) | 2024.07.29 |
---|---|
Day05 - 배열과 문자열 (0) | 2024.07.26 |
Day04 - Package와 생성자 사용하기 (0) | 2024.07.25 |
Day 02- VScode와 7zip 설치, 그리고 제어문과 반복문 (1) | 2024.07.23 |
Day 01 - JAVA 설치하기 (2) | 2024.07.22 |