본문 바로가기
Programming/Java, Spring

[Java 기초문법] 배열 Array 기초 / Methods / vararg / static

by Renechoi 2022. 10. 17.

 

[Jave 기초문법] by Professional Java Developer Career Starter: Java Foundations @ Udemy

 

 

 

 

Array

 

 

기본 개념 

Array = collections of other data type 

 

 

 

 

 

여기서 첫번째 만나는 String[] args가 사실은 a refernce to an array vaiable 

 

args는 변수 

[]  <= array를 의미 

 

collections of string을 뜻한다 

 

 

 

 

이걸 출력하면 

 

package business;

public class ArrayDemo {
    public static void main(String[] args){
        System.out.println(args);

    }
}

 

[Ljava.lang.String;@776ec8df

 

 

의미는

array of string => lives at ref 

 

이때 여기서 property를 추출할 수 있는데 

 

예를들어 .length를 하면 

 

 

 

0을 출력한다 

 

 

여기서 args가 설정되었다는 것은 컴파일된 프로그램에서 실행했을 때 받을 수 있다는 것을 의미한다

 

따라서 터미널에서 apple orange를 넣고 출력하면 2가 나온다 = [apple orange] 

 

 

 

package business;

public class ArrayDemo {
    public static void main(String[] args){

        int[]nums = {10, 20, 30, 40, 50};
        System.out.println(nums.length);
        System.out.println(nums[2]);
    }
}

 

이때의 결과 

 

0
5
30


 

 

 


 

 

Method

 

 

 

methods 기본 개념 

a block of codes where work gets done 

 

0 or more 을 인풋하고 아웃풋할 수 있다. 

 

basically methods = function / 함수 

 

자바에서 특별한 점은 class 안에 function이 존재한다는 것이다 

 

C나 CPP 같은 경우는 Methods 가 스스로 존재할 수 있다. 자바에서는 반드시 class 안에 존재해야 한다. 

 

 

 

아주 간단한 method 샘플 

 




public class Person {
    public void sayhello(){
        System.out.println("Hello");
    }

}


 

instance of person class를 만들고 

 

person으로 하여금 method를 실행하게 하는 방식 

 

 

이때 일어나는 일 

 

p1이라는 변수에 새롭게 (new) 생성된 Person object이 저장되는데 = p1 stores refrence of newly made Person

 

p1이 불러와지면서 

 

sayhello()라는 함수가 executed 된다 

 

///

 

 

여기서 void란 무엇일까? 

 

it does not return any data

 

(printing a word는return이 아님 ) 

 

 

 

변수를 받아서 excute하는 방식 

 

 

 

 

 

text를 전달해주어서 기능하게 만든다 

 

 

 

middlename이라는 변수를 ㅈ하고 거기서 initial만 받길 원한다면 어떻게 해야할까? 

 

Method에는 일반적으로 verb를 포함하는데 기능성을 보여주기 위해서 

 

 

함수 생성 

 

여기서 char는 캐릭터를 리턴하는 기능을 할 것이라 

 

 

middleName을 호출하면 위에서 String으로 정의했기 때문에 string 클래스가 가진 기능을 보여준다 . 

 

 

이제 호출해보면 

 

 

 

 

 

C를 리턴한다 

 

 

num을 리턴하는 함수를 생성 

 

public int add(int num1, int num2){
    return num1 + num2;
}
System.out.println(p1.add(5,3));

8을 리턴 

 

 


 

 

 

 

 

vararg 

 

아래와 같이 배열로 받으면 변수 받는 개수가 정해져 있지 않아서 좋다. 

 

public static void main(String[] args) {

 

이런 방식을 따라서 만들어 보면 

 

 

 

 

 

 

 

 

자바 5이후부터 생겨난 varargs 덕분에 

다변수를 설정하고 

call 하기가 쉬워졌다. 

 

won't use array / rather vararg

 

 

쩜 3개 => vararg를 의미 

 

 

 

public void test2(String... words){
    // do something
}
p1.test2("one", "two", "three");

 

바로 이렇게 호출이 가능해짐 

 

int를 추가할 수도 있는데 

 

 

 

이때 설정을 안해주면 이런 문제가 발생 

 

 

 

=> vararg을 따라서 맨 마지막에 설정해주어야 한다 

 

must be the last in the list 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

Static Methods

 

 

static이란 무엇일까 ? 

 


public static void main(String[] args) {}

 

 

class = blueprint 

 

object = instance of a class 

 

 

따라서 actual 빌드를 해주지 않으면 사용할 수가 없다 

 

여기서 함수가 호출된 형식을 보면 

먼저 person이라는 실제 object가 빌드 되고 

그로부터 sayhello()가 기능할 수 있게 된다. 

 

 

you don't have any rooms(<say hello()>) of the building until you have constructed the buidling(person) 

 

 

이때 static 개념이 사용되는데 

 

by making it static, that allows Java to be able to call this method = 아래 메소드 

 

public static void main(String[] args) {

 

before class instance(object) has even been created 

 

 

 

자바가 먼저 시작을 하면 순서대로 서치를 시작한다 

 

그러다가 static이 달려있는 main을 만나면 

Java will call methd automatically 

 

그리고 인스턴스 없이도 호출 할 수 있게 된다. 

 

=> 다른 말로 말하면 

default start point를 설정해주는 것과도 비슷하다. 

 

 

또 하나 static이 사용되는 경우는 

 

자바에는 utility 클래스라는 것이 있는데 거기서는 instance 없이 필요로 하는 method들이 필요하다 

이때 static으로 붙어 있다

 

 

 

 

 


 

 

Static Variables 

 

 

 

상수 파이를 만들어주고 이것을 호출한다고 해보자. 

 

 

 

 

 

이때 빨간색으로 뜨면서 아래와 같은 메시지를 보낸다. 

 

 

 

현재 void main은 static이라 can exist prior to the existence of an object or a class instance이다 

 

이때 non static한 변수는 항상 클래스 인스턴스가 생성되어야만 사용이 가능하다. 

 

after the Person building has been constructed 되어야. 

 

따라서 static을 맞춰주어야 한다. 

 

게다가 파이는 인스턴스 순서와 상관없이 존재하는 것도 있지만 상수로서 변하지 않게 해주는 기능도 있기 때문에 

static을 써주는 개념으로 이것이 해결 된다. 

 

 

 

 

static을 쓰면 다른 클래스에서 가져다 써도 카피본을 쓰는 것이 원본은 훼손되지 않는다. 

 

 

 


 

 

Static Initializer 

 

아래 코드를 보면 

선언하는 동시에 initialize 한다 

 

public static double PI = 3.14;

 

좀 더 복잡한 것을 initialize를 해야한다면 ? 

 

 

 

public static int[] nums = initNums();

static  {
    nums = new int[5];       // 이런식으로 하나하나 declare해줄 수도 있지만
}

public static int[] initNums(){
    int[] nums = new int[5];
    nums[0] = 3;
    nums[1] = 3;                // 이렇게 static 변수를 initiazlie하는 것을 함수로 만들어서
    return  nums                // 리턴시키고 위의 static int[] nums와 연결시키는 것을 static initializer라고 한다

}

 

 

 

 

 

 

 

 

 

 

 

반응형