객체 지향 프로그래밍 (OOP : Object Oriented Programming)
- 여러 개의 독립된 단위,
- 즉, 객체들의 모임으로 파악하고자 하는 것 각각의 객체는 메시지를 주고 받고 데이터를 처리
객체 지향 프로그래밍의 특징
1. 캡슐화 (Encapsulation )
- 관련된 필드(속성)과 메소드(기능)을 하나로 묶고, 실제 구현 내용을 외부로부터 감추는 기법(정보은닉)
- 타인 노출을 대비해 특정 속성이나 사용자가 조작 할 수 없도록 숨겨 놓은 것
- 외부에서는 공개된 메소드(기능)의 인터페이스를 통해 접근 할 수 있다.
[예시]
2. 상속 (Inheritance)
- 이미 작성된 클래스(상위클래스)의 특성을 그대로 이어받아 새로운 클래스(하위클래스)를 생성기법
- 기존 코드를 그대로 재사용 또는 추가 확장
3. 추상화 (Abstract)
- 객체에서 공통된 속성과 행위를 추출하는 기법
- 코드 상에서 구현(로직)부분을 제외한 오직 선언 부분만을 설계
- 상세한 정보는 무시하고 필요한 정보들만 간추려서 구정
4. 다형성 (Polymorphism)
- 다양한 형태로 나타날 수 있는 능력
- 같은 기능(메소드)를 호출하더라도 객체에 따라 다르게 동작하는 것
- 상위클래스의 동작을 하위클래스에서 다시 정의하여 사용하는 것 (overriding)
클래스와 객체
생성자
1, 생성자의 특징
* 생성자는 메소드이다
* 생성자 이름은 클래스 이름과 동일
* 생성자는 리턴 타입을 지정할 수 없다.
* 생성자는 new를 통해 객체를 생성할 때만 호출됨
* 생성자는 하나 이상 선언되어야 함
✓ 개발자가 생성자를 정의하지 않으면 자동으로 기본 생성자가 정의됨
- 컴파일러에 의해 자동 생성
- 기본 생성자를 디폴트 생성자(default constructor)라고도 함
- 만약 default 생성자만 존재하고 default에 아무런 기능이 없을 경우 생략이 가능함
2. 생성자 오버로딩
- 생성자의 이름이 같다.
- 매개변수의 타입이 다르거나
- 매개변수의 개수가 다르다.
[예시1]
[예시2]
[예시3]
[예시4] 오류생성
> 클래스에 생성자가 하나라도 존재하면 자동으로 기본 생성자가 생성되지 않음
[연습문제]
객체 배열
[연습문제 1]
Main 클래스를 작성하세요.
- Student객체 배열에 대한 레퍼런스 변수를 선언하세요.
- 2명의 학생 데이터를 입력할 수 있도록 Student 객체 배열을 생성하세요.
- 각각의 인덱스에 Student객체를 생성하세요.
- st[0] 객체에 들어있는 name, ban, num을 초기화 하세요. (김미희, 1반, 10번)
- st[1] 객체에 들어있는 name, ban, num을 초기화 하세요. (이은비, 2반, 12번)
[연습문제 2]
Main 클래스를 작성하세요.
- StudentScore객체 배열에 대한 레퍼런스변수를 선언하세요.
- 3명의 학생 데이터를 입력할 수 있도록 StudentScore객체 배열을 생성 하세요.
- st[0], st[1], st[2] 객체에 들어있는 name, scoreJava, scoreWeb, scoreAndroid 를
아래와 같이 키보드로부터 입력 받아 초기화 하세요.
import java.util.ArrayList;
import java.util.Scanner;
public class Main_stu {
public static void main(String[] args) {
ArrayList<StudentScore> stlist = new ArrayList<StudentScore>();
Scanner sc = new Scanner(System.in);
for(int i=0; i<3; i++) {
System.out.println(i+1+"번째 학생의 이름을 입력하세요 >>");
String name = sc.next();
System.out.println(i+1+"번째 학생의 java점수를 입력하세요 >>");
int scoreJava = sc. nextInt();
System.out.println(i+1+"번째 학생의 Web점수를 입력하세요 >>");
int scoreWeb= sc. nextInt();
System.out.println(i+1+"번째 학생의 Android점수를 입력하세요 >>");
int scoreAndroid = sc. nextInt();
stlist.add(new StudentScore(name, scoreJava, scoreWeb, scoreAndroid));
}
for(int i =0; i<stlist.size();i++) {
int total = stlist.get(i).getScoreJava()+ stlist.get(i).getScoreWeb()+stlist.get(i).getScoreAndroid();
int avg = total/3;
System.out.println(stlist.get(i).getName()+"님의 총점은"+total+"점, 평균은"+ avg+"입니다.");
}
}
}
[연습문제 3]
Main 클래스를 작성하세요.
- 5권의 책 데이터를 입력할 수 있도록 레퍼런스 배열을 생성 하세요.
- BookData객체 배열에 대한 레퍼런스를 선언하세요.
- 각각의 인덱스에 객체를 생성하세요. title, price, writer를 아래와 같이 초기화 하세요
- 입력 받은 가격보다 저렴한 책의 목록과 가격을 아래와 같이 출력하세요
import java.util.ArrayList;
public class BookDataMain2 {
public static void main(String[] args) {
ArrayList<BookData> list = new ArrayList<BookData>();
BookData bd = new BookData("java", 21000,"홍길동");
list.add(bd); // 또는
list.add(new BookData("c++", 21000,"홍길동"));
// 꺼내오기
System.out.println(list.get(0).getTitle());
import java.util.Scanner;
public class BookDataMain {
public static void main(String[] args) {
BookData[] bd = new BookData[5];
Scanner sc = new Scanner(System.in);
bd[0] = new BookData("Java", 21000, "홍길동");
bd[1] = new BookData("C++", 29000, "박문수");
bd[2] = new BookData("Database", 31000, "김장독");
bd[3] = new BookData("Android", 18000, "이순신");
bd[4] = new BookData("Web", 26000, "김철수");
System.out.print("금액을 입력하세요 :");
int input = sc.nextInt();
System.out.print("구매 가능한 책 목록");
for (int i = 0; i < bd.length; i++) {
if (bd[i].getPrice() < input)
System.out.println("["+bd[i].getTitle() +","+ bd[i].getPrice() + ","+bd[i].getWriter()+"]");
}}}
[연습문제 4]
Main 클래스를 작성하세요.
- Product객체를 저장 할 수 있도 록 ArrayList를 생성하세요
- 물건 추가를 선택할 시 다음 과 같이 물건 정보를 입력 받고
ArrayList에 입력 받은 정보가 저장된 객체를 생성하세요
- 예상 판매량 조회를 선택할시 ArrayList에 들어있는 전체 객체의 물건의 제품명, 단가, 수량을 출력하고,
판매 시 총 매출을 구하여 아래와 같이 출력하세요
public class Product {
private String name;
private int unitPrice;
private int amount;
public Product(String name, int unitPrice, int amount) {
super();
this.name = name;
this.unitPrice = unitPrice;
this.amount = amount;
}
public String getName() {
return name;
}
public int getUnitPrice() {
return unitPrice;
}
public int getAmount() {
return amount;
}
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Product> arr = new ArrayList<Product>();
arr.add(new Product("USB", 22000, 4));
while(true) {
System.out.println("[1]물건추가 [2]예상판매량 조회 [3]종료>>");
int input = sc. nextInt();
if(input==3) {
System.out.println("프로그램 종료");
break;
} else if(input==1) {
System.out.println("물건이름 : ");
String name = sc.next();
System.out.println("단가 : ");
int unitPrice = sc. nextInt();
System.out.println("수량 : ");
int amount = sc. nextInt();
arr.add(new Product(name, unitPrice, amount));
}else if(input==2) {
int total =0;
System.out.println("제품명\t단가\t수량");
for(int i=0; i<arr.size(); i++) {
String name = arr.get(i).getName();
int price = arr. get(i).getUnitPrice();
int amount = arr. get(i).getAmount();
System.out.println(name+"\t"+price+"\t"+amount);
total += price*amount;
}
System.out.println("판매시 매출 : ");
}}}}
[연습문제 5]
Main 클래스를 작성하세요.
- 추가 를 선택할 시 이름, 나이, 전화번호를 입력받아 ArrayList에 추가하세요.
- 전체조회를 선택할 시 다음과 같이 추가된 사람의 정보를 모두 출력하세요.
(단, 등록되어있는 연락처가 없을 시에는 "등록된 연락처가 없습니다." 출력.)
- 삭제를 선택할 시 전체 목록을 출력하고 삭제할 사람의 번호를 입력 받아 정 보를 삭제하세요.
(단, 등록되어있는 연락처가 없을 시에는 "등록된 연락처가 없습니다." 출력)
- 검색을 선택할 시 검색할 이름을 입력받아 주소록에 들어있는 이름 중
입력 받은 이름의 정보를 찾아 다음과 같이 정보를 출력하세요
(검색한 이름이 없을 경우 "등록된 연락처가 없습니다." 출력)
public class Address {
private String name;
private int age;
private String PhoneNumber;
public Address(String name, int age, String phoneNumber) {
super();
this.name = name;
this.age = age;
PhoneNumber = phoneNumber;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getPhoneNumber() {
return PhoneNumber;
}
import java.util.ArrayList;
import java.util.Scanner;
public class Main_add {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
ArrayList<Main_add> list = new ArrayList<Main_add>();
while(true) {
System.out.println("[1]추가 [2]전체조회[3]삭제[4]검색[5]종료>>");
int input = sc.nextInt();
if(input==5) {
System.out.println("프로그램이 종료되었습니다.");
break;
}else if(input==1) {
System.out.println("이름 :");
String name = sc.next();
System.out.println("나이 :");
int age = sc.nextInt ();
System.out.println("전화번호 :");
String phoneNumber = sc.next ();
list.add(new Address(name, age, phoneNumber));
}else if(input==2) {
if(list.size()>0) ) {
for(int i=0; i<list.size(); i++) {
String name = list.get(i).getName();
int age = list.get(i).getAge();
String phoneNumber = list.get(i).getPhoneNumber();
System.out.println(i+1+"."+name, age, phoneNumber);
}
}else {
System.out.println("등록된 연락처가 없습니다. ");
}
}else if(input==3) {
if(list.size()>0) {
System.out.println("삭제할 번호 입력 :");
int remover = sc.nextInt();
list.remove(remover-1);
}else {
System.out.println("삭제할 번호가 없습니다. ");
}
}else if(input==4) {
System.out.println("찾을 이름 ");
String serchName = sc.next();
for(int i=0; i<list.size(); i++) {
if(searchName.equals(list.get(i).getName())) {
String name = list.get(i).getName();
int age = list.get(i).getAge();
String phoneNumber = list.get(i).getPhoneNumber();
System.out.println(i+1+"."+name, age, phoneNumber);
} else {
System.out.println("검색한 이름의 정보가 없습니다.");
break;
}
}
}}}}
출처; 스마트인재개발원
'DATA 분석 교육 과정 (2024.02~08) > JAVA' 카테고리의 다른 글
JAVA_JDBC (0) | 2024.03.19 |
---|---|
JAVA_추상화(추상메소드, 추상클래스) (0) | 2024.03.18 |
JAVA_상속 (0) | 2024.03.18 |
JAVA_Music Playlist 만들기 (0) | 2024.03.18 |
JAVA_Collection, ArrayList (0) | 2024.03.17 |