본문 바로가기

언어공부/Java

(83)
자바 super 레퍼런스, super. 와 super() 자바 super 레퍼런스에 대해서 알아보자. super 레퍼런스 상속관계에서 자식클래스 영역에서 부모클래스의 메소드가 오버라이딩 된 경우 부모클래스의 메소드를 호출하려면 super를 사용한다. super는 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수이다. this가 자기자신을 가리킨다면, super는 상속받은 클래스를 가리킨다. super는 정적메소드 내에서는 사용할 수 없고, 인스턴스 메소드에서만 사용 가능하다. super. 사용하는 경우 super는 조상 클래스를 참조하는 참조변수로, 상속받은 멤버나 메소드가 이름이 같을 때는 super를 붙여서 구별한다. print()메소드를 호출하면 자손클래스의 멤버변수가 호출되며, print2()메소드를 호출하면 x와 y는 su..
자바 메소드 오버라이딩(Overriding), 오버라이딩과 오버로딩 차이 자바 메소드 오버라이딩에 대해서 알아보자. 메소드 오버라이딩(Method Overriding) 조상 클래스로부터 상속받은 메소드의 내용을 자식 클래스에 맞게 변경하는 것을 오버라이딩 이라고 한다. 상속받은 메소드를 그대로 사용하기도 하지만, 자손 클래스 자신에 맞게 변경해야하는 경우가 많기 때문에 오버라이딩이 필요하다. 오버라이딩의 조건은 아래와 같다. 오버라이딩은 반드시 부모자식간의 상속관계를 만들어야 한다. 자손클래스에서 부모클래스의 기존 메소드이름, 전달인자의 자료형과 전달인자의 개수, 반환타입등을 동일하게 정의한다. 자손클래스에서 메소드는 부모클래스의 접근 제어보다 더 좁아질 수 없다. 예외는 조상 클래스의 메소드보다 많이 선언할 수 없다. 생성자는 상속이 되지 않기 때문에 생성자 오버라이딩은 없..
자바 상속 extends, 단일상속, 최상위 조상클래스 Object 자바의 상속에 대해서 알아보자. 상속 상속이란 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 상속을 통해서 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다.(재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여함.) 자바에서 상속을 구현하는 방법은 새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드 'extends'와 함께 써주면 된다. 여기서 상속해주는 클래스를 '부모(조상) 클래스'라 하고 상속 받는 클래스를 '자식(자손) 클래스'라 한다. 클래스는 타원으로 표현하고 클래스간의 상속관계는 화살표로 표시했다. 자손 클래스는 조상 ..
자바 static 변수 (정적 변수), static 메소드 (정적 메소드) 자바 static 변수와 static 메소드에 대해서 알아보자. static변수(정적변수, 클래스변수) 인스턴스 변수는 인스턴스가 생성될 때 마다 생성되므로 인스턴스마다 각기 다른 값을 유지할 수 있지만, 클래스 변수는 모든 인스턴스가 하나의 저장공간을 공유하므로, 항상 공통된 값을 가진다. static 예약어로 정의된 변수를 클래스(정적)변수라고 한다. 클래스변수는 클래스로 직접 접근한다. static메소드(정적메소드, 클래스메소드) 메소드 앞에 static이 붙어있으면 정적메소드이고 붙어있지 않으면 인스턴스 메소드이다. 클래스 메소드도 클래스 변수처럼 객체를 생성하지 않고도 "클래스이름.메소드이름(매개변수)"와 같은 식으로 호출이 가능하다. 물론 new키워드로 생성된 모든 객체에 의해서 정적메소드는 ..
자바 this 레퍼런스, this. 와 this() 자바 this 레퍼런스에 대해서 알아보자. this 레퍼런스 클래스를 구성하는 인스턴스변수는 객체 생성할 때마다 새롭게 메모리 할당을 하기 때문에 객체 단위로 따로 관리된다. 하지만 멤버함수는 모든 객체가 이 멤버함수를 공유해서 사용한다. this는 참조변수로 인스턴스 자신을 가리킨다. this를 사용할 수 있는 것은 인스턴스 변수이며, static으로 정의된 클래스 메소드에서는 인스턴스 변수와 this를 사용할 수 없다. *this를 사용해야만 하는 경우 메소드(생성자 포함)의 매개변수와 클래스 멤버변수가 동일한 이름일 경우 전달인자와 속성이 구분이 되지 않기 때문에 문제가 발생하는데 이를 구분짓기 위해서 속성 앞에 레퍼런스 this를 덧붙인다. 멤버변수 앞에 this를 붙여야 값이 저장된다. this..
자바 생성자(Constructor), 생성자 오버로딩(Constructor Overloading), 초기화 블록 자바 생성자(Constructor)에 대해서 알아보자. 생성자(Constructor) 생성자는 인스턴스가 생성될 때 호출되는 "인스턴트 변수 초기화 메소드"이다. 따라서 인스턴스 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행되어야 하는 작업을 위해서도 사용된다. 생성자 역시 메소드처럼 클래스 내에 선언되며, 구조도 메소드와 유사하지만 리턴값이 없다는 점이 다르다. 그렇다고해서 생성자 앞에 리턴값이 없음을 뜻하는 키워드 void를 사용하지 않고 아무것도 적지 않는다. 클래스의 구조를 본다면 아래와 같다. 생성자의 특징은 아래와 같다. 생성자 이름은 클래스 이름과 같다. 생성자는 new 클래스명();에 의해서 호출된다. (연산자 new가 인스턴트 생성. 생성자가 인스턴트 생성X) 생성자는 메..
자바 메소드 오버로딩(메서드 오버로딩, Method Overloading), 자바 가변인자(Varargs, Variable Argument List) 메소드 오버로딩(Method overloading)에 대해서 알아보자. 오버로딩(Overloading) 자바에서 한 클래스 내에서 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다. 한 클래스 내에 같은 이름의 메소드를 여러 개 정의하는 것을 "메소드 오버로딩(Method Overloading)" 또는 간단히 "오버로딩(Overloading)"이라 한다. 메소드 오버로딩 구분 요건은 아래와 같다. 메소드 이름이 같아야 한다. 매개변수의 개수, 타입 또는 순서가 달라야 한다. 반환 타입은 관계 없다. 위의 조건을 만족시키지 못하는 메소드는 중복 정의로 간주되어 컴파일 시에 에러가 발생한다. 그리고 오버로딩된 메소드..
자바 접근 제어자 - private (동일 클래스 내에서만 사용 가능), public, default, private, 캡슐화 자바 접근 제어자 private에 대해서 알아보자. 자바 접근 제어자에는 public, protected, (default), private가 있다. 접근 범위는 public > protected > (default) > private 순이며, public은 전체적으로 접근이 가능하며, protected는 동일 클래스, 동일 패키지, 다른패키지의 자손클래스에서 접근이 가능, (default)는 동일 클래스, 동일 패키지 내에서만 접근 가능, private는 클래스 내에서만 접근이 가능하다. 접근제어자가 default라는 것은 아무런 접근 제어자도 붙이지 않는것을 의미한다. 추가로 아래처럼 사용이 가능하다. 클래스 – public, default, abstract, final ​ 필드 – private, ..