Coding 공부/Java

[Java_Summary] 외부클래스의 내부 클래스, 클래스 메서드의 내부 클래스, 익명 내부 클래스로 인터페이스 인스턴스 생성, try-catch, 문자열 비교, 객체 레퍼런스, 객체 인스턴스, JDK 표준 자바 패키..

CBJH 2024. 2. 21.
728x90
반응형

1.  외부 클래스의 내부 클래스, 클래스 메서드의 내부 클래스 예제

  • main메서드의 40~51줄을 보면 내부 클래스 선언을 실습한다.
  • 내부 클래스가 static이냐 아니냐에 따라 객체 생성방법이 다르므로 혼동하지 않도록 조심하자. 

 

 

2. 필요한 모듈만 설정하는 방법

  • 최상위 디렉토리의 src 디렉토리에 module-info.java에 들어가서 9번째 줄을 입력한다. (requres java.desktop;)
  • 모든 모듈을 불러오면 프로그램이 무거워지기 때문에, swing이나 javax 등만 사용하기 위해 설정.

 

3. 익명 내부 클래스로 인터페이스 객체 생성하는 예제(GUI 실무영역 예제)

  • 맛보기로 예제를 만들어본거라 각 코드를 이해할 필요는 없다. (나중에 계속 사용할 코드들)

 

3. try-catch문

  • args[]를 사용하기 위해선 해당 java파일을 마우스 우클릭 -> Run as -> run configuration를 눌러 Argument탭에 값을 저장해 사용한다.
  • try-catch문은 Exception 처리를 할 때 사용한다. 예외가 발생해도 서버가 죽으면 안되므로 예외 처리 후 계속 프로그램을 수행한다.

 

3.1 throw, throws

  • throws는 자신을 호출하는 메소드에 예외처리의 책임을 떠넘기는 용도로 쓰인다.
  • try-catch문에서 사용하는 메서드에서 예외처리를 명시하는 용도로도 쓰인다.
  • 자세한건 밑에 블로그에서~

https://velog.io/@mooh2jj/%EC%9E%90%EB%B0%94-%EC%98%88%EC%99%B8%EC%B2%98%EB%A6%ACtry-catch-throw-throws

 

[Java] Exception 예외처리(try-catch, throw, throws)

일단 예외처리를 알기전에 오류와 예외에 대한 개념을 알아야 한다.오류(Error)는 시스템 비정상적인 상황이 생겼을 때 발생한다. 이는 시스템 레벨에서 발생하기 때문에 심각한 수준의 오류이다

velog.io

 

4. 문자열 상수

  • Java에서 문자열 리터럴은 내부적으로 문자열 풀(String Pool)에 저장됩니다. 따라서 같은 문자열 리터럴을 가진 문자열 변수들은 동일한 문자열 객체를 참조하게 됩니다. 이것은 JVM의 문자열 상수 최적화(String Constant Pool Optimization)의 일환입니다.
  • 따라서 str1과 str2는 모두 "testString"이라는 문자열을 가리키고 있으며, 이는 같은 문자열 리터럴을 가리키므로 str1 == str2는 true를 반환합니다.

 

  • 15줄이 false를 출력하는 이유
  • String 객체를 new String("testString") 방식으로 생성하면, 문자열 리터럴이 아닌 새로운 String 객체가 힙 메모리(Heap Memory)에 할당됩니다. 이 방식은 문자열 리터럴이 문자열 풀(String Pool)에 저장되는 것과는 다르게, 매번 객체 생성 시마다 새로운 메모리 공간에 객체를 할당합니다. 따라서, 비록 두 String 객체가 내용적으로는 동일한 값을 가지고 있더라도, 물리적으로는 서로 다른 메모리 주소를 가리키게 됩니다.
  • str3와 str4가 각각 new String("testString")를 사용하여 생성되었기 때문에, 두 객체는 내용은 같지만 서로 다른 메모리 주소에 위치한 별개의 객체입니다. 따라서 str3 == str4는 두 레퍼런스가 같은 객체를 가리키는지 확인하는 것으로, 여기서는 false를 반환합니다. 왜냐하면 두 객체는 같은 내용을 가지고 있지만, 실제로는 메모리 상에서 서로 다른 위치에 있기 때문입니다.

 

