[Java] 언어 공부 필기1

이열음·2022년 1월 31일
0

🌟Java 필기

본 포스팅은 기본 문법 정리를 포함하지 않습니다.

🎯java 실행과정

java로 소스코드를 작성하게 되면 컴퓨터에서는 고급언어를 직접 처리할 수 없기때문에
컴퓨터가 실행할 수 있는 기계어로 변환하는 컴파일 과정을 거쳐야합니다.
java에서의 컴파일은 javac 라는 전용 컴파일러로 실행되며,
컴파일이 완료되면 java를 기계어로 변환한 class파일이 생성됩니다.
자바 가상기계는 이 class파일을 실행하여 프로그램을 작동시킵니다.

🎯class 파일과 바이트코드

class 파일안에는 바이트코드가 포함되어 있습니다.
바이트 코드는 CPU에 의해 실행되지 않고, 자바 가상 기계에서 실행되는 binary code입니다.
때문에 플랫폼과 환경에 구애받지않고 가상기계가 있는곳이면
어디든 실행될 수 있다는 특징을 가집니다.

🎯클래스 변수 사용법

static 을 붙여 변수를 선언해줍니다.
이렇게 선언한 클래스 변수는 인스턴스를 생성하지 않고도 값을 지정, 변경할 수 있습니다.
변경한 값은 인스턴스에 일괄적으로 반영됩니다.

class Calculator{
    static double PI = 3.14; //클래스 변수는 정의 앞에 static을 붙여준다. -> 클래스변수
    static int base = 0; //클래스 변수 선언
    int left, right; //인스턴스별로 다 다른 값 가질 수 있음 -> 인스턴스 변수

    public void setOperands(int left, int right){
        this.left = left;
        this.right = right;
    }

    public void sum(){
        System.out.println(this.left+this.right+base);
    }

    public void avg(){
        System.out.println((this.left+this.right+base)/2);
    }
}

public class Calculate{
    public static void main(String[] args){
        Calculator c1 = new Calculator(); //앞에껀 데이터타입, 뒤에껀 객체생성
        Calculator c2 = new Calculator(); 
        c1.setOperands(10, 20);
        c1.sum();
        c1.avg();
        System.out.println(Calculator.PI); //인스턴스를 꼭 생성하지 않아도 됨.
        Calculator.base = 10;
        c1.setOperands(10, 20);
        c1.sum();
        c2.setOperands(30, 20);
        c2.sum();
    }
}

이런 특징을 활용하여 다음과 같은 경우에 클래스 변수를 쓰면 유용합니다.
1. 모든 인스턴스에 공통적인 값이 필요한 경우
2. 인스턴스를 생성할 필요가 없는 값을 클래스에 저장하고싶은 경우
3. 값의 변경사항을 인스턴스 일괄적으로 공유해야하는 경우

🎯클래스 메소드

인스턴스 변수를 참조하지 않고 클래스 메소드내에서 인자를 처리합니다.
이를 통해 불필요한 인스턴스 생성을 막을 수 있어 효율적입니다.

class Calculator{
    static double PI = 3.14; //클래스 변수는 정의 앞에 static을 붙여준다. -> 클래스변수
    static int base = 0; //클래스 변수 선언
    int left, right; //인스턴스별로 다 다른 값 가질 수 있음 -> 인스턴스 변수

    /*public void setOperands(int left, int right){
        this.left = left;
        this.right = right;
    }*/

    public void sum(int left,int right){
        System.out.println(left+right+base);
    }

    public void avg(int left, int right){
        System.out.println((left+right+base)/2);
    }
}

public class Calculate{
    public static void main(String[] args){
        Calculator c1 = new Calculator(); //앞에껀 데이터타입, 뒤에껀 객체생성
        Calculator c2 = new Calculator(); 
        
        c1.sum(20,30);
        c1.avg(20,30);
        System.out.println(Calculator.PI); //인스턴스를 꼭 생성하지 않아도 됨.
        Calculator.base = 10;
        c1.sum(20,30);
        c2.sum(20,30);
    }
}

0개의 댓글