21.05.08 기록
스프링 입문을 위한 자바 객체 지향의 원리와 이해─ 3장. 자바와 객체 지향- 클래스와 객체 개념 바로 알기
- 사람은 객체일까 클래스일까?
- 추상화란?
- 애플리케이션의 경계를 알아내는 방법?
- 논리적 설계와 물리적 설계 개념
- main() 메서드는 왜 static일까?
- 정적 메서드는 어디에서 사용할까?
- 스태틱 변수, 인스턴스 변수와 달리 지역 변수는 초기화 하지 않으면 왜 쓰레기값을 가질까?
- 상속 개념 바로 알기
- 인터페이스 개념 바로 알기
- 클래스와 객체 개념 바로 알기
-
- 10951 풀이
- 인텔리제이에서는 정상적으로 실행 되었으나, 백준에서는 런타임오류(NullPointer)가 발생했다.
- 인텔리제이에서는 정상적으로 실행 되었으나, 백준에서는 런타임오류(NullPointer)가 발생했다.
//1. 원래 내가 풀었던 풀이(import, main 생략) ─ NullPointer 발생 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; while(true) { try { st = new StringTokenizer(br.readLine(), " "); System.out.println(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())); } catch (IOException e) { e.printStackTrace(); } }- 10951_해설을 참고해보니 EOF 때문에 NullPointer가 발생한 것이었다.
🌟BufferReader는 입력 데이터가 없을 때 null을 반환한다. 이것을 이용하여 EOF를 설정한다.
//2. 해설 참고 후 다시 푼 풀이 ─ 136ms로 통과 import java.io.*; import java.util.StringTokenizer; public class B10951 { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; String s; try { while( (s = br.readLine()) != null) { st = new StringTokenizer(s, " "); System.out.println(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())); } } catch (IOException e) { e.printStackTrace(); } } }- StringTokenizer 대신 charAt()을 사용한 풀이
🌟charAt()은 아스키 코드를 반환하기 때문에 -48 또는 -‘0’ 을 해줘야 정수값이 반환된다.
import java.io.*; public class B10951 { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s; try { while((s = br.readLine()) != null) { int A = s.charAt(0) - 48; int B = s.charAt(2) - 48; System.out.println(A+B); } } catch (IOException e) { e.printStackTrace(); } } } - 10951 풀이
-
스프링 입문을 위한 자바 객체 지향의 원리와 이해check!-
- 클래스와 객체 개념 바로 알기
- 사람은 클래스이다.클래스는 분류에 대한 개념이지 실체가 아니기 때문.
- 실체는 객체이다.즉, 유일무이한 사물이다.
- 클래스와 객체 개념 바로 알기
-
- 추상화란?
- 구체적인 것을 분해해서 관찰자가 관심 있는 특성만 가지고 재조합하는 것이다. 즉, 모델링이다.
- (🙇🏻♀️ 피카소의 추상화를 생각해보자.)
- 추상화란?
-
- 애플리케이션의 경계를 알아내는 방법
- “내가 만들고자 하는 애플리케이션은 어디에서 사용될 것인가?” 에 대답해보자.
- 애플리케이션의 경계를 알아내는 방법
-
- 논리적 설계와 물리적 설계 개념
- 논리적 설계는 개발 환경(언어 등)에 영향을 받지 않는 설계이다.
- 반대로 물리적 설계는 개발 환경에 맞춰진 설계이다.
- 논리적 설계와 물리적 설계 개념
-
- main() 메서드는 왜 static일까?
- static 멤버들은 객체가 아닌 클래스에 속하기 때문에 JVM 구동 시 T메모리의 Static 영역에 바로 배치된다.
- 따라서, 객체의 존재 여부에 관계없이 바로 사용이 가능한 것이다.
- main() 메서드는 클래스 안에 있고, 속한 클래스와 상관없이 실행되기 위해서는 정적 메서드여야만 하는 것이다.
- main() 메서드는 왜 static일까?
-
- 정적 메서드는 어디에서 사용할까?
- 클래스의 인스턴스를 만들지 않고 사용하게 되는 유틸리티성 메서드로 사용할 수 있다.
- 정적 메서드는 어디에서 사용할까?
-
- 스태틱 변수, 인스턴스 변수와 달리 지역 변수는 초기화 하지 않으면 왜 쓰레기값을 가질까?
- 지역 변수는 한 지역에서만 쓰는 변수이지만, 멤버 변수와 객체 변수는 공유하는 성격을 가지고 있다.
- 이 공유 변수의 초기화를 누가할 것인지 딱히 규정할 수 없기 때문에 멤버/객체 변수는 별다른 초기화 작업 없이 자동으로 기본값이 설정된다.
- 스태틱 변수, 인스턴스 변수와 달리 지역 변수는 초기화 하지 않으면 왜 쓰레기값을 가질까?
-
- 상속 개념 바로 알기
- 객체 지향에서의 상속은 분류를 세분화하는 것이다. 다시말해, 상위 클래스의 특성을 하위 클래스에서 상속하고 거기에 더해 필요한 특성을 추가하는, 즉 확장해서 사용할 수 있다는 의미다.
- 상속 개념 바로 알기
-
- 인터페이스 개념 바로 알기
- 구현 클래스 is able to 인터페이스
- 구현 클래스는 인터페이스 할 수있다.
- ex. MyThread is able to Runnable ─ MyThread 클래스는 Runnable 할 수 있다.
- 인터페이스 개념 바로 알기
-
스프링 입문을 위한 자바 객체 지향의 원리와 이해─ 3장 최종 정리!- 추상화
- OOP에서 추상화는 모델링이다.
- 클래스 설계 시 추상화가 사용된다.
- 클래스 설계를 위해서는 애플리케이션 경계부터 정해야한다.
- 객체 지향에서 추상화의 결과는 클래스이다.
- 상속
- 상속은 부모-자식이 아닌 상위 분류-하위 분류 개념의 분류도이다!
- 상속을 is a 관계가 아닌 is a kind of 관계로 기억하자.(하위 클래스 is kind of 상위 클래스)
- 상속은 상위 클래스의 특성을 재사용하는 것
- 상속은 상위 클래스의 특성을 확장하는 것
-
- 상속은 is a kind of 관계를 만족하는 것
- 고래 is a kind of 동물
- 고래는 동물의 한 분류다.
- 상속은 is a kind of 관계를 만족하는 것
- 상속은 부모-자식이 아닌 상위 분류-하위 분류 개념의 분류도이다!
- 추상화
🤷🏻♀️ 다형성, 캡슐화
- 생활코딩_다형성 으로 다시 공부한 후 정리하기.
- 캡슐화 문제 다시 풀어서 정리하기.