
String 선언하는 2가지 방법1. heap 메모리에 인스턴스로 생성되는 경우2. 리터럴 영역으로 상수 풀(constant pool)에 있는 주소를 참조하는 방법 heap 메모리는 생성될 때마다 다른 주소 값을 가지지만, 상수 풀의 문자열은 모두 같은 주소 값을 가진다. String 을 연결하면 기존의 String에 연결되는 것이 아닌 새로운 문자열이 생성된다.=> 리터럴 방식으로 한 번 생성된 String 은 불변이므로 계속 새로 생겨진다. 예시) 예시2) StringBuffer 클래스 String 클래스의 잦은 변화가 있을 때 메모리 낭비가 발생할 수 있다.이를 대체하는 방법으로는 StringBuilder, StringBuffer 활용할 수 있다. 내부적으로 가변적인 char[]를 멤버 변수..

프로그램에서의 오류컴파일 오류(compile error)프로그램 코드 작성 중 발생하는 문법적 오류최근에는 개발 환경(eclipse)에서 대부분 컴파일 오류는 detection 됨. 실행 오류(runtime error)실행 중인 프로그램이 의도하지 않은 동작(bug)을 하거나 프로그램이 중지 되는 오류실행 오류 또는 비정상 종료가 되는 경우 시스템의 심각한 장애를 일으킴.실행 오류는 개발자가 해결 가능하다. 시스템 오류(error): 컴퓨터 하드웨어의 고장으로 인해 가상 머신에서 응용프로그램 실행 오류가 발생하는 것. 너무 심각해서 프로그래머가 처리할 수 있는 방법이 없는 오류다. 동적 메모리가 없는 경우, 스택 메모리 오버플로우 등예외(Exception): 잘못된 사용 또는 코딩으로 인한 오류, 프로그..

Thread 하나의 프로세스는 하나 이상의 Thread를 가지게 되고, 프로세스 내에서 실제 작업을 수행하는 단위는 Thread 이다.(process: 저장되어 있는 프로그램이 실행되면 OS로부터 메모리를 할당 받아 프로세스 상태가 된다.)모든 자바 프로그램은 메인 스레드에서 시작되면, 사용자는 추가적인 스레드를 생성할 수 있다.각 스레드는 독립적으로 실행되면, 자신만의 호출 스택을 가진다.(각 스택 영역은 서로 독립적이다.)프로세스의 모든 스레드는 같은 Heap 메모리 공간과 다른 자원을 공유할 수 있다. 쓰레드를 추가로 만들어서 사용하는 방법 1. Thread 클래스를 상속하여 만들 수 있다.예시 1) 예시2) 2. Runnable 인터페이스를 구현하여 만들 수 있다. 멀티 스레딩..

Event Listener implements ActionListener 사용ActionListener => 운영 체제가 제어하는 이벤트를 등록할 수 있다.운영 체제가 이 버튼을 눌렀을 때 자신에게 알려달라는 의미즉, addEventListener() 는 button1이 눌러지는지 확인하는 이벤트이며 이 메서드의 책임은 이벤트 리스너만 등록하는 것임. button1.addActionListener(this) 로 이벤트를 등록함. 오버라이드 : 이벤트가 일어나면 호출되어지는 메서드약속되어 있던 추상 메서드를 오버라이드 했다.이벤트가 발생되면 이 메서드를 수행하라고 약속되어 있다.단, 어떤 컴포넌트가 이벤트가 할당되었는지 등록을 먼저 해야 한다. Key Listener키보드를 눌렀을 때 호출textA..

디자인 패턴 : 싱글톤 패턴 / 템플릿 메서드 패턴 싱글톤 패턴객체가 단 하나일 때 존재하는 것 1. 생성자를 private으로 만든다.2. static 변수를 활용해서 내부에서 객체를 생성하고 주소값을 할당3. 외부에서 유일하게 참조할 수 있는 public 메서드를 제공한다. 템플릿 메서드 패턴추상 메서드나 구현된 메서드를 활용하여 코드의 흐름(시나리오)를 정의하는 패턴을 말한다. Car aicar = new AICar(); 에 대해 알아보자1. class Car 의 startCar가 먼저 출력됨.2. class Car 의 drive(), stop()은 abstract (추상 클래스) 임.=> Car 상속을 받은 AICar에서 drive(), stop() 메서드를 재정의하여, Car 의..

