생활코딩 - Java(상수와 enum)
·
Java & Spring/Java
□ enum enum은 열거형(enumerated type)이라고 부른다. 열거형은 서로 연관된 상수들의 집합이라고 할 수 있다. 위의 예제에서는 Fruit가 말하자면 열거인 셈이다. - enum의 특징 코드가 단순해진다. 인스턴스 생성과 상속을 방지한다. 키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 나타낼 수 있다. □ enum 생성자 위 코드에서 APPLE("red")에서 ( )는 생성자를 호출 그 생성자를 Fruit(String color)의 매개변수 color에 들어감 this.color = color에서 color으로 들어감 this.color은 다시 전역변수 public String color으로 들어감 출처 : 생활코딩 유튜브 : https://www.youtube.co..
생활코딩 - Java(Object 클래스)
·
Java & Spring/Java
□ Object 자바에서 모든 클래스는 사실 Object를 암시적으로 상속받고 있는 것이다. 그런 점에서 Object는 모든 클래스의 상위 클래스라고 할 수 있다. 그 이유는 모든 클래스가 공통으로 포함하고 있어야 하는 기능을 제공하기 위해서다. □ to String 객체를 문자로 표현하는 메소드 클래스 Calculator에 toString을 재정의(overiding)했다. 그리고 인스턴스를 System.out.println의 인자로 전달하니까 toString을 명시적으로 호출하지 않았음에도 동일한 효과가 나고 있다. toString을 직접 호출하지 않아도 어떤 객체를 System.out.print로 호출하면 자동으로 toString이 호출되도록 약속되어 있다. □ equals equals는 객체와 객체..
생활코딩 - Java(예외 Exception)
·
Java & Spring/Java
□ 예외란? 예외(Exception)란 프로그램을 만든 프로그래머가 상정한 정상적인 처리에서 벗어나는 경우에 이를 처리하기 위한 방법 □ try - catch ex) 0으로는 나눌 수 없기 때문에 오류가 발생하게 되는데 try - catch를 통해 오류 내용을 출력함 ※ e.메소드 e.getMessage(); → by zero 오류에 대한 기본적인 내용을 출력해준다. 상세하지 않다. e.toString() → java.lang.ArithmeticException: / by zero e.toString()은 e.getMessage()보다 더 자세한 예외 정보를 제공한다. e.printStackTrace() 메소드 getMessage, toString과는 다르게 printStackTrace는 리턴값이 없다...
생활코딩 - Java(다형성)
·
Java & Spring/Java
□ 메소드와 다형성 다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다. 같은 메소드 명 'a'지만 매개변수 타입이 int와 String차이로 아래 o.a(1);와 o.a("one");가 오류없이 작동한다. □ 클래스와 다형성 위 코드에서 obj.y();은 오류가 발생한다. 그이유는 A obj = new B(); 에서 클래스 B를 new를 통해 인스턴스화 하여 변수 obj에 담을 때 타입을 클래스 A로 정의했기 때문이다. 클래스 A에는 메소드 y가 정의되지 않았기 때문에 오류가 발생한다. 그러나 하위 클래스에서 메소드를 오버라이딩 하게되면 해당 메소드가 호출이된다. 위 예제에서 System.out.println(obj.x()); , System.out.printl..
생활코딩 - Java(abstract,final,interface)
·
Java & Spring/Java
□ abstract(추상 메소드) 추상 클래스는 상속을 강제하기 위한 것이다. 즉 상위 클래스에는 메소드의 시그니처만 정의해놓고 그 메소드의 실제 동작 방법은 이 메소드를 상속 받은 하위 클래스의 책임으로 위임하고 있다. abstract class A{ public abstract int b(); public void d(){ System.out.println("world"); } } 메소드 b의 선언 부분에는 abstract라는 키워드가 등장하고 있다. 이 키워드는 메소드 b는 메소드의 시그니처만 정의 되어 있고 이 메소드의 구체적인 구현은 하위 클래스에서 오버라이딩 해야 한다는 의미다. 이렇게 내용이 비어있는 메소드를 추상 메소드라고 부른다. 추상 메소드를 하나라도 포함하고 있는 클래스는 추상 클래스..
생활코딩 - Java(접근 제어자)
·
Java & Spring/Java
□ 접근 제어자 1. 사용자가 객체 내부적으로 사용하는 변수나 메소드에 접근함으로서 개발자가 의도하지 못한 오동작을 일으키게 되는 문제로부터 객체의 로직을 보호하기 위해서는 맴버에 따라서 외부의 접근을 허용하거나 차단해야 할 필요가 생긴다. 2. 사용자에게 객체를 조작 할 수 있는 수단만을 제공함으로서 결과적으로 객체의 사용에 집중 할 수 있도록 돕기 위함이다. 구분 같은클래스 같은패키지 다른패키지 서브클래스 관계없음 public O O O O protected O O O X default O O X X private O X X X
생활코딩 - Java(상속과 생성자, 오버라이딩과 오버로딩)
·
카테고리 없음
□ 상속 상속(Inheritance)이란 물려준다는 의미로 어떤 객체가 있을 때 그 객체의 필드(변수)와 메소드를 다른 객체가 물려 받을 수 있는 기능을 말한다. 위 코드에서 Calculator클래스의 메소드를 사용 할 수 있는 이유는 하위 클래스인 SubstrationableCalculator가 extends를 통해 Calculator을 상속받았기 때문이다. □ 상속과 생성자 - 객체를 생성할 때 자동으로 생성자를 만들어준다. - 매개변수가있는 생성자를 정의해놓은 상태이면 생성자를 자동으로 만들어주지 않는다. - 생성자를 통해서 left, right의 값을 설정해준다. □ super() : 하위 클래스에서 상위 클래스 생성자를 호출 ※ 하위 클래스의 초기화 코드는 super()보다 앞에 와서는 안된다 ..
생활코딩 - Java(초기화와 생성자)
·
카테고리 없음
ㅁ 생성자(Constructor)의 필요성 위의 예에서 메소드 setOprands의 값으로 10과 20을 지정했다. 이 값들은 객체 내부에서 인스턴스 변수 left와 right의 값으로 설정되어서 유지된다. 객체 Calculator를 사용하기 위해서 사용자는 메소드 sum을 호출하기 전에 setOprands를 호출해야 한다는 것을 기억하고 있어야 한다는 것을 의미한다. 이러한 절차를 기억해야 한다는 것은 사용자 입장에서는 불편할 뿐 아니라 잘못된 사용으로 오류가 발생할 확률을 높이는 결과를 초래 할 수 있다. 그래서 사용하는 것이 생성자(Constructor)이다. → 생성자는 클래스안에서 가장 먼저 작동하는 메소드이다. 아래와 같이 인스턴스가 생성될 때 left, right의 값을 입력하도록 강제한다면..
생활코딩 - Java(유효범위)
·
Java & Spring/Java
□ 유효범위(Scope) public static void main(String[] args) { for (int i = 0; i < 5; i++) { a(); System.out.println(i); } 위 메소드에서 i = 0부터 시작해 i < 5 인경우 i에 +1을 하며 System.out.println(i); 을 반복하는 for문이다. 그런데 메소드 a();로 인해 i = 0 이 반복되어 문제가 발생하지않는 이유는 a()라는 메소드 안에서 int i = 0;이라는 변수가 정의되어있기때문에 a()밖으로는 영향을 못미치기 때문이다. → int i = 0;의 경우 a()라는 메소드 안이 유효범위(scope)이다. ※ 두 코드의 차이점 : i = 0; 은 변수를 할당 한 것이고 int i = 0;은 변수..
생활코딩 - Java(클래스와 인스턴스 그리고 객체)
·
카테고리 없음
1. 클래스와 인스턴스 □ 클래스와 인스턴스 // 아래의 로직이 1000줄 짜리의 복잡한 로직이라고 가정. System.out.println(10 + 20); System.out.println(20 + 40); 중복 제거 → 메소드 사용 리펙토링(refactoring) public static void sum(int left, int right) { System.out.println(left + right); } public static void main(String[] args) { sum(10, 20); sum(20, 40); } □ Calculator class 2. 클래스 맴버와 인스턴스 맴버 □ 클래스 소속의 변수와 메소드 ※ 인스턴스 메소드는 클래스 맴버에 접근 할 수 있다. 클래스 메소드는 ..