본문 바로가기

develop/Java

(43)
레퍼런스 형변환 앞에서 기본형타입끼리의 형변환을 배웠고 이번엔 참조형 데이터타입끼리의 형변환을 배워보고자 한다. 이 형변환은 상속 관계에서만 가능함. 그리고 1. 업캐스팅 2.다운캐스팅으로 나뉨 이 형변환은 참조형 변수로 다른 타입 인스턴스(객체)를 참조하기 위해 변환하는 것 1. 업캐스팅 서브클래스(down)의 인스턴스를 슈퍼클래스(up) 타입으로 변환하는 것으로 아래에서 위로 변환되기에 업캐스팅이라고 한다. 업캐스팅을 통해 슈퍼클래스의 레퍼런스가 서브클래스의 인스턴스를 가리킬 수 있다. 작은 곳에서 큰 곳으로 이동하기 때문에 별도의 처리 없이 컴파일러가 자동으로 형변환을 처리한다. 참조 가능한 영역이 축소된다. 이유는 슈퍼클래스로부터 상속된 멤버에는 접근 가능하고, 서브클래스에서 추가적으로 생성된 멤버에는 접근이 불..
생성자 super 개어려븜 m.blog.naver.com/PostView.nhn?blogId=heartflow89&logNo=220961980579&proxyReferer=https:%2F%2Fwww.google.com%2F [JAVA/자바] 상속에서의 생성자 이전 포스팅에서 상속에 대해서 알아보았다. 상속은 부모 클래스의 메소드 및 필드를 물려받는다고 하였다.... blog.naver.com 이 분 블로그 참조하니 이해가 아주 잘됨 요약 1. 부모 클래스의 생성자는 상속되지 않고, 자식 클래스로 인스턴스를 생성할 때 자동적으로 부모의 기본 생성자가 호출된다. 2. 부모 생성자가 매개변수를 갖고 있다면 자식 클래스를 인스턴스화할 때 자동으로 호출되지 않는다. 3. 따라서 자식 생성자에서 명시적으로 부모 생성자를 호출해야 ..
메서드 오버라이딩(Method Overriding) 먼말이지 .. 메서드 오버로딩은 메서드 이름은 똑같이 하는데 ... 슈퍼클래스로부터 상속받은 메서드를 서브클래스에서 새롭게 재정의... 슈퍼클래스의 메서드를 덮어쓴다 포토샵으로 뭐 만들고 저장할 때 같은 이름으로 저장하면 덮어쓸까요? yes -> 그 이름으로 된 새로운 파일 생성 이라고 이해하는 중 기존 슈퍼클래스의 메서드와 동일하게 생긴 메서드를 정의하게 되므로 서브클래스 인스턴스에서는 더 이상 슈퍼클래스의 메서드가 보이지 않는다. (은닉) 슈퍼클래스의 메서드를 그대로 사용하지 않고, 새로운 기능을 추가하는 등 메서드의 내용을 변경할 때 사용 => 기능은 변경하되, 형태는 똑같이 유지 1. 상속 관계에서만 사용 2. 메서드 시그니처 (메서드명, 리턴타입, 파라미터)가 일치해야함 3. 접근제한자는 같거나..
접근 제한자(Access Modifier) 접근 제한자(Access Modifier) 클래스 내의 멤버에 접근 가능한 범위를 지정하는 키워드 넓 public - protected - default - private 좁 1. public : 누구나 (모든 클래스에서) 접근 가능 2. protected : 같은 패키지의 다른 클래스에서 접근 가능하며, 다른 패키지의 서브 클래스에서도 접근 가능 3. default : 같은 패키지의 다른 클래스에서 접근 가능(=접근 제한자를 생략 =default) 4. private : 자신의 클래스에서만 접근 가능 = 다른 클래스에서 접근 불가능 보통 상속관계에 있는 슈퍼클래스 멤버는 참조변수 없이 접근 가능하나 참조변수를 통해 접근하는 경우 상속관계가 아닌 일반적인 포함관계로 접근하게 되어 접근 범위가 달라지게 된..
상속(Inheritance) 상속 현실에서 부모가 자식에게 재산이나 부동산을 상속하듯, 프로그래밍에서도 부모 클래스에서 자식 클래스가 코드를 그대로 상속 받을 수 있다. 상속 받은 코드는 자식 클래스에서 합쳐서 사용 가능함. 부모 클래스의 멤버를 자식클래스에서 물려받아 선언없이 사용하는 것 부모 클래스 - 슈퍼클래스, 상위클래스 => 멤버를 물려주는 클래스 자식 클래스 - 서브클래스, 하위클래스 => 멤버를 물려받아 선언없이 사용하는 클래스 클래스 정의 시 별도로 상속 대상을 지정하지 않을 경우 jave.lang.Object 클래스를 자동으로 상속 받는다. 특정 클래스를 상속 받은 서브클래스를 다시 상속받는 경우 상속받은 슈퍼클래스 뿐만 아니라 상속받은 슈퍼클래스의 슈퍼클래스 멤버까지 모두 상속, 계층 구조를 갖게 됨 (아들 - 아..
싱글톤 디자인 패턴(Singleton Design Pattern) 아.. 다 써놨는데 날렸다. 전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우. 단 하나만 생성하는 객체를 싱글톤이라고 한다. 유일한 객체 사용을 위해 하나의 인스턴스만 생성하도록 함. 1. 외부에서 인스턴스 생성을 하지 못하게 차단 (=private) 2. 클래스 내에서 직접 인스턴스 생성해 외부에 리턴 (=getInstance()) 3. 해당 클래스는 누구나 생성된 인스턴스를 전달받아 사용해야함 (=기존의 인스턴스 공유) 단 하나의 객체를 만들기 위해서 클래스 외부에서 new 생성자로 호출할 수 없도록(인스턴스 생성할 수 없도록) 막기 위해서 접근 제한자 private를 붙혀준다. 그리고 static 변수를 하나 선언하고 자신의 객체를 생성해 초기화한다. (이 경우는 생성자 호출 가능)..
static 메서드 static 메서드 (정적 메서드) 보통 메서드 모양 public (리턴타입) 메서드명(){} static 메서드 모양은 public static (리턴타입) 메서드명(){} 데이터타입(리턴타입) 앞에 static 키워드를 붙혀 클래스가 메모리에 로딩될 때 함께 로딩된다. 이 역시도 인스턴스 생성과 무관하며 클래스명만으로도 접근 가능하다. (인스턴스 생성 전에 먼저 메모리에 로딩됨) 인스턴스 생성 시점에서 메모리에 로딩되는 대상들은 static 메서드 내에서 접근 불가능. 1. 인스턴스 멤버에 접근 불가 2. 레퍼런스 this 사용 불가 => static 키워드가 붙은 메서드가 로딩되는 시점과 일반 인스턴스들이 로딩되는 시점이 다르다는 점을 유념해야 함! static 메서드도 참조변수를 통해서 호출할 수..
static static 키워드 클래스, 메서드, 변수의 지정자로 사용가능하다.. 메서드 혹은 변수에 static 키워드를 사용할 경우 인스턴스 생성과 관계없이 클래스가 로딩되는 시점에 메모리에 로딩.. => 따라서, 인스턴스 생성(참조변수) 없이 클래스명만으로 접근 가능 static 변수=정적 변수 인스턴스 생성되기 전, 클래스가 메모리에 로딩될 대 함께 로딩됨 인스턴스 생성 없이 클래스명만으로도 해당 변수에 접근이 가능함 => 클래스명.변수명 형태로 접근 모든 인스턴스가 하나의 변수(메모리)를 공유 => 하나의 인스턴스에서 값을 변경하면 나머지 인스턴스도 영향받음 보통은 인스턴스가 생성되서 앞에 참조 변수를 붙인 형태로 접근했지만 static이 붙으면 클래스가 메모리에 로딩되면서 같이 나타난다. 그래서 인스턴스 ..