자바

·JAVA
추상클래스는 추상메소드를 포함하고 있는 클래스이다.추상클래스의 인스턴스는 생성할 수 없으며, 상속을 통해 자손 클래스에서만 완성된다.추상클래스도 일반 클래스와 같이 생성자가 필요하고 일반 메소드도 가질 수 있다.그렇다면 추상메소드란 선언부(리턴타입과 메서드이름)만 작성하고 메소드 내부에서실행할 동작을 작성하지 않은 메소드를 말한다. 이렇게 추상메소드를 만드는 이유는, 메소드의 내용이 추상클래스를 상속받는 클래스가 누구냐에 따라메소드의 실행을 다르게 하기 위함이다. 따라서 조상 클래스(추상 클래스) 에서는 메소드가 어떤 기능을할 지만 주석으로 설명해두고, 상속받은 자손 클래스에서 그것을 구체화시키는 것이다./* 메소드의 기능 설명*/abstract  리턴타입  메소드명();추상 메소드는 구현 내용이 없으므..
·Spring
클래스 로더 자바 코드를 컴파일하면 JVM에서 실행 가능한 상태가 되는데, 이 코드를 실제로 실행하려면 클래스를 로딩하는 과정이 필요하다. 이 과정을 수행하는 역할이 클래스 로더이다. 클래스 로더에는, 부트스트랩 클래스 로더 (최상위 클래스 로더) 확장 클래스 로더 시스템 클래스 로더 사용자 정의 클래스 로더 (개발자가 만든 로더) 와 같이 4가지 유형이 있다. 1. 부트스트랩 로더 : JVM 런타임 실행을 위해 기반이 되는 파일들을 로드 ; rt.jar 파일과 관련있다. ⬇️ 로딩 완료 2. 확장 클래스 로더 : 최상위 객체인 Object 클래스를 포함한 자바 API를 로드 ; ext 폴더 하위에 있는 jar 파일과 관련있다. ⬇️ 로딩 완료 3. 시스템 클래스 로더 : 클래스패스에 포함된 클래스들을 ..
·JAVA
지네릭스란?컴파일 시의 타입 체크를 해주는 기능이다.메소드나 클래스에서는 다양한 타입의 객체들을 다룬다. 그렇기 때문에 간혹 내가 의도하지않은 타입으로 저장되거나, 형변환이 잘못 되는 경우가 있는데, 지네릭스를 활용해 내가 다룰 객체의 타입을 미리명시함으로써 타입 안정성을 제공한다. 지네릭 클래스 선언class Example { T ex1; void setEx1(T ex) {this.ex1 = ex;} T getEx1() {return ex1;}}class Example {...}Example :   지네릭 클래스T :  타입 변수 or 타입 매개 변수Example :  원시 타입 타입 변수는 참조형 타입과 같은데, 아직 타입이 정해지지않은 상태이므로 '변수'라고 칭하는 것이다.이때 타입..
·JAVA
[참조변수타입] [참조변수명] = new [생성할 객체의 생성자]; 틀에서 Parent t = new Parent(); 처럼 참조변수의 타입과 참조하는 인스턴스의 타입이 일치할수도 있지만, Parent t = new Child(); 와 같이 다를 수도 있다. 참조변수의 타입과 인스턴스의 타입이 다를 때, 참조변수의 타입은 인스턴스 타입의 조상이어야 한다. 자손타입의 참조변수가 조상타입의 인스턴스를 참조할 수 없다는 것과 같다. 클래스는 상속관계를 이어나가면서 확대되고 구체화되는데, 이 과정에서 멤버의 개수는 늘어난다. 참조변수의 타입이 자손이고 인스턴스 타입이 조상일 때, 인스턴스(조상)에 존재하지않는 멤버를 사용하고자 할 수 있으므로 허용하지 않는 것이다. 즉, (참조변수가 다룰 수 있는 멤버의 수)
·JAVA
this와 this()처럼, super와 super()의 차이도 비슷하다. supersuper: 조상 클래스와 자신의 멤버 이름이 같을 때 구분하기위한 참조변수클래스 Parent에서는 변수 x를 10으로 초기화하고, 이를 상속받은클래스 Child에는 x를 20으로 초기화했을 때Child 내부에서 this와 super로 달라지는 x의 값을 살펴보자. x ► 20        ・・・・・・・    x를 상속받았어도 자신 내부에서 다시 20으로 초기화했기 때문에, x의 값은 20this.x ► 20        ・・・・・・・    this는 인스턴스 자신의 주소를 담고있는 참조변수. 따라서 Child 클래스의 x값인 20super.x ► 10        ・・・・・・・    조상클래스의 x값인 10 super(..
·JAVA
클래스 간의 관계 중 상속 관계와 비슷한 포함관계가 있다. 포함관계란, 한 클래스의 멤버변수를, 다른 클래스의 멤버변수를 참조하는 참조변수로 사용하는 것을 뜻한다. 규모가 큰 하나의 클래스를 만드는 것보다 단위별로 여러 개의 클래스를 작성하고, 포함관계를 사용하면 재사용성이 높고 더 간결하게 클래스를 작성할 수 있다. 포함 관계와 상속 관계 모두 한 클래스에서 다른 클래스를 활용하는 것이기 때문에 둘 중 어느 것을 사용해야할 지 헷갈릴 수 있다. 그럴 땐 더보기 '고양이는 동물이다' 처럼 [~는~이다] is-a 관계일 땐 상속을 '이어폰은 잭을 가지고있다.' 처럼 [~은~을 가지고있다] has-a 관계일 땐 포함을 항상 딱 떨어지는 것은 아니지만 감을 잡기에 쉬운 방법이다. class DrawShape{..
·JAVA
멤버변수와 지역변수 중, 변수 선언을 하고 초기화가 자동으로 이루어지는 것은? 멤버변수이다. 지역변수는 자동적으로 초기화되지 않기 때문에, 꼭 초기화를 하고 사용해야한다. 참고로 멤버변수의 각 타입별 기본값은 아래와 같다. 자료형 기본값 boolean false char '\u0000' byte short int 0 long 0L float 0.0f double 0.0d 또는 0.0 참조변수 null 멤버변수의 초기화 방법에는 1. 명시적 초기화 int i = 0; 과 같이 선언과 동시에 초기화 하는 것을 명시적 초기화라고 한다. 2. 초기화 블럭 클래스 변수를 초기화하고싶을 때엔 클래스 초기화 블럭을, 인스턴스 변수를 초기화하고 싶을 때엔 인스턴스 초기화 블럭을 사용한다. 단지 {}안에 초기화 내용을 ..
·JAVA
생성자란?인스턴스가 생성될 때 호출되는 인스턴스 초기화 메소드생성자의 이름은 클래스의 이름과 같아야 하며, 리턴값이 없다.모든 생성자는 리턴값이 없기 때문에 선언부 앞에 void를 적지 않는다. 또한 생성자도 오버로딩이 가능하므로 하나의 클래스에 여러개의 생성자를 만들 수 있다.모든 클래스에는 반드시 하나 이상의 생성자가 있어야 하는데, 별도로 생성자를 만들지 않았을 시엔 컴파일러가 기본 생성자를 자동으로 추가한다. 기본 생성자는 '클래스명() {}' 과 같이 매개변수도 없고 내용도 없는 생성자이다.매개변수가 있는 생성자를 만들었을 때는 인스턴스를 생성함과 동시에인스턴스 변수를 원하는 값으로 초기화할 수 있기 때문에 더 간결하고 편리하다.class Car{ //인스턴스 변수들 String color..
·JAVA
스태틱 메소드는 클래스 변수처럼 객체를 생성하지않고도 [클래스명.메소드명]으로 호출할 수 있다.반면 인스턴스 메소드는 객체를 생성해야 호출 가능하다. 인스턴스 변수는 객체를 생성하지않으면 사용이 불가능한데, 스태틱 메소드는 그렇지 않다. 만약 객체를 생성하지않은 상태이고, 스태틱 메소드 로직에서 인스턴스 변수가 사용된다면아직 생성되지않은 객체의 인스턴스 변수를 사용하려고 하므로 문제가 발생할 것이다. 따라서 스태틱 메소드에서 인스턴스 변수의 사용을 금지한다. 이와 반대로 인스턴스 변수나 인스턴스 메소드에서는 static이 붙은 멤버들을 사용하는 것이 언제나 가능하다! 인스턴스 변수가 존재한다는 것은 static 변수가 이미 메모리에 존재한다는 것을 의미하기 때문이다. (static 멤버들은 클래스가 로딩..
·JAVA
참조 변수는 값이 저장되어있는 주소를 저장하고 있는 변수다. 따라서 매개변수의 타입이 참조형이라면인스턴스의 주소가 복사된다. 참조형 변수를 사용하면 값을 읽는 것은 물론 변경까지 가능하다. 기본형 매개변수를 사용할 때class Data {int x;}class Practice { public static void main(String[] args){ Data d = new Data(); d.x = 10; change(d.x); System.out.println(d.x); // (ㄱ) } static void change(int x){ x = 1000; System.out.println(x); // (ㄴ) }}Data ..
·JAVA
변수변수는 스태틱 변수, 인스턴스 변수, 지역변수로 나뉜다.  변수의 종류를 알려면 '변수가 선언된 위치'를확인하자. 멤버변수에 스태틱 변수와 인스턴스 변수가 있고, 멤버 변수가 아닌 것들은 지역변수이다. 1. 스태틱(클래스) 변수클래스 영역 안에 선언되며 클래스가 메모리에 로딩될 때 생성, 프로그램이 종료될 때까지 유지된다.클래스 변수는 모든 인스턴스가 같은 저장공간을 공유하므로, 공통된 값을 유지해야할 때 사용한다.인스턴스를 생성하지않고도 사용할 수 있다는 특징이 있으며 [참조변수명.클래스 변수] 로 사용할 수도 있지만이는 인스턴스 변수와 헷갈릴 수도 있으니 [클래스명.클래스 변수]로 사용하자. 2. 인스턴스 변수클래스 영역 안에 선언되며 인스턴스가 생성될 때 만들어진다. 때문에 클래스 변수와 달리,..
·JAVA
많은 수의 객체를 다루어야할 때, 객체 역시 배열을 사용할 수 있다. 객체 배열의 원소는 객체가 아닌 객체의 주소이며, 이는 그 객체를 참조하는 참조변수와 같기 때문에 참조변수들을 하나로 묶은 참조변수배열이라고 볼 수 있다. Car[] carArr = new Car[3];//길이가 3인 Car타입 객체배열 생성 for(int i=0;i
HipPopoTamUs
'자바' 태그의 글 목록