return, 익명객체, 익명 객체, 이클립스, Object, 오브젝트

2019. 3. 13. 19:37JAVA

-----------------------return---------------------------------


return을 만나면 지금 실행되는 메소드를 종료하는것과

값을 반환하는 기능을한다.

즉 빠른 종료이다.




        ---------예시-------------------------------

public void login(int memberNo, int password){

// members배열에서 for문을 사용해서 Member를 하나씩 가져온다.

// memberNo와 Member객체의 번호가 일치하는 사용자가 있으면

// 그 사용자(Member객체)의 가입시 비밀번호와 전달받은 비밀번호를 비교한다.

// 비밀번호가 일치하면 그 사용자정보(Member객체) 를 session에 담는다.

Member foundMember = null;

for(Member member : members){

if(member != null && member.getNo() == memberNo){

foundMember = member;

break;

}

}

// 메소드의 빠른 종료

// 올바르지 않은 경우를 먼저 검사해서 그 경우에 해당되면 메소드의 실행이 즉시 중단되개 하는것

// 고객정보가 존재하지 않으면 즉시 실행 중단

if (foundMember == null) {

System.out.println("고객번호와 일치하는 고객이 존재하지않습니다. \n");

return;

}

// 비밀번호가 일치하지 않으면 즉시 실행 중단

if (foundMember.getPassword() != password) {

System.out.println("비밀번호가 일치하지 않습니다.\n");

return;

}


// 올바르지 않을 경우를 전부 통과한 경우

// 로그인처리 작업을 수행한다.

session = foundMember;

System.out.println("로그인이 완료되었습니다.");

System.out.println("["+foundMember.getName()+"]님 환영합니다.\n");











-------------------------익명 객체-----------------------------


익명객체


- 객체 생성할 수 없는 인터페이스/추상클래스를 가지고 객체 생성시점에 

 추상화된 메소드를 즉석에서 구현해서 객체를 생성한것


- 별도의 구형클래스 정의없이 객체 생성이 가능하다.






예시 1)---------------------------------------

public interface Pen{

void draw();

}


예시 2)---------------------------------------

public class PenApp{

public static void main(String[] args){


Pen redPen = new Pen() {

public void draw() {

System.out.println("빨갛게 그리기");

}

};

redPen.draw();


Pen bluePen = new Pen(){

public void draw() {

System.out.println("파랗게 그리기");

}

};

bluePen.draw();

}

}


실행결과)-----------------------------------------

---------- 실행 ----------

빨갛게 그리기

파랗게 그리기

출력 완료 (0초 경과) - 정상 종료






====================================================

예시 1-1)---------------------------------------------------

public class PhotoShop{

// Pen 인터페이스를 구현한객체를 전갈받아서 선을 그리는 메소드

public void drawLine(Pen pen){

pen.draw();

System.out.println("선을 그립니다.");

}

}


예시 1-2)---------------------------------------------------

public class PhotoShopApp {

public static void main(String[] args){

PhotoShop ppoShop = new PhotoShop();


Pen redPen = new Pen(){

public void draw(){

System.out.println("빨갛게....");

}

};

ppoShop.drawLine(redPen);


ppoShop.drawLine(new Pen(){

public void draw(){

System.out.println("파랗게");

}

});

// 람다식 자바8에 추가된 기능

ppoShop.drawLine(() -> System.out.println("노랗게"));

}

}




실행결과)----------------------------------------

---------- 실행 ----------

빨갛게....

선을 그립니다.

파랗게

선을 그립니다.

노랗게

선을 그립니다.


출력 완료 (0초 경과) - 정상 종료





///인터페이스 앞에는 public abstract 가 기본적으로 붙어있는것이다.





==========================================================

예시1)---------------------------------------------------------

public interface Mouse{

void click();

void dbClick();

void wheel();

}




예시2)----------------------------------------------------------

public abstract class  MouseAdapter  implements  Mouse{ // abstract 를 쓴건 안써도 되지만 아무 내용이 없는것이라 누군가 객체생성해서 만들까봐 만든것임.

public void click(){

}

public void dbClick(){

}

public void wheel(){

}

}




예시3)-----------------------------------------------------------

public class MouseApp {

public static void main(String[] args){

Mouse m1 = new Mouse(){

public void click(){

System.out.println("공격포인트를 클릭한다");

}

public void dbClick(){

}

public void wheel(){

}

};

// 어댑트 패턴이라고한다.

Mouse m2 = new MouseAdapter(){

public void click(){

System.out.println("공격포인트를 클릭한다");

}

};

}

}





---------------------------------------이클립스-------------------------


/** - 주석


javadocs - API문서 만드는 파일

api 오른쪽 단추 -> Export -> javadoc ->next -> javadoc command에 C:\Program Files\Java\jdk1.8.0_201\bin\javadoc.exe -> next -> VM option에 -locale ko_KR -encoding UTF-8 -charset UTF-8 -docencoding UTF-8 -> next -> yes all

-> 그럼 자바파일에서 doc폴더생기고 index보면 생김



Alt + Shift + r = 클래스명 변경

Alt + Shift + s -> r = getter setter단축키

Alt + Shift + s -> o = 생성자에 모두 입력받을수있는것

Alt + Shift + s -> s = toString 재정의

Alt + Shift + j = 큰주석

Alt + / = 작은주석




------------------------------------Object--------------------------------


Object란

자바의 최상위 부모 클래스이다.


즉 대부분의 객체는 Object를 상속받는다.


void copy(Object o){


}


라 지정하면 이 메소드안에는 모든 객체를 넣을 수 있다.



테스트 참조 Contact c = new Contact();----------------------------


hashcode() = 객체마다 부여되는 일련번호로 정수값을 받아온다.

예 ) int has = c.hashCode();

     System.out.println(hash);

--출력 --

366712642




toString() = 객체의 정보를 문자열로 제공하는 메소드

설계도의 이름 +"@"+해시코드값(16진수)

예 ) String info = c.toString();

     System.out.println("객체의 정보 : "+info);

--출력 --

객체의 정보 : demo2.Contact@15db9742

      (패키지명).(클래스이름)@(해시코드)

System.out.println(c);

System.out.println(c.toString());

------위의 두갑이 똑같이 나온다. c에는 원래 번지값이있으나 toString을 알아서 실행한다.

---출력---

demo2.Contact@15db9742

demo2.Contact@15db9742




equals() = 전달받은 다른 객체와 이 객체가 동일한 객체인지 여부를 반환한다.

예 ) Contact c = new Contact(10, "김유신", "010-1232-1232", "kimus@naver.com");

Contact cc = new Contact(20, "김공고", "010-2223-2223", "kkk@navet.dvo");


boolean res1 = c.equals(cc);

System.out.println(res1);


-----출력------

false


예)----------------------------

Conract c = new Contact();

cc = c;

System.out.println(c.equals(cc));


-----출력-------

true


이럴경우 물리적인 같은클라스만 같다고 나와서 논리적인 값이 같은때 true라하게 재정의를하는데

equals는 hashcode를 받고 비교해서 hashcode와 equals둘다 재정의해야한다.


@Override

public int hashCode() {

return no;

}

@Override

public boolean equals(Object obj) {

if(no == ((Contact)obj).no) {

return true;

}else {

return false;

}

}


이렇게 하기도 하는데 

Alt + Shift + r -> h 에서 둘다 재정의 가능하다.