본문 바로가기

Programming languages/JAVA

3. 클래스, 메소드, 인스턴스, Static

728x90
반응형
import javax.swing.*;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

//클래스,메소드
public class third {
    public static String glob = "I am Global!"; //전역 변수 선언

    public static void main(String[] args) throws IOException {
        IO_PS a2 = new IO_PS("A2"); //인스턴스 생성
        other_method();
        my_method();
        a2.print(glob); //전역 변수 호출
        second.str_conditional(); //다른 클래스에 존재하는 메소드 호출
    }

    //다른 메소드를 호출
    public static int other_method() throws IOException
    {
        //class: System, Math, FileWriter
        //instance: f1,f2

        System.out.println(Math.PI);
        System.out.println(Math.floor(1.8)); //올림
        System.out.println(Math.ceil(1.8)); //내림

        FileWriter f1 = new FileWriter("data.txt");
        //상태를 가지고 있는 복제본(instance), 새로운 객체(class)를 생성

        f1.write("Hello");
        f1.write("JAVA");
        f1.close();

        return 0;
    }
    //메소드를 직접 제작
    public static void my_method()
    {
        IO_PS a1 = new IO_PS("A1"); //인스턴스 생성
        String delimeter = "****"; //지역변수

        //print 메소드는 non-static이라서 인스턴스 생성후 사용
        a1.print(delimeter); //메소드 호출 및 변수 삽입
        a1.print(glob); //전역 변수 호출

        int answer = a1.adder(3,5); //덧셈 메소드 호출 후 반환값 저장
        a1.print(String.valueOf(answer)); //string 형태로 변환 뒤 출력

        int new_answer;
    }
}

class IO_PS
{
    public String Init = "";
    public IO_PS(String Init)
    {
        this.Init = Init; //this로 메소드안에 있는 변수를 가리킨다.
    }
    //print라는 메소드 선언
    //static은 class 종속(IO_PS.print() 이렇게 사용)
    //non-static의 경우 instance를 생성해서 사용해야 한다.(위의 a1.print())
    public void print(String delimter)
    {
        System.out.println(delimter);
    }

    //덧셈 메소드 선언
    public int adder(int x, int y) //static이 있으면 클래스에 종속됨
    {
        int ans = x+y + 20;
        return ans;
    }
}

- 메소드는 C언어, 파이썬의 함수와 같다.

- 인스턴스는 객체타입 변수명 = new 객체타입(); 으로 생성한다.

- 인스턴스는 특정 클래스를 복사해서 쓰는 것이다.

- new를 통해서 생성되기 때문에 인스턴스 객체 자체는 heap 메모리에 생성되고 call by reference로 메모리 주소값을 stack 영역에 저장한다.

- static 메소드는 class에 종속된다. 따라서 외부 호출 시 class명.메소드명 으로 호출한다. 

- non static은 인스턴스를 생성해서 사용해야 한다.

- main 함수 밖에서 생성된 변수는 전역 변수이다.

- 생성자는 new 연산자를 통해서 인스턴스 생성 시 가장 먼저 호출되고 실행되는 메소드

- 생성자는 클래스 이름과 메소드 이름을 동일하게 해주면 된다.

- this를 사용해서 메소드 안에 있는 객체를 특정한다. 생성자와 메소드의 매개변수 이름이 필드와 동일한 경우 인스턴스 멤버인 필드임을 명시하고자 할 때 사용한다.

 

<출처: 생활코딩(https://opentutorials.org/course/4074/27017)>

- 쉽게 생각하면 static들은 인스턴스를 생성하면 원본 클래스에 연결된 형태이다. 따라서 외부에서 값을 변경할 수 있다.

- non - static 변수들은 인스턴스 생성 시 원본 클래스의 객체를 복사해서 인스턴스에 새롭게 만든다. 따라서 원본에 영향을 미치지 않는다.

- static 메소드들은 클래스명으로 접근해야 하고, non-static 메소드들은 인스턴스를 생성 후 접근 가능하다.

728x90
반응형