728x90
목차
1. 클래스와 객체
2. 상속(Inheritance)
3. 예외처리
1. 클래스와 객체
1-1. Java에서 클래스
class Circle{...}
public class HelloWorld{
public static void main(String[] args){...}
}
* 자바는 모든 코드를 클래스 단위로 프로그래밍 한다
* main 메소드를 포함하는 클래스를 가장 먼저 실행
* 클래스에 포함되는 요소들을 멤버(member)라고 지칭
* 클래스는 틀을 제공할 뿐 데이터는 객체를 통해 확보
1-2. 클래스 구성
class Circle{
double pi = 3.141592;
double radius;
void volume(){
System.out.println(radius * radius * pi);
}
}
1. 멤버 변수
* 객체가 가지는 모든 상태, 수치, 성질에 대한 값을 의미
* C언어에서 구조체와 유사한 성격을 가진다
* 외부 요청이 필요한 메소드는 접근이 가능하도록 설정
1-3. 접근제어자(제한자)
class Circle{
private double pi = 3.141592;
private double radius;
void volume(){
System.out.println(radius * radius * pi);
}
public void set_radius(double r){
radius = r;
}
}
1. 접근제어자의 정의
* 클래스 내 멤버들의 접근수준을 결정하는 토큰
* 프로그램, 패키지, 하위 클래스, 자신의 클래스 순서로 접근수준을 결정
2. 접근제어자 종류
* public: 프로그램 내 모든 객체에서 접근이 가능
* default: 같은 패키지 내에서만 접근이 가능
* protected: 자신과 하위 클래스에서만 접근이 가능
* private: 자신의 클래스에서만 접근이 가능
1-4. 생성자(Constructor) 메소드
class Circle{
private double pi = 3.141592;
private double radius;
Circle(double radius){
this.radius = radius;
System.out.println("객체가 생성 되었습니다.");
}
Circle(){
this.radius = 3.0;
System.out.println("객체가 생성 되었습니다.");
}
}
public class HelloWorld{
public static void main(String[] args){
Circle c1 = new Circle(5.0);
Circle c2 = new Circle();
}
}
1. 생성자 메소드의 정의
* 클래스 내부에 존재하며 객체가 생성될때 자동으로 실행되는 메소드
* 객체가 생성될때 외에는 별도로 실행할수 없다
* 생성자 메소드가 정의되어 있지 않으면 자바에서 자동 생성해 준다
2. this
* 클래스 자신에 포함된 멤버변수에 접근하기 위한 토큰
3. 오버로딩
* 하나의 클래스에 동일한 이름을 가진 여러 메소드를 사용하는 기술
* 메소드의 인수유형과 개수의 차이로 각 메소드를 구별하여 호출
1-5. 객체 생성
class Circle{
private double pi = 3.141592;
private double radius;
private static int cnt = 0;
Circle(double radius){
this.radius = radius;
this.cnt++;
System.out.println(this.cnt + "번 객체 생성");
}
void created_cnt(){
System.out.println("총" + this.cnt + "번 객체 생성");
}
}
public class HelloWorld{
public static void main(String[] args){
Circle c1 = new Circle(5.0);
Circle c2 = new Circle(4.0);
Circle c3 = new Circle(3.0);
c1.created_cnt();
}
}
1. 인스턴스 생성
* 새로운 객체를 생성하여 적절한 타입의 변수에 할당하는 작업
* new 키워드를 이용하여 인스턴스를 생성하고 동시에 생성자가 호출된다
* 일반적으로 인스턴스의 타입과 객체 변수의 타입이 동일
2. 객체의 멤버 접근
* 객체의 멤버에 직접 접근하기 위해서는 객체변수와 점(.)을 이용한다
* 접근 제어자에 따라 직접접근이 어려울수 있다
2. 상속(Inheritance)
2-1. 상위 클래스
* 상위 클래스는 대부분의 속성을 하위 클래스에게 상속
* 여러 하위 클래스가 사용할 공통된 속성을 구현
* 상위 클래스 단독으로 인스턴스를 생성
2-2. 하위 클래스
* 상속받은 상위클래스의 대부분의 속성을 포함하여 인스턴스를 생성
* extends 키워드를 사용하여 상속받을 상위클래스를 지정
* 상위 클래스의 메소드를 재사용, 재정의하여 사용
2-3. 오버라이딩
class Espresso{
int espresso = 20;
void recipe(){
System.out.println("에스프레소" + espresso + "ml");
}
}
class Americano extends Espresso{
int water = 80;
void recipe(){
System.out.println("에스프레소" + espresso + "ml + 물" water + "ml");
}
}
public class HelloWorld{
public static void main(String[] args){
Espresso e1 = new Espresso();
e1.recipe();
Americano a1 = new Americano();
a1.recipe();
}
}
* 상위 클래스의 메소드를 재정의하여 사용하는 기술
* 상위 클래스와 동일한 메소드명과 매게변수를 지정하여 사용
2-4. 추상 클래스(Abstract Class)
abstract class Shape{
abstract void draw();
}
class Circle extends Shape{
void draw(){
System.out.println("원을 그립니다");
}
}
class Rectangle extends Shape{
void draw(){
System.out.println("사각형을 그립니다");
}
}
public class HelloWorld{
public static void main(String[] args){
Circle c1 = new Circle();
Rectangle r1 = new Reactangle();
c1.draw();
r1.draw();
}
}
1. 추상클래스 개념
* 클래스의 체계적인 설계를 위해 사용하는 클래스
* 선언부만 있고 구현부가 없는 추상메소드를 하나라도 포함하면 추상클래스
* 반드시 하위 클래스에서 상속하여 추상메소드를 오버라이딩해야 인스턴스 생성이 가능
* 상속된 클래스에서도 구현되지 않은 추상메소드가 있다면 그 역시 추상클래스이므로 인스턴스 생성이 불가능
2. 추상 클래스의 구현
* abstract 키워드를 사용하여 클래스와 메소드를 구현
* 메소드의 구현분(중괄호)를 생략하여 표현
* 추상클래스를 상속받은 후, 해당 메소드를 오버라이딩 한다
2-5. 인터페이스
interface Coffee {abstract void drink_coffee();}
interface Cookie {abstract void eat_cookie();}
class Cafe implements Coffee, Cookie{
public void drink_coffee(){
System.out.println("커피를 마신다");
}
public void eat_cookie(){
System.out.println("쿠키를 먹는다");
}
}
public class HelloWorld{
public static void main(String[] args){
Circle c1 = new Circle();
Rectangle r1 = new Reactangle();
c1.draw();
r1.draw();
}
}
1. 다중상속의 문제점
* 둘 이상의 상위클래스를 지속 받는것을 다중상속이라고 한다
* 상위 클래스 A, B가 같은 클래스 C를 상속받는 경우와 같이 상속관계가 복잡해지면 알수없는 부작용 발생확률 높아짐
2. 인터페이스 특징
* 인터페이스는 모든 메소드가 추상 메소드로 정의되어 있는 추상클래스를 의미
* 상속을 받지 않기 때문에 다중 상속의 부정적 영향을 전혀 받지 않고 다중 상속의 장점을 활용할수 있다
3. 인터페이스의 구현
* class 대신 interface 키워드를 사용하여 구현하고, implements 키워드를 사용하여 상속
* 확장된 클래스의 인스턴스를 상위 인터페이스 타입의 객체 변수에 할당하여 기능을 변경하거나 제한을 둔다
3. 예외처리
3-1. 예외 처리의 개념
* 프로그램 실행 도중 문제(예외)가 발생하면 프로그램이 멈추거나 종료
* 예외처리는 예외를 해결(처리)하는 코드를 구현하는 것
* 예외를 식별할 영역을 별도로 지정하여 예외가 자주 발생하는 코드를 보완
3-2. try-catch
* try 블록으로 감싼 코드에서 예외가 발생하면 catch 블록의 코드가 실행
* try 블록에서 발생한 예외로 인한 프로그램의 강제 종료를 막을수 있다
3-2. finally
public class HelloWorld{
public static void main(String[] args){
try{
// 예외 감지
}catch(){
// 예외감지 실행
}finally{
// 무조건 실행
}
}
}
* 생략이 가능한 부분으로 예외 여부와 상관없이 항상 실행하는 블록
참고자료 : 이기적 환상콤비 정보처리기사
728x90
'자격증 > 정보처리기사' 카테고리의 다른 글
운영체제 (0) | 2022.07.11 |
---|---|
Python 언어 (0) | 2022.07.11 |
객체지향 개발 절차 (0) | 2022.07.10 |
객체지향 기술 (0) | 2022.07.07 |
C언어 자료구조와 포인터 (0) | 2022.07.07 |