자바 정리

OneTwoThree·2023년 1월 4일
0

자바

목록 보기
1/19

자바 코테용 함수 모음

자바 버전 업데이트하는법

링크

자바의 실행과정

  • C의 실행과정

하드웨어 > 운영체제 > 프로그램

소스코드.c -컴파일러가컴파일-> 목적코드.obj -링커가링크-> 실행파일.exe

다른 운영체제에서 실행하려면 다시 컴파일, 링크 해야한다

  • java의 실행과정

하드웨어 > 운영체제 > JVM(자바가상머신) > 클래스파일

소스코드.java -컴파일러(javac.exe)-> 바이트코드.class -자바런처(java.exe)가 JVM 구동 -> 자바 프로그램 구동

자바는 링크 과정(바이트코드를 실행파일로 만드는 과정)이 없다.

자바는 OS가 바뀌어도 JVM으로 실행이 가능해서 확장성이 좋다.

main() 메소드를 가진 클래스부터 실행한다.
필요할 때 클래스 파일을 로딩해서 적은 메모리로도 실행 가능하다.

JDK 와 JRE

JDK : JAVA DEVELOPMENT KIT

자바 개발 환경

JDK의 bin 디렉토리에 포함된 주요 개발 도구

  • javac : 자바 컴파일러
  • java : 자바 런처 (자바 가상 기계를 작동시킴)
  • javadoc : 자바 소스로 HTML 형식의 DOCUMENT 생성

JRE : JAVA RUN ENVIRONMENT

자바 실행 환경

자바 API

api = application programming interface
JDK에 포함된 클래스 라이브러리이다.
주요한 기능들을 미리 구현해놓은 클래스 라이브러리의 집합이다.

API를 이용해서 쉽고 빠르게 개발할 수 있다.

자바 패키지

관련된 클래스들을 묶어 놓은 것을 패키지라 한다.

자바 기본 자료형

  • boolean
    1bit
    true, false
    1이나 0으로 사용할 수 없음

  • char
    2byte

char to int

       //아스키코드값을 활용해 char -> int
        char c = '6';
        System.out.println(c-48);

        //String -> int
        String s = "25";
        System.out.println(Integer.parseInt(s));

정수 자료형

  • byte
    1byte
  • short
    2byte
  • int
    4byte
    정수 리터럴
  • long
    8byte

실수 자료형

  • float
    4byte
  • double
    8byte : 실수 리터럴

레퍼런스 타입

  • String
    문자열 표현

var

var 키워드는 지역 변수에 선언에만 사용할 수 있다.
컴파일러가 변수 타입을 추론한다

var 키워드로 변수를 선언할 때는 선언과 동시에 초기화 해야한다.

var num = 3;
var alpha = 'a';

final

링크텍스트
final은 상수 선언에 사용한다.
어떻게 사용하느냐에 따라 의미가 다르다
위 링크 참고할 것
final 필드의 경우 한번만 초기화함

형변환

  • 자동 형변환 : 작은 자료형 -> 큰 자료형
  • 강제 형변환 : 큰 자료형 -> 작은 자료형
    (자료형)자료 의 형식으로 사용함
public class test {

	public static void main(String[] args) {
		int num = 3;
		float num2 = (float)num;
		System.out.print(num2);
	}

}

콘솔 입력

import java.util.Scanner;


public class test {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		//Scanner.next()로 String 입력받는다
		String name = s.next(); 
		//다른 자료형은 next자료형이름(); 으로 입력받는다
		int age = s.nextInt();
		
		System.out.print(name+" "+age);
	}

}

배열

배열도 인스턴스(객체)다.

public static void main(String[] args) {
		//참조변수의 선언
		int[] ref;
		//객체의 생성 
		ref = new int[3];
	}

참조변수 ref가 인스턴스를 가리킨다.

1차원 배열

//배열 선언 
		int arr1[]; //자료형 배열명[];
		int[] arr2; //자료형[] 배열명;
		
		//배열 생성
		arr1 = new int[3]; //배열명 = new 자료형[칸수]
		int arr3[] = new int[3]; //배열 선언과 생성 동시에 
		
		//배열 선언과 동시에 초기화 
		int arr4[] = {1,2,3}; // 원소의 개수만큼 공간 생성 

주의
자바 배열의 길이는 배열명.length로 접근할 수 있다.
메소드 (배열명.length()) 가 아님에 주의하자.

2차원 배열

//배열 선언
		int arr1[][];
		int[][] arr2;
		int[] arr3[];
		
		//배열 생성
		arr1 = new int[3][3];
		
		//배열 생성과 선언을 동시에
		int arr4[][] = new int[3][3];
		
		//배열 생성과 동시에 초기화
		int arr5[][] = {
				{1,2,3},
				{4,5,6},
				{7,8,9}
		};

