본문 바로가기

언어/JAVA34

[중첩 인터페이스] 익명 객체(익명 자식 객체, 익명 구현 객체) 9.6 중첩 인터페이스 중첩 인터페이스는 클래스의 멤버로 선언된 인터페이스를 말한다. 인터페이스를 클래스 내부에 선언하는 이유는 해당 클래스와 긴밀한 관계를 맺는 구현 객체를 만들기 위해서이다. 인터페이스도 접근 제한자와 static과 관련하여 중첩 클래스와 동일하다. 중첩 인터페이스는 안드로이드와 같은 UI 프로그램에서 이벤트를 처리할 목적으로 많이 활용된다. 예를 들어 버튼을 클릭했을 때 이벤트를 처리할 객체는 중첩 인터페이스를 구현해서 만든다. package ch09.sec06.exam03; public class Button { // 정적 중첩 인터페이스 public static interface ClickListener { // 추상 메소드 void onClick(); } // 필드 privat.. 2023. 2. 5.
[중첩 클래스] 9.1 중첩 클래스 중첩 클래스란 클래스 내부에 선언한 클래스를 말한다. 객체 지향 프로그램에서는 클래스 간에 서로 긴밀한 관계를 맺고 상호작용한다. 클래스가 여러 클래스와 관계를 맺는 경우에는 독립적으로 선언하는 것이 좋으나, 특정 클래스만 관계를 맺을 경우에는 중첩 클래스로 선언하는 것이 유지보수에 도움이 되는 경우가 많다. 장점 1. 클래스의 멤버를 쉽게 사용할 수 있다. 2. 외부에는 중첩 관계 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다. 3. 유지보수에 유용할 경우가 있다. 중첩 클래스는 선언하는 위치에 따라 두 가지로 분류된다. 클래스 멤버로서 선언되는 중첩 클래스를 멤버 클래스라고 하고, 메소드 내부에서 선언되는 중첩 클래스를 로컬 클래스라고 한다. 중첩 클래스도 하나의 클래스이기 때.. 2023. 2. 5.
[chapter5] 확인 문제 1. 참조 타입에 대한 설명으로 틀린 것은 무엇입니까? 4번 참조 타입은 null 값으로 초기화할 수 있다. 2. 자바에서 메모리 사용에 대한 설명으로 틀린 것은 무엇입니까? 3번 참조되지 않은 객체는 프로그램에서 직접 소멸 코드를 작성하는 것이 좋다. -> 직접 작성 안함(garbage collector) 3. String 타입에 대한 설명으로 틀린 것은 무엇입니까? 2번 문자열 비교는 equals()이고 ==는 객체의 번지를 비교하는 것이다. 4. 배열을 생성하는 방법으로 틀린 것은 무엇입니까? 2번 변수를 생성하는 시점과 배열 값을 생성하는 시점이 다르면 안됨. 올바른 선언은 예를 들어 int[ ] array = new int[ ] {1,2,3}이다. 5.배열의 기본 초기값에 대한 설명으로 틀린 것.. 2023. 1. 30.
[인터페이스] 8.1 인터페이스 역할 인터페이스의 사전적 의미 : 두 장치를 연결하는 접속기 인터페이스 사용 이유 : 만약 인터페이스가 없이 객체 A가 객체 B를 직접 사용한다면 객체 A의 소스 코드를 객체 B에서 C로 변경하는 작업이 추가로 필요할 것이다. 객체 A가 인터페이스의 메소드를 호출하면 실제로 실행되는 것은 인터페이스 뒤편의 객체 B 또는 객체 C의 메소드이다. 만약 객체 B의 메소드 실행 결과와 객체 C의 메소드 실행 결과가 다르다면, 객체 A는 객체 교체로 인해 다른 결과를 얻게 된다. 이 특징으로 인해 인터페이스는 다형성 구현에 주된 기술로 이용된다. 상속을 이용해서 다형성을 구현할 수도 있지만, 인터페이스를 이용해서 다형성을 구현하는 경우가 더 많다. 8.2 인터페이스와 구현 클래스 선언 인터페이스.. 2023. 1. 30.
[상속] 7.1 상속 개념 부모 클래스의 필드와 메소드를 자식 클래스에게 물려주는 행위를 말한다. 장점 1. 코드를 재사용하여 중복 코드를 줄여 개발 시간을 단축시킨다. 2. 클래스의 수정 최소화 public class A { int field1; void method1() {} } public class B extends A { String field2; void method2() {} } 7.2 클래스 상속 다른 언어와는 달리 자바는 다중 상속을 허용하지 않는다. 즉, 여러 개의 부모 클래스를 상속할 수 없다. 단 하나의 부모 클래스만이 와야 한다. 7.3 부모 생성자 호출 자식 객체를 생성하면 부모 객체가 먼저 생성된 다음에 자식 객체가 생성된다. 다음 코드는 SmartPhone 객체만 생성되는 것처럼 보이.. 2023. 1. 28.
[클래스] 인스턴스 멤버, 정적 멤버, final, package, Getter Setter, 싱글톤 패턴 6.9 인스턴스 멤버 필드와 메소드는 선언 방법에 따라 인스턴스 멤버와 정적 멤버로 분류할 수 있다. 구분 설명 인스턴스 멤버 객체에 소속된 멤버 (객체를 생성해야만 사용할 수 있는 멤버) 정적 멤버 클래스에 고정된 멤버 (객체 없이도 사용할 수 있는 멤버) 인스턴스 멤버 선언 및 사용 public class Car { //인스턴스 필드 선언 int gas; //인스턴스 메소드 선언 void seetSpeed(int speed) { } } gas 필드와 setSpeed() 메소드는 인스턴스 멤버이기 때문에 외부 클래스에서 사용하기 위해서는 Car 객체를 먼저 생성하고 참조 변수로 접근해서 사용해야 한다. gas필드는 객체마다 따로 존재하며, setSpeed() 메소드는 각 객체마다 존재하지 않고 메소드 .. 2023. 1. 27.
[클래스] 6.3 클래스 선언 클래스 이름을 정했다면 "클래스이름.java"로 소스 파일을 생성해야 한다. 소스 파일 이름도 대소문자를 구분하므로 반드시 클래스 이름과 대소문자가 같도록 해야 한다. 소스 파일을 생성했다면 소스 파일을 열고 다음과 같이 클래스를 선언해준다. public class 클래스이름{ } 일반적으로 소스 파일당 하나의 클래스를 선언한다. 하지만, 두 개 이상의 클래스 선언도 가능한다. public class Car{ } class Tire{ } 두 개 이상의 클래스가 선언된 소스 파일을 컴파일하면 바이트 코드 파일은 클래스를 선언한 개수만큼 생긴다. 소스 파일은 클래스 선언을 담고 있는 저장 단위일 뿐, 클래스 자체가 아니다. 상기 코드를 컴파일하면 Car.class와 Tire.class가 .. 2023. 1. 26.
[객체 지향 프로그래밍] 6.1 객체 지향 프로그래밍 OOP (Object Oriented Programming) 만들고자 하는 완성품인객체를 모델링하고, 집합 관계에 있는 부품 객체와 사용 관계에 있는 객체를 하나씩 설계한 후 조립하는 방식으로 프로그램을 개발하는 기법이다. 객체란? 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것 객체 = 속성(필드) + 동작(메소드) 예로 자동차는 색상, 모델명 등의 속성과 달린다, 멈춘다 등의 동작이 있다. 객체 모델링이란? 현실 세계의 객체를 SW 객체로 설계하는 것을 객체 모델링이라고 한다. 객체 모델링은 현실 세계의 속성과 동작을 추려내어 소프트웨어 객체의 필드와 메소드로 정의하는 과정이라고 볼 수 있다. 객체의 상호작용.. 2023. 1. 25.
[참조 타입] 배열(Array) 5.6 배열 타입 변수는 하나의 값만 저장할 수 있다. 따라서 저장해야 할 값의 수가 많아지면 그 만큼 많은 변수가 필요하다. 이를 해결하기 위해 배열을 사용한다. 배열이란? 연속된 공간에 값을 나열시키고, 각 값에 인덱스를 부여해 놓은 자료구조이다. 특징 배열은 같은 타입의 값만 관리한다. 배열의 길이는 늘리거나 줄일 수 없다. 배열 변수 선언은 관례적으로 첫 번째 방법을 주로 사용한다. 타입[] 변수; 타입 변수[]; 배열 변수는 참조 변수이다. 배열도 객체이므로 힙 영역에 생성되고 배열 변수는 힙 영역의 배열 주소를 저장한다. 참조할 배열이 없다면 배열 변수도 null로 초기화할 수 있다. 값 목록으로 배열 생성 타입[] 변수 = {값0, 값1}; 중괄호 {}는 나열된 값들을 항목으로 가지는 배열을.. 2023. 1. 24.
[변수 & 참조 타입] String String은 기본 타입이 아닌 클래스 타입이고 참조 변수이다. 문자열을 String 변수에 대입하면 문자열이 변수에 직접 저장되는 것이 아니라, String 객체가 생성되고, String 변수는 String 객체의 번지를 참조하게 된다. 문자열을 저장하기 위해 String변수를 사용한다. char 타입의 변수에 어떤 문자를 대입하지 않고 단순히 초기화를 할 목적이면 공백을 포함시킨다. char c = ' '; //공백을 하나 포함해야 컴파일에러가 발생하지 않는다. 5.5 문자열 타입 자바는 문자열 리터럴이 동일하다면 String 객체를 공유하도록 설계되어 있다. String 변수에 문자열 리터럴을 대입하는 것이 일반적이지만, new 연산자로 직접 String 객체를 생성하고 대입할 수도 있다. new .. 2023. 1. 23.
[참조 타입] 데이터 타입 분류 5.1 데이터 타입 분류 자바의 데이터 타입은 크게 기본 타입과 참조 타입으로 분류된다. 참조 타입이란 객체의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스 타입이 있다. 기본 타입과 참조 타입의 변수의 차이점 기본 타입으로 선언된 변수 : 값 자체를 스택 메모리 영역에 저장 참조 타입으로 선언된 변수 : 번지를 스택 메모리 영역에 저장하고 힙 메모리 영역에 있는 값을 참조한다. * 객체란? 데이터와 메소드로 구성된 덩어리 5.2 메모리 사용 영역 java 명령어로 JVM이 구동되면 JVM은 운영체제에서 할당받은 메모리 영역을 다음과 같이 구분해서 사용한다. 메소드 영역 바이트코드 파일이 저장되는 영역 힙 영역 객체가 생성되는 영역. 객체의 번지는 메소드 영역과 스택 영역의 상수와 변수에서 .. 2023. 1. 21.
[변수] 타입 변환 2.3.1 자동 타입 변환 작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장될 때 발생한다. 큰 크기 타입과 작은 크기 타입의 구분은 사용하는 메모리 크기이다. 크기별로 타입을 정리하면 다음과 같다. byte(1) < short(2) < int(4) < long(8) < float(4) < double(8) float가 long보다 더 큰 타입으로 표시된 이유는 표현할 수 있는 값의 범위가 float이 더 크기 때문이다. char 타입의 경우 int 타입으로 자동 변환되면 유니코드 값이 int 타입에 저장된다. char charValue = 'A'; int intValue = charValue; //65가 저장 자동 타입 변환에서 단 하나의 예외가 있는데, char는 2byte의 크기를 가지지만,.. 2023. 1. 17.