일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- w3schools
- ERD
- til
- WebProgramming
- CS50
- 알고리즘
- 기초프로그래밍
- 삼성청년SW아카데미
- 객체지향
- SSAFY 9기
- 이진법
- Java Programming
- SW
- 관계형 데이터베이스
- 면접을 위한 CS 전공지식 노트
- ssafy
- java
- 예외처리
- 모두를 위한 컴퓨터 과학(CS50)
- exception
- 데이터베이스 모델링
- 모두를 위한 컴퓨터 과학
- 상속
- CS 기초
- CS기초지식
- 부스트코스
- edwith
- Computer Science
- CS 기초지식
- Compute Science
- Today
- Total
Joslynn의 하루
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -11일차 노트 필기_equals 메소드, 제한자 final, abstract_220801 본문
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -11일차 노트 필기_equals 메소드, 제한자 final, abstract_220801
Joslynn 2022. 8. 1. 17:23ex0729 실습 solution 필기
println 메소드: 인수로 객체가 오면 객체.toString() 자동 호출 및 리턴값 출력;
이클립스 단축키 모음
Alt + shift + s : source // 생성자, get&set 메소드, 오버라이드 등 자동 작성 가능;
ctrl+'space': 자동완성
this: 단독으로 사용 가능; 포함된 현재 객체 주소를 가르킴;
super: 단독으로 사용할 수 없음; 값을 보유하고 있는 것이 아닌 부모를 지칭하는 호칭일 뿐이므로;
equals 메소드
- equals 메소드의 본기능
boolean b = ( ).equals(Object obj) // 현재 객체와 인수로 전달된 객체의 주소값 비교 (== 동일 기능)
- String 객체에서 override된 메소드
String extends Object{
equals 메소드(Object obj){
//인수로 전달된 객체와의 문자열 비교;
//boolean형 return;
}
}
class Test{
/*Override
public booean equals (Object obj){
return true;
}*/
}
Test t = new Test();
Test t2 = new Test();
String s = new String("java");
String s2 = "java";
String s3 = "java";
String s4 = "hee";
if (t.equals(t2)) // Object에 정의된 equals 기능 == 인수로 전달된 객체와의 주소값 비교; // false;
if (s.equlas(s2)) // truel; String 객체에서 오버라이딩된 equals 메소드 호출;
/*-------------------------------------------------------------------------*/
String s4 = "hi";
/* s4 변수의 값을 변경하면, 해당 참조 객체는 연결이 끊기고 가비지 콜렉션, hi라는 새로운 객체를 생성;
String은 상수이며, 값이 변경되는 것이 아님; 새로운 객체가 생성되는 것;
*/
new 연산자가 없이 만들어진 객체
: 본인과 같은 값을 가진 객체가 있는지 확인;
: 같은 값을 가진다면 같은 객체를 가리키게 됨;
new 연산자를 사용해 만든 객체
: 같은 값을 가져도 무조건 새로운 객체 생성;
제한자 final
final field vs final static field(상수)
공통점: final 키워드가 변수 앞에 붙으면 고정값을 가짐 == 값 변경 불가;
차이점:
1. final field
: 생성자를 통해 다양한 값으로 초기화하여 고정값으로 사용 가능;
2. 상수 final static field
: 파이(3.14xxxx...)처럼 누가 써도 동일한 값;
package ex0801_abstract_final;
class Test{
final int i = 100; // final 필드
static final int j = 100; // 상수
/*멤버필드를 선언과 동시에 초기화할 경우 final 필드와 상수 간에 차이가 없음*/
final int x; // final 필드: 명시적 초기화 & 생성자를 이용한 초기화 모두 가능
static final int y = 3; // 상수: 명시적 초기화 가능, 생성자를 이용한 초기화 불가
Test(int a){ // 생성자
this.x = a; // final 필드 초기화 가능
// j = a; non-static은 static에 접근할 수 없음; 명시적 초기화
}
}
public class FinalVariableExam {
public static void main (String [] args) {
new Test(5);
new Test(100);
// 다양한 값으로 final field 초기화 가능;
}
}
제한자 abstract
abstract method
: 구현부가 없음; 자식 class에서 재정의하기 위해 존재;
: abstract method를 가지고 있는 class는 반드시 abstract class로 선언해야 한다.
: abstract class는 생성할 수 없으며, 상속만 가능; ↔ final (생성만 가능, 상속 불가)
: 자식 class에서는상속 받은 모든 abstract method를 제한자 abstract을 제외하고 메소드 오버라이딩이 필요;
// 그렇지 않으면, 자식 class도 abstract class가 되어야 하기 때문에 객체 생성 불가;
abstract method 효용
: 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 수 있음; 즉, 규격서와 같이 사용되어 정형화된 코딩이 가능하다.
: 실체 클래스를 작성할 때 시간을 절약;
예제1)
package ex0801_abstract_final;
//Error 를 수정하고 이유를 주석으로 처리하세요.
final class FinalClassExam{ // 상속 불가, 생성 가능
final int i = -999999; // 값 변경 불가, 반드시 사용 전에 초기화 필수
}
abstract class AbstractClassExam{ // 상속 가능, 생성 불가
abstract String abstractMethodExam(int i,String s); // 기능없고, 재정의해서 사용
final int finalMethodExam(int i, int j){ // 재정의 불가
return i+j;
}
}
class Sample01 extends AbstractClassExam{
String abstractMethodExam(int i,String s){
System.out.println("return "+s+i);
return s+i;
}
/*int finalMethodExam(int i, int j){
return i*j;
}
final method로 재정의 불가*/
}
class Sample02 {}
/*extends FinalClassExam{ } */ // final class는 상속 불가; 생성만 가능;
class Sample03 extends AbstractClassExam{
String abstractMethodExam(String s, int i){ // Overloading이 일어날 수 있도록 인수는 다르게 선언;
return s+i;
}
/*abstract*/ String abstractMethodExam(int i,String s) { // abstract method를 선언한 class는 반드시 abstract class로 선언;
return s;
}
void sampleMethod03(){
System.out.println("void sampleMethod03() 호출 됨");
}
}
/*----------------------------------------------------------------------------------------------------------------------*/
class AbstractFinalClassTest{
public static void main(String args[]){
AbstractClassExam ace /*= new AbstractClassExam()*/; // abstract class는 객체 생성 불가;
FinalClassExam fce = new FinalClassExam();
//fce.i = 100000; // final field는 상수이므로 값 변경 불가;
Sample01 s01 = new Sample01();
AbstractClassExam aceS01 = new Sample01();
aceS01.abstractMethodExam(700,"_999");
}
}