super super는 부모 클래스로부터 상속받은 필드나 메서드를 자식 클래스에서 참조하는데 사용하는 변수다. 조금 정리해서 말하자면 자신이 상속받은 부모를 가리키는 참조 변수인 것 this의 경우 필드, 매개변수명이 동일해서 구분하기 위해 사용했다. super는 부모 클래스의 멤버와 자식 클래스의 멤버 명이 같을 경우 사용하여 구별할 수 있다. 이런 식으로 super 참조 변수는 부모 클래스의 멤버에 접근할 수 있게 된다. 아래 예제를 주석과 함께 살펴보자 class Parent { int a = 10; } // Parent 클래스에서 a = 10 선언 class Child extends Parent { // Child 클래스에서 Parent 클래스 상속 -> a = 10을 가져옴 int a = 20;..
this와 this() 자바에서 this는 객체 자기 자신(참조값)을 가리키는 레퍼런스 변수이며, 자신의 객체에 접근하기 위해 사용한다. 주로 필드와 매개변수 명이 동일할 때, 명확한 구분을 위해 사용한다. this() 같은 경우는 같은 클래스 내 생성자가 다른 생성자를 호출할 때 사용한다. 생성자는 매개변수를 다양하게 받아올 수 있는데(오버로딩), this()를 이용하면 중복 코드를 간단하게 할 수 있다. 주의할 점으론 생성자에서만 사용이 가능하며, 반드시 호출하는 곳의 첫 번째 문장에 작성해야 한다. 아래의 Member 클래스 예제를 살펴보자 public class Member { private int id; private String username; private int age; public Me..
앞서 final 키워드에 대한 포스팅을 올렸는데, static과 같이 사용하면 내용이 길어져서 따로 정리하려고 한다. 우선 static의 경우 객체 생성 없이 사용할 수 있는 필드, 메서드를 생성하고자 할 때 사용된다. static으로 선언될 경우 GC가 관여하지 않는 static 메모리 영역에 적재되어 모든 객체가 공유한다. 물론 너무 남발하면 메모리 할당된 채로 남아있어 좋지는 않다. 특징을 간단하게 요약하자면 아래와 같다. 프로그램이 시작할 때 단 한 번만 생성되고 초기화된다. 인스턴스를 생성하지 않고 바로 사용 가능 해당 클래스의 모든 인스턴스 공유 static과 final 일단 제일 큰 특징은 static과 final를 이용하여 상수 정의에 사용한다. public static final doub..
final final 키워드는 변수(variable), 메서드(method), 또는 클래스(class)에 사용될 수 있다. 어떤 곳에 사용하냐에 따라 다른 의미를 가지며, 어디에 붙던 공통적으로는 제한한다는 성격을 가지고 있다. 변수(variable) 원시 타입 원시 변수에 final을 붙이면 변경할 수 없는 상수 값이 된다. 그렇기에 초기화 값은 필수적이며, 변경 불가능 한 점은 그 변수의 값에 한정된다. final int a = 1; //a = 2; 변경 불가 객체 타입 객체 변수 final 선언의 경우 그 변수에 다른 참조 값을 지정할 수 없다. 한번 쓰여진 변수는 재변경이 불가능하지만, 객체의 속성 자체는 변경이 가능하다. final Member member = new Member(); // me..
인터페이스는 일종의 추상 클래스이다. 하지만 더 추상화된 개념이여서 인터페이스는 추상 메서드 선언만 가능하며, 인스턴스 변수를 가질 수 없다라는 점 저번에 추상 클래스는 '미완성 설계도'라고 칭하자면, 인터페이스는 아에 '기본 설계도'의 개념인 것이다. 1. 인터페이스 작성 인터페이스를 작성하는 것은 기존 클래스를 작성하는 방법과 같은데 다만 키워드로 interface를 사용한다. 그리고 interface도 접근 제어자로 public, default를 사용할 수 있다. 또한, 내부 필드에서 규칙이 있는데, 아래와 같다. 모든 멤버 변수는 public static final 이어야 한다. 모든 메서드는 public abstract 이어야 한다. interface 인터페이스이름 { public static ..
추상화(Abstract) ‘추상적이다.’라는 말을 들으면 나는 애매모호하고 두루뭉실한 느낌이 들었는데, 그래서 그런지 처음 추상화를 들었을 때도 그런 기분이었다. 객체 지향 관점에서의 추상화는 클래스를 정의할 때, 불필요한 부분들을 생략하고 객체의 속성 중 중요한 것에만 중점을 두어 개략화 하는 것, 즉 클래스들의 중요하고 공통된 성질들을 추출하여 슈퍼 클래스를 선정하는 개념이다. 뭐 사실 이론적으로 설명하면 처음에는 뭐라는지 하나도 모르겠다.(본인이 그랬음) 내가 이해한 내용을 요약해서 이야기하자면 다음과 같다. 우선 앞서 포스팅한 메서드와 클래스의 개념을 떠올리자면 클래스안에 메서드가 존재했는데, 추상 클래스(Abstract Class) 안에 추상 메서드(Abstract method)가 존재한다. 검..
메서드(Method) 다른 프로그래밍 언어를 사용하면 함수라는 것이 별도로 존재하는 것을 알 수 있다. 하지만 자바의 함수는 따로 존재하지 않고 클래스 내에 존재한다.(클래스를 떠나 존재할 수 없다.) 자바는 이러한 클래스 내의 함수를 메서드라고 한다. (파이썬같이 메서드랑 함수가 공존하면 구분짓긴 하는데, 자바는 구분해서 언급하진 않는다. 다만, 함수라는 명칭보다 정확한 명칭은 메서드이다.) 클래스도 간단하게 설명하자면 상태(멤버변수)와 동작(메서드)을 가진다고 생각하면 된다. 아래는 메서드 선언 방식이다. public class 클래스명 { 접근제어자 리턴타입 메소드명() { // 메소드 기능 } } 메서드는 보통 이런 경우에 사용한다고 생각하면 편하다. 기능을 만들었는데 반복 호출을 하게 될 경우 ..
생성자 생성자는 간단하게 얘기하면 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메소드'이다. 인스턴스 변수의 초기화 작업에 사용되고, 인스턴스 생성 시에 실행되어야 할 작업을 위해서 사용된다. 생성자명과 클래스명이 같아야 한다. 생성자는 리턴 값이 없다. void 또한 사용하지 않는다. 생성자는 몇 가지 특징을 제외하면 메소드와 다르지 않다. 생성자는 메소드 처럼 클래스 내에 선언되고, 오버 로딩이 가능하므로 하나의 클래스에 여러 개의 생성자가 존재할 수 있다. 1. 기본 생성자(default constructor) 컴파일을 할 때, 소스파일의 클래스에 생성자가 하나도 정의되어있지 않으면 컴파일러가 자동으로 기본 생성자를 생성해서 컴파일해준다. (아래 예제 참고) class Data1 { int va..