Java

    Java - final 키워드

    final final 키워드는 변수(variable), 메소드(method), 또는 클래스(class)의 선언 앞에 사용될 수 있다. 이 final 키워드는 어떤 곳에 사용되냐에 따라 다른 의미를 가진다. 하지만 final 키워드를 붙이면 무언가를 제한한다는 의미를 가지는 것이 공통적인 성격이다. 1. final variable (종단 변수) = constant (상수) 변수에 final을 붙이면 이 변수는 수정할 수 없다는 의미를 가진다. 수정될 수 없기 때문에 초기화 값은 필수적이다. 초기화 전에 사용하면 에러가 발생한다. final int number = 1; 2. final method (종단 메소드) 메소드에 final을 붙이면 override를 제한한다. 즉, 하위 클래스에서 해당 메소드를 수..

    Java - 인터페이스(Interface)

    1. 인터페이스 인터페이스는 클래스가 아니지만, 일종의 추상 클래스라고 생각할 수 있다. 추상 클래스보다 추상화 정도가 높아서 추상 메소드 이외의 일반 메소드나 변수를 구성원으로 가질 수 없다. 오직 추상 메소드와 상수(constant)만 멤버로 가질 수 있으며, 그 외의 요소는 허용하지 않는다. 클래스는 하나의 상속만 가능하지만, 인터페이스는 다중 상속(다중 구현)이 가능하다. 정의할 때 class가 아닌 interface를 써서 정의한다. 클래스의 상속은 extends를 쓰지만 인터페이스의 구현은 implements를 사용한다. 추상클래스와 마찬가지로, 하위 클래스는 모든 추상 메소드를 구현해야 객체로 생성할 수 있다. 제약 사항 모든 멤버 변수는 public static final 이어야 하며, 생..

    Java - 추상 클래스 (Abstract Class)

    1. 추상 클래스 (Abstract Class) 추상 클래스는 미완성된 클래스이다. 추상 클래스는 미완성된 메소드인 추상 메소드를 하나 이상 포함해야 한다. 추상 클래스는 추상 메소드가 아닌 일반 메소드, 멤버도 포함할 수 있다. 클래스 정의 시 앞에 abstract 키워드를 붙인다. 추상 클래스는 동작이 정의되어 있지 않은 추상 메소드를 포함하고 있으므로 객체를 생성할 수 없다. 상속하는 클래스에게 추상 메소드의 구현을 강제화한다. 메소드의 동작은 구현하는 자식 클래스에게 위임한다. 하위 클래스에서, 상속 받은 모든 추상 메소드를 구현하면 객체를 생성할 수 있다. 추상 메소드가 하나라도 구현하지 않은 상태로 남아있으면, 그 하위 클래스도 추상 클래스이다. 추상 클래스는 하위 클래스의 공통점을 뽑아 상속..

    Java - 변수의 종류와 메모리 구조

    선언 위치에 따른 변수의 종류 클래스, 지역, 인스턴스 변수가 있으며 선언된 위치에 따라 종류가 결정된다. public class Test{ int iv; // 인스턴스 변수. static int cv; // 클래스 변수. void print(){ int lv; // 지역 변수. } } iv, cv는 클래스 내부에 선언되어 있으므로 멤버 변수. cv는 static으로 선언되었으니 클래스 변수이고, iv는 인스턴스 변수. lv는 메소드 내에 선언되었으므로 지역 변수. 1. 인스턴스 변수 (Instance Variable) 인스턴스가 생성될 때, 생성된다. 따라서 인스턴스 변수를 사용하기 전에 먼저 객체를 생성해야 한다. 인스턴스 변수는 독립적인 저장공간을 가지므로 인스턴스 별로 다른 값을 가질 수 있다. ..

    Java - 클래스 상속(Inheritance), 오버라이딩(Overriding)

    1. 상속(Inheritance) 자식 클래스는 부모 클래스의 모든 속성을 상속 받고 사용 가능하다. 상속 받은 메소드는 필요에 따라 자식 클래스에서 따로 재정의 할 수 있다. (메소드 오버라이딩) 자식 클래스 정의 방식은 '자식클래스이름 extends 부모클래스'로 정의한다. 자식 클래스 호출시 부모 클래스도 함께 호출 된다. 자식 클래스의 경우 우리 눈에는 안 보이지만 상속 받은 코드가 숨어있다고 생각하면 된다. 2. 메소드 오버라이딩(Method Overriding) 부모 클래스의 메소드에 약간의 기능을 추가한 자식 클래스의 메소드를 만들 경우, 새로운 메소드를 만들지 않고 상속받은 함수를 재활용하여 코드를 작성할 수 있다. 이를 오버라이딩이라고 한다. 오버라이딩: 부모 클래스에서 상속받은 메소드를..

    Java - 접근제어자와 getter/setter, 캡슐화

    1. 접근제어자 Java의 멤버변수와 메소드에는 접근제어자를 지정할 수 있다. 접근제어자의 위치는 데이터타입의 왼쪽이다. 아무것도 적지 않는다(default) : 같은 패키지 내에서만 접근 가능 public : 아무 곳에서나 접근 가능 private : 선언된 클래스 내에서만 접근 가능 protected : 같은 패키지나 상속관계 일 때 접근가능 2. getter / setter 멤버변수가 private으로 되어있으면, 외부에서 접근할 수 없기 때문에 클래스에 멤버변수 데이터를 가져오는 메소드, 저장하는 메소드가 있어야 한다. 이를 getter/ setter 라고 부른다 public class Member { private String name; private String tel; private Stri..

    Java - this 키워드

    1. this 멤버변수와 로컬변수는 메모리의 위치가 다르기 때문에 같은 변수명을 사용해도 된다. 하지만 그렇게 되면, 사람도 헷갈리고 컴퓨터도 헷갈린다. 따라서 this라는 키워드를 이용해서 구분해주는 용도로 쓴다. this는 객체 자기 자신을 의미, 자신의 메모리를 가르킴 전역 변수와 지역 변수를 구분짓기 위한 참조 변수 생성자의 파라미터 이름이 전역 변수와 이름이 같을 때 구분하기 위해 사용 클래스 변수, static 키워드에서는 this를 사용 할 수 없음 public class Member { private String name; private String tel; private String address; public Member(){ } public Member(String name, Stri..

    Java - 생성자(Constructor)

    1. 생성자(Constructor) 생성자는 객체 생성시 자동으로 호출되는 메소드로 멤버 변수의 초기화나, 객체가 생성되자마자 실행해야 할 코드로 구성된다. 생성자는 함수 타입이 없고, 객체를 생성할 때를 제외하고는 클래스 밖에서 호출할 수 없다는 점을 제외하면 일반 메소드와 동일하다. 생성자의 특징은 다음과 같다. 함수 타입(리턴값)이 없다. 이름은 항상 클래스의 이름과 같다. 오버로딩이 가능하므로 여러 개 만들 수 있다. 2. 생성자 오버로딩으로 초기값 저장하기 주의할 점으로, 원래 디폴트 생성자는 눈에 안 보이고 자동으로 만들어지는데 생성자 오버로딩으로 생성자를 만들 경우에는, 반드시 디폴트 생성자도 눈에 보이게 코드로 적어줘야 한다. // 주소록 서비스를 개발하고 있다. public class M..