JAVA 언어
JAVA의 역사
- 자바는 1980년대 초, 미국 Sun 사의 Jammes Gosling이 전자제품에 이용할 목적으로 개발
- 인터넷이 확상되면서 90년대부터 관심을 받기 시작함
JAVA의 특징
- 이식성이 높은 언어
- 객체 지향 언어
- 메모리를 자동으로 관리
- 다양한 어플리케이션 개발
- 멀티쓰레드 구현
- 동적로딩 지원
- 오픈 소스 라이브러리가 풍부
JAVA의 기본 구성
클래스(Class)
- 객체가 가지고 있는 속성과 연산의 구조를 정의한다.
- 속성은 멤버변수로, 연산은 메서드로 정의한다.
멤버 변수(Member Variable)
- 객체의 속성을 정의한다.
- 해당 객체가 가지고 있는 고유한 값이다.
메서드(Method)
- 특정 작업을 수행하기 위한 명령문의 집합
- 멤버변수의 값이나 상태를 변경할 수 있는 명령의 집합
접근 지정자
- 클래스의 멤버 변수와 메서드를 외부에서 접근할 수 있는 범위를 지정한다.
- 종류
인스턴스
- 클래스를 통해서 실제로 구현된 구체적인 실체
- 실제로 메모리에 할당된 상태
객체 정의와 생성
- 현실 세계를 객체로 표현한다.
public class Person {
String name = "홍길동";
int age = 40;
public void setName(String n)
{
name = n;
}
public void setAge(int i)
{
age = i;
}
public static void main(String[] args){
Person p1 = new Person(); // p1 이라는 인스턴스 생성
p1.set_name("홍길동");
p1.set_age(40);
}
}
객체지향 특징
생성자
- 인스턴스가 만들어질 때, 초기값 등을 지정하는 역할을 한다.
- 자바에서 생성자는 해당 클래스의 이름과 같아야 한다,
- 생성자는 인자를 다르게 하여 여러 개를 가질 수 있다.
public class Person{
String name;
int age;
public Person(){ // 인자가 없는 생성자
this.name = "사람";
this.age = 1;
}
public Person(String name, int age){ // 인자가 있는 생성자
this.name = name;
this.age = age;
}
public void toPrint(){
System.out.println(this.name + "님의 나이는" + this.age + "살 입니다.");
}
public static void main(String[] args){
Person p1 = new Person(); // 값을 넣지 않으면 인자가 없는 생성자가 호출됨
p1.toPrint(); // 사람님의 나이는 1살입니다.
Person p2 = new Person("이흥직", 40); // 인자가 있는 생성자가 호출됨
p2.toPrint(); // 이흥직님의 나이는 40살입니다.
}
}
예외처리(Exception Handling)
- 프로그램 실행 중에 발생하는 예외를 처리해주는 방법
- 예외 상황이 발생했을 때 프로그램이 자연스럽게 종료될 수 있도록 처리한다.
public static void main(String[] args){
try{
코드 실행
}
catch(ArithmeticException e){
산술 계산 오류 발생시 실행
}
catch(Exception e){
모든 오류 발생시 실행
}
finally{
모든 오류 처리가 종료된 후 실행 // finally 구문은 오류가 발생하지 않아도 실행함
}
}
상속(Inheritance)
- 부모 클래스의 멤버를 자식 클래스에서 그대로 쓸 수 있다.
- 클래스를 재사용할 수 있기 때문에 효율적이고 개발 시간을 단축시킨다.
- 부모의 private 한 멤버는 상속 받을 수 없다.
- extends 라는 키워드를 사용한다.
class Parent{
String name;
int age;
public void set_name(String param_n){
name = param_n;
}
public void set_age(int param_i){
age = param_i;
}
}
class Child extends Parent{
int height;
public void set_height(int param_h){
height = param_h;
}
public static void main(String[] args){
Child c = new Child();
c.set_name("홍길동");
c.set_age(40);
c.set_height(170);
System.out.print(c.name); // 홍길동
System.out.print(c.age); // 40
System.out.print(c.height); // 170
}
}
메서드 오버라이딩(Method Overriding)
- 상속 관계에서 부모 클래스에서 정의된 메서드를 다시 재정의한다.
- 추상 클래스나 인터페이스를 상속 받을 때 사용되는 개념이다.
- 부모 메서드의 이름, 리턴 타입, 매개변수의 개수와 유형이 완전히 동일해야 한다.
class Parent{
public void set_name(String param_n){
System.out.println("부모의 이름 변경");
}
public void set_age(int param_i){
System.out.println("부모의 나이 변경");
}
}
class Child extends Parent{
public void set_name(String param_n){
System.out.println("자식의 이름 변경");
}
public void set_height(int param_h){
System.out.println("자식의 키 변경");
}
}
public static void main(String[] args){
Child c = new Child();
c.set_name("홍길동"); // 자식의 이름 변경
c.set_age(40); // 부모의 나이 변경
c.set_height(170); // 자식의 키 변경
}
}
메서드 오버로딩(Method Overloading)
- 같은 이름의 메서드를 인자만 다르게 하여 중복 정의하는 것이다.
- 메서드의 이름이 같아야 하고, 인자의 개수나 타입이 달라야 한다.
class Person{
String name;
int age;
int height
public void set_data(String p_name){
name = p_name;
}
public void set_data(String p_name, int p_age){
name = p_name;
age = p_age;
}
public static void main(String[] args){
Person p1 = new Person();
p1.set_data("홍길동");
Person p1 = new Person();
p2.set_data("홍길동", 40);
}
}
추상 클래스와 인터페이스
추상 클래스(abstract class)
- 반드시 오버라이딩해서 사용할 미완성의 메서드를 하나 이상 가진 미완성 클래스
- 추상 클래스를 상속받은 자식 클래스에서 추상 메서드를 구현해서 사용한다.
- 추상 클래스는 객체를 생성할 수 없다.
abstract class Remote{
public int volume = 10;
public int channel = 1;
public void volume_up(){
this.volume++;
}
abstract void channel_change(int i);
}
class TV_Remote extends Remote{
void channel_change(int i){
channel = i;
}
public static void main(String[] args){
TV_Remote tv = new TV_Remote();
tv.volume_up();
tv.volume_up();
System.out.print("볼륨:" + tv.volume); // 위에서 볼륨을 2 올렸으므로 볼륨:12 이 출력됨
tv.channel_change(5);
System.out.print("채널:" + tv.channel); // 채널:5 출력됨
}
}
인터페이스(interface)
- 추상 클래스의 극단으로, 모든 메서드가 추상적인 형태이다.
interface Remote{
public void volume_up();
public void channel_change(int i);
}
class TV_Remote implements Remote{
public int volume = 10;
public int channel = 1;
public void channel_change(int i){
this.channel = i;
}
public void volume_up(){
this.volume++;
}
public static void main(String[] args){
TV_Remote tv = new TV_Remote();
tv.volume_up();
tv.volume_up();
System.out.println("볼륨:" + tv.volume);
tv.channel_change(5);
System.out.println("채널:" + tv.channel);
}
}
'정보처리기사' 카테고리의 다른 글
[1~7과목] 개념 키워드 암기 (2) | 2023.04.20 |
---|---|
[문제 & 풀이] 정보처리기사 실기 족보_4 (0) | 2023.04.18 |
[문제 & 풀이] 정보처리기사 실기 족보_3 (0) | 2023.04.17 |
[11. 응용 SW 기초 기술 활용] 핵심 키워드 정리 (0) | 2023.04.15 |
[문제 & 풀이] 정보처리기사 실기 족보_2 (0) | 2023.04.13 |