본문 바로가기

언어공부

(188)
자바 다형성, 참조변수의 형변환, 업캐스팅, 다운캐스팅, instance of 자바 다형성에 대해서 알아보자. 다형성(polymorphism) 다형성이란 여러가지 형태를 가질 수 있는 능력을 의미한다. 자바에서는 한 타입의 참조변수로 여러타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현하였다. 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하였다는 것이다. 이전까지 우리는 인스턴스의 타입과 일치하는 타입의 참조변수만을 사용했다. 즉 Tv인스턴스를 다루기 위해서는 Tv타입의 참조변수를 사용하고, SmartTv인스턴스를 다루기 위해서는 SmartTv타입의 참조변수를 사용했다. ex) Tv t= new Tv(); SmartTv s= new SmartTv(); (class SmartTv extends Tv) 이처럼 인스턴스 타입과 참조변수의 타입..
자바 패키지(Package), 패키지 선언, import문, static import문 자바 패키지, import에 대해서 알아보자. 패키지(Package) 패키지는 클래스 묶음을 뜻한다. 패키지에는 클래스 또는 인터페이스를 포함시킬 수 있으며, 서로 관련된 클래스끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있다. 또한 같은 이름의 클래스라도 서로 다른 패키지에 존재하는 것이 가능하므로 자신만의 패키지 체계를 유지함으로써 이름이 충돌하는 것을 피할 수 있다. 실제로 클래스의 풀네임은 패키지명을 포함한 것이다. String클래스의 실제 이름은 java.lang.String이다. jav.lang패키지에 속한 String클래스 라는 의미이다. 그래서 같은 이름의 클래스일지라도 서로 다른 패키지에 속하면 패키지명으로 구별이 가능하다. 클래스가 물리적으로 하나의 클래스파일(.cl..
자바 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) 생성자는 메..