Java 81

[Java]InstanceOf

InstanceOf 연산자란? 두 클래스간의 형변환이 가능한지 판단하는 연산자 해당 인스턴스 변수가 어떤 타입의 변수인지 판단하는 연산자 두 클래스간의 상속관계가 있어야 한다. 즉, is a 관계가 성립한다. 해당 인스턴스변수가 해당 타입이면 true, 아니면 false를 반환한다. [형식] 1) 두 클래스 간 상속관계가 존재 하지 않을 때 ▲ String과 StringBuffer는 서로 아무 관계도 아니기 때문에 상속관계도 아니다. 따라서 서로 형변환이 불가하다. 하지만 두 클래스 모두 Object클래스를 상속받고 있기 때문에 Object클래스와는 상속관계에 있다. ▲호모 지니어스 방식에서 Object타입인 obj는 String클래스의 부모클래스이다. 부모 즉, 큰 그릇의 내용물을 자식 즉, 작은그릇의..

Java 2022.03.15

[Java]오버라이드(Override)

오버라이딩(Overriding)이란? : 상속시에 적용되는 개념 즉, 부모로부터 상속 받은 메소드를 재정의해서 사용하는 것을 말한다. 오버라이딩 규칙 메소드명이 동일해야 한다. 메소드의 매개변수 갯수, 데이터타입, 순서 및 반환타입이 모두 같아야 한다. 부모 메소드의 접근 지정자가 public이거나 protected인 경우에만 오버라이딩이 된다. 부모메소드가 default 지정자나 private지정자를 가진 메소드를 오버라이딩 한 경우 자식 고유의 메소드로 처리된다. 오버라이딩의 개념을 예제로 알아보기위해 부모와 자식클래스를 각각 만들어보자. ▲ Parent메소드의 맴버변수와 기본생성자, 인자생성자를 만들자. ▲ 각각의 메소드를 만들면서 접근지정자를 모두 다르게 설정해서 만들었으며, static메소드와 ..

Java 2022.03.15

[Java]Super() - 부모의 기본생성자

super키워드란? 부모클래스를 지칭한다. 즉, 부모 클래스의 맴버(인스턴스형, 메소드)에 접근할 때 사용한다. 자식클래스와 부모클래스의 맴버명이 동일할 때 구분해주기 위한 키워드(this와 동일) 정적메소드안에서 사용불가하다(this와 동일) super() 부모의 생성자 호출 자식의 생성자 안에서만 호출가능하다 this()와 super() 동시호출 불가하며 자식의 생성자(기본, 인자)에서는 super()로 명시하지 않으면 무조건 먼저 부모의 기본 생성자를 호출한다. super()역시 항상 첫문장으로 기술 super() 를 사용해보기 위해 동물로 예제를 들어보겠다. ▲ 부모클래스가 될 Animal을 추상화 해주었다. ▲ Animal을 상속받을 Dog클래스를 만들었다. 기본생성자와 인자생성자를 만들어 주었..

Java 2022.03.14

[Java]상속(Inheritance)

상속이란 우리 인간들의 세계에서 사용하는 그 상속과 동일한 개념이다. 프로그래밍에서 상속을 사용하는 가장 큰 이유는 바로 재사용성을 높이기 위해서이다. 부모 클래스로부터 상속을 받은 기능은 또 새로 정의할 필요 없이 사용만 하면 되기 때문이다. 상속(Inheritanc)의 원칙 부모 클래스에 새로운 기능이나 속성을 추가하여 새로운 자식 클래스로 만드는 것을 의미한다. 상속개념을 적용함으로써 개발시간 단축, 재사용성 등으로 OOP 장점을 살릴 수 있다. 상속관계는 부모와 자식간에 "자식 is a부모"라는 'is a'관계가 성립할 때 맺을 수 있다. Java에서 상속을 받을 때는 extends란 키워드를 사용한다. Java는 단일 상속 개념이므로 extends로 상속 받을 수 있는 클래스는 단 하나뿐이다. ..

Java 2022.03.14

[Java]String Constructor

우리가 Wrapper클래스 포스팅에서 메소드를 이용한 여러 타입의 클래스에서 형변환에 대해 알아봤었다. 이번 포스팅에서는 String클래스에서 다른클래스로 또는 다른클래스에서 String클래스로 형변환을 할 때 메소드가 아닌 생성자(Constructor)를 이용하여 형변환하는 법에 대해 알아보도록 하자. 1. byte[] -> String ▲ byte형 배열을 Stirng형으로 형변환해보자. String클래스에서는 생성자의 인자로 byte형 배열을 받으면 그것을 곧 String형 배열로 변환해주는 기능을 가지고 있다. 또한 byte[] 뒤에 시작인덱스와 원하는 갯수를 넣어주면 해당 인덱스부터 원하는 갯수만큼의 데이터를 반환하는 기능도 있다. ▲ byte배열에 있던 숫자데이터들이 String으로 바뀌면서 ..

Java 2022.03.14

[Java]싱글톤 디자인(Single Tone Design)

