JAVA-Basic 20

9.hashcode & equals

Object는 모든 클래스의 상위 클래스이다. Object 가 제공하는 메서드 중에는 hashcode와 equals도 있는데, 이 둘의 관계는 함께 움직여다니는 관계이다. 객체 비교를 하는데 있어 정의를 하는데 쓰인다. 즉, hashcode가 같으면 equals 메소드의 값도 ture 가 나와야한다는 것이다. String에서는 equals와 hashcode가 재정의 되어있는 것으로 기억하고 있다. 그래서 Map 의 Key값으로 String 을 자주 쓰는 것으로도 알고 있고.. 하지만 Obejct의 각각의 두 메서드는 필요에 따라 올바른 재정의가 반드시 필요하다. 이클립스의 소스 탭에 필드를 이용해서 hashcode와 equals를 재정의하는 기능을 제공하는데, 이기능을 이용하면 Field 값으로 두 메서..

JAVA-Basic 2020.07.10

8.Exception 예외와 처리

자바에서는 예외발생시 Exception 클래스가 해당 Exception 객체를 만들어서 throw 시키며 종류는 2가지로 나뉜다. Exception을 상속받고 있는 클래스의 인스턴스 checked Exception() = 일반 예외 >>> 컴파일러가 체크를 함 unchecked Exception(Runtime Exception) = 실행예외 >>> 컴파일러가 체크를 안함(개발자의 실수) Runtime Exception을 상속받고 있는 클래스의 인스턴스 public class ExceptionEx2 { public static void main(String[] args) { int i=3; try { System.out.println(i/0);//ArithmeticException }catch(Arithm..

JAVA-Basic 2020.07.10

7.람다(Lamda)를 이용한 익명 구현 객체(Anonymous implementation Object) 사용

람다식은 코드의 간결성과 속도를 높여주는데 뛰어난 성능을 보여주며, 코드의 가독성 또한 증가시킨다. 람다식의 전제조건은 정의된 추상메서드가 1개여야만 한다는 것이다. 이것을 함수적 인터페이스라고 한다. @FunctionalInterface public interface MyInterface2 { int method(int a); default void print() { System.out.println("Hello"); } } @FunctionalInterface 에노테이션이 붙어있는데, 없어도 무방하다. 이 에노테이션의 의미는 컴파일러에게 함수적인터페이스라고 전달하는 것이며 만약 함수적 인터페이스가 아닐경우( 즉 추상메서드가 1개가 아닐경우) 컴파일러는 컴파일 오류를 발생시키는 것으로 기억하고 있다. ..

JAVA-Basic 2020.07.10

7.익명클래스(AnonymousClass)

익명클래스는 람다, 인터 페이스와도 엮여있는 클래스..?이다. 따로 클래스 정의를 하지 않고 객체를 생성하여 사용하게끔한다. public abstract class Super { //추상클래스 정의 abstract public void cry(); abstract public void walk(); } 보통의 클래스 상속으로 자식클래스를 정의하는 것을 보면 extends 키워드로 상속관계를 정의한다. public class Sub extends Super{ @Override public void cry() { // TODO Auto-generated method stub } @Override public void walk() { // TODO Auto-generated method stub } } 익명클..

JAVA-Basic 2020.07.10

6.Interface와 다형성의 구현과정

Interface 는 하나의 새로운 타입을 정의하는 것으로 Controller , Service Dao 등이 인터페이스로서 정의되고 구현되고 있는 것을 보면 인터페이스의 개념을 잡는 일은 굉장히 중요하다고 생각이 든다. 자바 버전이 올라가면서 Interface 에 추상클래스 default 메서드 static 메서드 등이 추가되면서 꼭 추상클래스를 사용할 상황이 아니라면 Interface 를 고려하는 것이 우선 순위이다. 5번 글의 상속과정에서 하나의 타입으로서 Pet을 지정하고 싶다. 라고 한다면, Interface를 사용하여 Pet이라는 타입과 공통 속성(Field), 동작(Method) 을 정의하기 아주 용이한 것 같다. -기존 상속관계를 보면. public abstract class KindaCat..

JAVA-Basic 2020.07.10

4.상속(Inheritance)과 다형성의 구현과정

상속 방법. public class Super { int i; void method() { } } //상속정의는 extends 키워드로 한다 public class Sub extends Super{ void method2() { } } 다형성의 구현 부모클래스 public class KindaCat { public void sound() { System.out.println("고양이과 울다"); } } 자식클래스 public class Cat extends KindaCat{ //메서드 오버라이딩 @Override public void sound() { System.out.println("야옹"); } } public class Tiger extends KindaCat{ //메서드 오버라이딩 @Overri..

JAVA-Basic 2020.07.10

3.Overloading 과 접근제한(AccessModifier)

Overloading 의 규칙은 파라미터의 타입, 순서, 개수가 다를 때에만 허용한다. public class ClassEx3Overloading { //메서드 오버로딩 시 파라미터 개수 순서 타입이 달라야한다. //파라미터 개수 개수에 따른 오버로딩 void method() { } void method1(int i) { } //선언 불가능 //void method1(int j) { // //} //파라미터 순서에 따른 오버로딩 void method1(String s, int i){ } void method1(int i, String s) { } } AccessModifer 는 4가지로 public>default>protected>private로 접근 제한이 좁혀진다. public class ClassE..

JAVA-Basic 2020.07.10

2.Class와 멤버

인스턴스 멤버의 사용 - 클래스파일 public class ClassEx1 { //필드 즉 속성 현재는 인스턴스 필드 int i ; Integer j; char[] charArr; String str; //생성자 public ClassEx1() { } // 파라미터를 가진 생성자를 주면 기본 생성자는 자동 생성되지 않는다. ClassEx1(int i){ } // 메소드 현재는 인스턴스 메서드 void method1() { } void method2() { } } 인스턴스 멤버의 사용 - 메인메서드 public class MainEx { public static void main(String[] args) { new ClassEx1();//인스턴스 생성 후 주소 할당이 안된 상태 ClassEx1 a = n..

JAVA-Basic 2020.07.10

1. 원시타입 변수와 참조타입 변수의 할당 원리

원시타입의 할당 원리 -stack 영역 int i; 선언시 -> stack영역에 i라는 공간이 생김. i = 3; 선언시 ->stack영역의 i라는 공간에 값이 들어감 -call by value int i =3 ; int j =i; 원시 타입은 stack영역에서 i변수가 만들어지고 3을 대입하고 이후 j가 만들어지면 i의 value를 할당함. 즉 3 참조타입의 할당 원리 -Stack 영역 String s; 선언시 -> stack 영역에 s라는 공간 생성 -heap 영역 s = new String("str"); 선언시 -> 인스턴스(필드와 메서드가 있는 데이터덩어리)생성 -> heap영역에 "str" 생성 -> JVM에 의해서 주소생성 -> 주소값을 stack영역의 s변수에 대입 -call by refer..

JAVA-Basic 2020.07.10