5. 객체 레퍼런스, 객체 인스턴스

  • 객체 인스턴스 (Object Instance): 객체 인스턴스란 클래스로부터 생성된 실제 객체를 의미합니다. 클래스는 일종의 설계도이고, 객체 인스턴스는 이 설계도를 바탕으로 생성된 실제 사물입니다. 예를 들어, "사과" 클래스가 있다면 "사과 클래스의 인스턴스"는 실제로 존재하는 사과입니다.
  • 객체 레퍼런스 (Object Reference): 객체 레퍼런스는 생성된 객체 인스턴스를 가리키는 변수입니다. 객체가 메모리에 할당되고 생성되면 해당 객체를 가리키는 레퍼런스가 필요합니다. 이 레퍼런스를 통해 객체에 접근하고 객체의 메서드를 호출하거나 속성에 접근할 수 있습니다.

 

6. JDK 표준 자바 패키지 계층 구조

 

7. Integer와 기본자료형 int 예제

  • 기본 자료형도 자바에선 클래스이다. 구버전에선 클래스 선언을 하여 사용했지만 int, double, char같은 간단한 키워드로 사용할 수 있다.

7.1  Object 클래스의 equals(), toString() 오버라이딩 예쩨

  • 해당 결과는 21~22줄 오버라이딩 전에 컴파일한 결과이다.
  • 21줄에 println()을 오버라이딩 해야될 거 같지만, toString()을 오버라이딩하면 print로 출력되는 부분을 우리가 원하는대로 바꿔줄 수 있다.

 

 

8. 업캐스팅과 다운캐스팅

업캐스팅 (Upcasting)

업캐스팅은 서브 클래스의 인스턴스를 슈퍼 클래스 타입으로 변환하는 과정입니다. 이 변환은 자동으로 발생하며, 명시적으로 캐스팅 연산자를 사용하지 않아도 됩니다. 업캐스팅을 통해 서브 클래스 객체는 슈퍼 클래스의 타입으로 취급될 수 있습니다.

  • 장점: 업캐스팅을 통해 다형성을 구현할 수 있습니다. 즉, 서브 클래스의 다양한 객체들을 슈퍼 클래스 타입의 참조 변수로 관리할 수 있습니다.
  • 단점: 업캐스팅된 객체는 슈퍼 클래스의 멤버만 접근할 수 있습니다. 서브 클래스에만 있는 멤버에는 접근할 수 없게 됩니다.

다운캐스팅 (Downcasting)

다운캐스팅은 업캐스팅된 객체를 다시 원래의 서브 클래스 타입으로 변환하는 과정입니다. 다운캐스팅은 명시적으로 캐스팅 연산자를 사용해야 합니다. 이 과정은 컴파일러에 의해 타입 체크가 이루어지지 않으므로, 개발자가 타입을 정확히 알고 있어야 합니다. 잘못된 다운캐스팅은 ClassCastException을 발생시킬 수 있습니다.

  • 장점: 다운캐스팅을 통해 서브 클래스 타입의 참조 변수로 변환된 객체에 다시 접근하여, 서브 클래스에서 정의된 멤버들을 사용할 수 있습니다.
  • 주의: 다운캐스팅은 실행 시 타입 안정성이 보장되지 않으므로, instanceof 연산자를 사용하여 객체의 타입을 확인한 후 수행하는 것이 안전합니다.

 

9. StringTokenizer 예제 

  • 인자 개수에 따라 String을 구분자를 기준으로 나누어 여러개의 문자열로 만들 수 있다.

10. Stringbuffer 예제

  • 자바에선 String타입으로 바로 append()할 수 없고, StringBuffer를 사용해서 append할 수 있다.
  • 연결의 의미와 확장의 의미를 이해하자.
  • 연결 = 주소가 같다, 값을 수정하면 둘 다 바뀐다.
  • 확장 = 복사해서 값을 더한다. 주소가 다르다. 값을 수정하면 각각 바뀐다.

6장 예제, 실습문제, open challenge 풀어보기

다음시간부터 7장 제네릭과 컬렉션 진도 나갈 예정

댓글