본문 바로가기

DATA 분석 교육 과정 (2024.02~08)/JAVA

JAVA_OOP

728x90
객체 지향 프로그래밍 (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;
						}
					}
			 
		}}}}

      출처; 스마트인재개발원

728x90
반응형

'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