인터페이스두 객체를 연결하는 역할 객체 A는 인터페이스의 메서드만 사용하므로 객체 B가 객체 C로 변경된 것에 관심이 없다.만약 인터페이스 없이 객체 A가 객체 B를 직접 사용한다면, 객체 A의 소스 코드를 객체 B에서 객체 C로 변경하는 작업이 추가로 필요하다.객체 A 가 인터페이스의 메서드를 호출하면 실제로 실행되는 것은 인터페이스 뒤편의 객체 B 또는 객체 C 의 메서드다.만약 객체 B의 메서드 실행 결과와 객체 C의 메서드 실행 결과가 다르다면, 객체 A는 객체 교체로 인해 다른 결과를 얻게 된다.모든 메서드가 추상 메서드로 선언됨 모든 변수는 상수로 선언됨 그 외 멤버 선언 종류public final 필드public abstract() 메서드public default() 메서드public sta..

추상 클래스완전하게 구현되어 있지 않은 하나 이상의 추상 메서드를 가지고 있거나 abstract 키워드를 가지고 있는 클래스이다.메소드가 미완성이라 추상 클래스는 직접적으로 new 키워드로 객체를 생성할 수 없다.상속 계층에서 추상적인 개념을 나타내기 위한 용도로 사용된다.추상 클래스를 상속받는 자식 클래스에서는 반드시 추상 메서드를 재정의해야 한다. 그렇지 않으면 오류가 발생한다. 추상 클래스를 상속한 경우 해결방법 2가지1. 자식 클래스를 추상 클래스로 만들어 버린다.2. 추상 메서드를 오버라이드 해서 구현 메서드로 재정의한다. 추상 메서드란? int add(int x, int y); // 선언 int add(int x, int y){ } // 구현부가 있음, 추상 메서드 아님 예시) en..

다형성 하나의 데이터 타입이 다양한 형태로 바라볼 수 있는 것(하나의 코드가 여러 자료형으로 구현되어 실행되는 것)한 요소(메서드, 클래스 등)가 여러 형태를 가질 수 있는 능력상속, 추상화, 인터페이스와 함께 사용됨.같은 코드에서 여러 다른 실행 결과가 나옴정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나임다형성을 잘 활용하면 유연하고 확장성 있고, 재사용성을 높여주며 유지보수가 편리한 프로그램을 만들 수 있음 다형성 활용 시 사용되는 개념: 업캐스팅(자동 타입 변환)과 다운캐스팅(강제 타입 변환)업캐스팅부모 클래스의 참조 변수로 자식 클래스의 객체를 참조하는 것부모 클래스의 데이터 타입으로 자식 클래스의 객체를 대입하는 것업캐스팅은 자동으로 이루어짐.(자동 타입 변환)부모..

상속처럼 클래스를 재사용할 수 있는 방법한 클래스가 다른 클래스를 포함하는 관계(하나의 객체가 다른 객체 없이는 의미가 없을 때 사용) 한 클래스가 다른 클래스를 자신의 필드(멤버변수)로서 포함하는 것( = 클래스의 멤버로 다른 클래스 자료형의 참조 변수를 선언하는 것)has-a 관계로 알려져 있으며 객체 간의 강한 연관성을 나타냄포함관계 특징포함된 객체는 포함하는 객체 안에서만 존재하며, 포함하는 객체가 파괴되면 포함된 객체도 함께 파괴됨.이 관계는 객체 간의 강한 의존성을 특징으로 하며, 소유하는 객체가 완전한 책임을 가짐.포함관계는 연관관계보다 더 강한 연결을 의미함. 자동차와 엔진, 컴퓨터와 CPU를 예시로 들 수 있음 예시Engine 클래스 생성public class Engine { Str..