[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라고 한다
}
'Programming > Java, Spring' 카테고리의 다른 글
[Java 기초문법] constructors / getters & setters (0) | 2022.10.17 |
---|---|
[Java 기초문법] object Superclass / Member Visibility / 클래스 계층구조 이해 (0) | 2022.10.17 |
[Java 기초문법] 변수 (0) | 2022.10.17 |
[Java 기초문법] 클래스 class 이해 (0) | 2022.10.17 |
[Java 기초 문법] 자바에서의 객체 지향 관점 Object Oriented Language (0) | 2022.10.16 |