싱글톤 디자인(Single Tone Design)이란? 클래스를 설계하는 디자인 패턴의 하나로, 하나의 인스턴스 즉, 하나의 메모리를 생성해 이를 공유하고자 할 때 사용하는 패턴이다. 즉 하나의 메모리를 서로 공유해서 사용하므로, 값 변경 시 문제가 발생할 수 있는 경우는 읽기전용으로 하자. 읽기전용이라는 것은 getter만 가지는 것을 예로 들 수 있다. 대표적으로 java.util패키지의 Calendar클래스가 있다. 싱글톤 디자인의 방법 생성자의 접근 지정자를 private으로 한다. 정적 메소드로 해당 클래스의 객체를 반환하도록 정의한다. 싱글톤을 사용한 것과 하지 않은 것의 차이를 알기위해 우선 싱글톤을 사용하지 않은 경우부터 예제로 보자. ▲ 위 코드를 출력해보자 ▲ NoSingleTone 타..

Java 2022.03.14

[Java]this() - 자기 자신의 기본생성자

this( ) 란? 자기 자신의 생성자를 의미 ★★ 항상 생성자안에서만 사용이 가능하다 ★★ 생성자 안에서도 맨 첫번째 문장에 와야한다. 맴버변수만큼 인자를 가진 인자 생성자를 호출하기 위해서 주로 사용된다. 즉, 맴버변수보다 인자가 적은 생성자 안에서 사용한다. 예제를 보면서 이해해보자 ▲ 위에서의 this는 뒤에 ( )가 없으므로 생성자가 아닌 그냥 클래스를 가리키는 this이다. 따라서 맴버변수 x와 y에 각각 1씩을 넣고 print메소드를 호출해보면 아래와 같다. 기본생성자에서 this( );를 사용한다는 것은 결국 기본생성자를 호출하면 자기자신의 생성자인 this()를 호출하게 될 것이고 this()가 호출되면 자기자신이 가리키는 Point()가 호출되는 결국은 마치 무한루프같은 재귀호출이 되어..

Java 2022.03.14

[Java]생성자(Constructor)

생성자란? : 객체가 생성될 때(인스턴스화) 최초로 실행되는 메소드를 의미한다. 생성자의 특징 생성자 이름은 클래스명과 동일해야 한다. 반환타입을 가져선 안된다. 생성자의 접근지정자로는 주로 public속성을 가진다. 생성자의 역할 ★맴버 변수를 초기화 하는일을 한다. 생성자를 정의하지 않았을 경우 컴파일러는 default(기본)생성자를 제공한다. 인자 생성자를 하나라도 정의했다면, 그 때는 컴파일러가 default(기본)생성자를 제공하지 않는다. 생성자를 다양하게 오버로딩 함으로써 다양한 초기값을 부여할 수 있다. 생성자의 형식은 아래와 같다. 클래스명() ▲클래스명과 그 뒤에 소괄호를 열고 닫아주면 생성자가 된다. 1) 기본생성자 미 사용 ▲ Saram이라는 클래스를 만들고 해당 클래스 안에 초기화용..

Java 2022.03.11

[Java]Over loading(중복 정의)

Overloading이란? : 하나의 클래스 안에서 같은 이름의 메소드를 여러개 정의하는 것을 말한다. 오버로딩을 위한 조건 : 매개변수 갯수가 다르거나 갯수가 같다면 매개변수 타입이 다르거나 타입과 갯수가 같다면 매개변수 순서가 달라야한다. 위 조건에 부합하면 메소드의 이름이 같아도 다른 메소드로 본다. 단, 반환타입과는 전혀 관계가 없다. 원래는 하나의 클래스안에서 메소드를 중복정의해서 사용할 수 없지만 오버로딩을 통해서 가능한 것이다. 예제를 보면서 알아보자 ▲ 위 두 메소드는 메소드명이 같다. 또한 매개변수의 갯수와 타입 그리고 순서가 모두 같기 때문에 오버로딩이아닌 그저 같은 메소드인 것이다. 각각 반환타입이 int형과 String형이고 return하는 값도 다르지만 이러한 조건은 오버로딩과는 ..

Java 2022.03.11

[Java]this

this의 규칙과 사용이유 예제를 통해 무슨말인지 알아보도록 하자. 우선 인스턴스형 맴버와 정적맴버들을 만들자. 이제 인스턴스형 메소드안과 정적메소드안에서 this를 각각 사용해보도록 하자 우선 인스턴스형 메소드안부터 해보자 ▲ 맨 위 this의 규칙에서도 말했지만 this는 자기가 속해있는 클래스를 가리킨다. 즉, this는 곧 클래스라고 생각하면된다. 따라서 우리가 A라는 클래스에서 B라는 클래스를 선언과 동시에 인스턴스화를 하고 나면 B. 으로 B클래스에 소속되어 있는 맴버들을 사용할 수있듯이 this. 하면 해당 this가 소속되어있는 클래스의 모든 맴버들을 사용할 수 있는 것이다. 또한 this의 규칙에서 this는 인스턴스형 맴버에 접근할 때 사용하는 키워드라고 했지만 정적맴버에 접근할 때 사..

Java 2022.03.11