2차원 배열을 다음과 같이 생성하면
int[][] arr = new int[3][4]

arr가 참조하는 배열은 각 행이 arr[0], arr[1], arr[2]인 형태이다. 따라서 arr.length는3 이 된다.
그리고 각 행의 arr가 길이가 4인 배열을 참조한다. 즉 arr[0].length는 4가 된다.


public class Main {
    public static void main(String[] args) {
        int[][] arr = new int[3][4];
        System.out.println(arr.length); //3
        System.out.println(arr[0].length); //4
    }
}

비정방형 배열

정방형 배열은 각 행의 열의 개수가 동일한 배열이다.
비정방형 배열은 각 행의 열의 개수가 다른 배열이다.

int arr[][] = new int[3][];
		
		arr[0] = new int[3];
		arr[1] = new int[4];
		arr[2] = new int[5];

먼저 행만 new로 생성해 놓고 각 행에 대해 열을 new로 생성해서 비정방형 배열을 선언할 수 있다.

java 에서 배열의 특징

  • int 배열의 초기값 : 0, char 배열의 초기값 : \0
  • 음수 인덱스 사용 불가
  • 배열은 레퍼런스 타입이다 (배열은 객체이다)
    배열 객체의 length 필드로 배열의 길이를 참조할 수 있다.
public static void main(String[] args) {
		
		int arr[] = {1,2,3};
		System.out.print(arr.length);
				
	}
int arr[][]= {
				{1,2,3},
				{4,5},
				{6}
		};
		
		//행의 개수
		System.out.println(arr.length);
		
		//행 0의 열의 개수
		System.out.println(arr[0].length);

2차원 배열에서는 배열명.length로 행의 개수를 참조한다.
배열명[인덱스].length로 해당 행의 열의 개수를 참조한다.

for-each 문

int arr[] = {1,2,3};
		
		for (int data : arr) {
			System.out.println(data);
		}

for each문을 이용해서 배열의 원소를 하나씩 참조할 수 있다.

메소드에서 배열 리턴

배열을 반환하는 메소드는 배열의 레퍼런스를 반환하는 것이다.

public class test {

	public int[] makeArr() {
		int[] arr = {1,2,3};
		
		//배열의 레퍼런스를 반환함
		return arr;
	}
	
	
	
	public static void main(String[] args) {
		test t = new test();
		
		int arr[] = t.makeArr();
		
		System.out.println(arr[0]);
		
				
	}
}

makeArr은 static 메소드가 아니라 클래스를 생성 후 메소드를 사용했다.
그리고 makeArr에서는 배열의 레퍼런스를 반환한다.
함수호출이 끝난다고 해서 메모리공간의 배열이 사라지지 않고, 참조변수 arr이 배열을 가리킨다.

생성자

생성자는 객체 멤버의 초기화를 위해 객체 생성 시 최초 1회만 호출되는 함수다.
생성자의 조건

  • 반환형이 없다
  • 클래스 이름과 생성자의 이름은 동일하다

또한 생성자에 매개변수를 전달해서 객체의 인스턴스를 초기화 할 수 있다.

public class test {

	//멤버변수
	int num1;
	String word;
	
	public test() {
		num1 = 10;
		word = "무야호";
	}
	
	
	//생성자
	public test(int n, String s) {
		//생성자 매개변수를 이용해 멤버 변수 초기화 
		num1 = n;
		word = s;
	}
	
	
	
	public static void main(String[] args) {
		
		test t = new test();
		System.out.println(t.num1);
				
	}
}

생성자를 이용해 객체를 생성한다.

static

static 멤버변수, 멤버함수는 객체 내에 존재하지 않는다.
jvm이 클래스 로딩할 때 메모리에 생성되며 해당 타입의 객체들이 공유한다.
객체를 생성하지 않아도 변수명, 함수명 만으로 참조, 호출할 수 있다.

public class test {

	//멤버변수
	int num1;
	String word;
	
	public test() {
		num1 = 10;
		word = "무야호";
	}
	
	
	//생성자
	public test(int n, String s) {
		//생성자 매개변수를 이용해 멤버 변수 초기화 
		num1 = n;
		word = s;
	}
	
	public static int addNum(int a,int b) {return a+b;}
	
	
	
	public static void main(String[] args) {
		
		System.out.println(addNum(2,3));
		
				
	}
}

addNum은 static 함수여서 객체를 생성하지 않아도 호출할 수 있다.

0개의 댓글