제어자는 클래스, 변수 또는 메소드 선언부에 함께 사용하여 의미를 부여해주는 역할을 한다 크게 두가지로 나누어 진다. 접근제어자 : public, protected, default, private 일반 제어자 : static, final, abstract, native,synchronized,... 제어자는 클래스나 멤버변수, 메소드에 주로 사용되며, 하나의 대상에 대해 여러 제어자를 조합해 사용할 수 있다. 단 접근 제어자는 한번에 네가지 중 하나만 선택해 사용할 수 있다. 대표적인 일반 제어자 1. static : 멤버변수, 초기화블록 , 메소드 static은 클래스의, 공통적인 이라는 의미를 가지고 있다. 이는 클래스 변수 혹은 클래스 메소드를 선언할 때 사용한다. 그리고 한가지 더, 초기화 블록..
super은 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수이다. this가 자신이 속한 인스턴스를 가리키는 것처럼 super는 자신의 부모 클래스에 대한 참조를 하는 변수이다. super또한 static으로 선언된 클래스 변수 / 메소드에 대해서는 사용할 수 없으며 인스턴스 변수 / 메소드에 대해서만 사용이 가능하다. class Parent1{ int x = 20; int y = 30; } class Child1 extends Parent1{ int y = 10; void method(){ System.out.println("x = " + x); System.out.println("this.x = " + this.x); System.out.println("super.x =..
우선 아래 자바코드를 보자. 이 자바코드는 간단하게 랜덤 덱을 생성하고, 덱에서 랜덤 카드를 뽑는 기능을 하고 있습니다. 이 코드를 실행하고 보면 이러한 결과가 나옵니다 Card2@6bc7c054 class Card2{ static int typeNumber = 2; static int MaxNumber = 10; static String[] types = {"Spade","Heart","Diamond"}; private String Shape; private int Number; Card2(String Shape, int Number){ this.Shape =Shape; this.Number = Number; } Card2(){ this(types[(int)(Math.random() * typeNumb..
초기화 초기화란 변수를 선언하고 처음으로 값을 저장하는것을 의미한다. 이 초기화 작업은 상황에 따라 필수적이기도 하고 필수적이지 않기도 하다. 다만, 지역변수는 사용하기 전에 꼭 초기화를 해주는것이 좋다. 멤버변수의 초기화는 지역변수와 달리 여러가지 방법이 있다. 명시적 초기화(explicit initialization) 생성자(Constructor) 초기화 블록(Initializtion Block) 인스턴스 초기화 블록 : 인스턴스 변수를 생성할 때 마다 실행되는 블록 클래스 초기화 블록 : 클래스 변수에 대해 초기화를 수행하는 블록 명시적 초기화 명시적 초기화는 일반적인 변수선언과 똑같은 방식이다. 다른 초기화 방법들 중 가장 우선시 고려되는 방법이다. class test{ private int co..
JVM은 Java Virtual Machine의 약자로 자바 가상 머신이다. JVM은 시스템으로 부터 프로그램을 수행하는데 필요한 메모리를 할당받고 JVM은 이 메모리를 용도에 따라 영역으로 나눠 관리한다. 이 영역에는 크게 3가지가 있다. 메소드 영역, 콜스택 영역, 힙 영역. 각 영역의 역할은 아래와 같다 1. 메소드 영역 특정 클래스가 사용되면 해당 클래스 파일을 읽어 분석후 클래스에 대한 정보가 저장되는 곳이다. 클래스 변수 또한 이곳에 저장된다 2. 힙 영역 인스턴스가 생성되는 공간이다. 프로그램 실행중에 생성되는 인스턴스가 모두 이곳에 생성된다. 즉, 인스턴스 변수가 저장되는곳이라고 생각하면 된다. 3. 호출스택 메소드의 작업에 필요한 메모리 공간을 제공한다. 작업을 수행하는 중간에 저장되는 ..
한 클래스내에 두개 이상의 동일한 이름을 가진 메소드를 선언하는것은 불가능하다. 그러나 이름이 동일한메소드에서 매개변수에 대한 정보가 서로 다르다면 동일한 이름을 가진 메소드를 두개 이상 선언하는것이 가능한데, 이를 우리는 메소드 오버로딩(Method Overloading)이라고 한다. 매개변수 정보가 서로 다르다는것이 어떤 의미일까? 코드로 보면 다음과 같이 볼 수 있다. 12345class test{ void a(int b){} void a(int c, int p){} void a(int d, double e){}}cs다음 클래스를 보면 a라는 동일한 이름을 가진 메소드가 3개 선언되었다. 첫번째 a라는 메소드는 정수형 b라는 매개변수를 두번째 a라는 메소드는 정수형 c라는 메소드는 정수형 d라는 매..
자바에서 예시들을 보면 public static void main(String[] args)라고 되어있는 main()함수를 볼 수 있다. 근데 main()이라고만 쓰면 되지 public static은 왜 붙는 것인가? 우선적으로 말하자면 main()함수는 자바에서 꼭 public static 선언을 해주어야한다. 이의 근거는 다음과 같다. 우선적으로 main()함수의 호출은 클래스의 외부로부터의 호출을 받는다. 즉 이 점에서 public선언을 해준다. 그 다음 main()메소드는 인스턴스 생성전에 호출이된다. 이 점에서 static선언을 해준다.(static 선언 성질 -> 인스턴스 정의 전에 호출할 수 있다.) 1234567891011class a { void b(){ System.out.println..
클래스 변수는 클래스 내에 정의된 변수에 static을 선언해 주면 '클래스 변수' 가 된다. 이와 동일한 방법으로 클래스 내의 메소드에 대해서 static선언을 해주면 '클래스 메소드'가 된다. 클래스 메소드와 클래스 변수는 매우 유사하디. 접근 방법도 동일하고 인스턴스 생성 이전에 호출이 가능하며, 어떠한 인스턴스에도 소속되어 있지 않다는 점 또한 동일하다. 클래스 변수의 특징은 다음과 같았다. 1 . 인스턴스 생성 이전부터 접근이 가능하다. 2 . 어떠한 인스턴스에도 소속되어있지 않다. 클래스 메소드 또한 이와 동일한 특성을 가진다. 우선 예시를 보면서 메소드 호출을 살펴보자. 12345678910111213141516171819202122232425262728293031class clmeth{ p..
인스턴스 멤버에는 인스턴스 변수, 인스턴스 메소드 이 두가지가 존재하였다. 그중 인스턴스 변수는 인스턴스를 생성하게 되면 생성하는 변수를 의미한다. 만약 '클래스 변수' 라고 한다면 이는 당연히 클래스가 생성되면 생성되는 변수를 의미할 것이다. 이번에는 클래스 변수에 대해 살펴보고자 한다. 클래스 내 선언된 변수 앞에 'static'이라는 키워드를 붙이게 되면 '인스턴스 변수'가 아닌 '클래스 변수'가 된다. 예시코드와 결과값을 한번 살펴보자. 12345678910111213141516class clasv { static int a = 0; clasv() { a += 1; System.out.println("인스턴스 총 개수 :" + a); }} class ma{ public static void mai..