절차지향 프로그래밍 -> 객체지향 프로그래밍
절차지향 프로그래밍
sorting-> 변수선언 > 정렬갯수 -> 배열 확보 -> 오름 / 내림 -> 정렬 처리 -> 결과 출력
객체지향 프로그래밍 -> O.O.P -> Objest Oriented Programing
입력 부분 -> 정렬 처리 부분 -> 결과 부분
Variable(변수) -> 데이터를 저장
Function(함수) -> 처리
class --> 프로그램 설계도
따라서 oop의 첫번째 조건은 프로그램 설계도를 활용해 함수 만들기
Mainclass 와 MyClass 를 만들고 메인에서 마이 클래스 호출하기
/*
Class : 객체 지향의 설계자
(멤버) 변수
(멤버) 메소드
*/
public class Mainclass {
public static void main(String[] args) {
/*
Class : 객체 지향의 설계자
(멤버) 변수
(멤버) 메소드
형식:
(클래스) 설계도
Class 클래스 명 {
변수의 선언부
메소드 선언부 == 함수
} ]
(객체) 생성
클래스명 변수 = new 클래스명();
변수 = 객체,object, instance(먼저 주기 )
변수.메소드 ();
변수. 멤버 변수 = 1;
*/
//예제 구현하기
//객체를 생성
MyClass cls = new MyClass();
//cls: 객체, instance
cls.method();
cls.number=10;
cls.name= "성춘향";
cls.height=157.3;
}
}
MyClass method()
public class MyClass {
// mainclass 안에 넣으면 안 됨! 에러 뜹니당
//변수의 영역 (Area)
int number;
String name;
double height;
// 메소드의 영역
void method( ) {
number = 1;
name = "홍길동";
height = 172.1;
System.out.println("MyClass method()");
}
}
Main Class 에서 Game 클래스와 calculator 클래스를 호출해보자 !
public class MainClass {
public static void main(String[] args) {
// 메인 클래스 안에 Calculator 를 불러오기
// 작업을 분산함으로써 메인 클래스 안에서 작업을 조금 더 깔끔하게 진행할 수가 있다
//1. Calculator 클래스
/*
Calculator cal = new Calculator();
cal.input ();
cal.process();
cal.result();
*/
// Game클래스
Game cal = new Game();
cal.init();
cal.play();
cal.result();
// cal.input 은 필요가 없대 왜?
// Game 클래스에서 void input() 을 void play 안에서 넣어줬거든 ㅎㅎ
}
}
import java.util.Scanner;
public class Calculator {
// 변수
int number1, number2;
String operator;
int result;
// 메소드
void input() {
Scanner sc = new Scanner(System.in);
System.out.print("첫번째 수 = ");
number1 = sc.nextInt();
System.out.println("+,-,*,/)=");
operator = sc.next();
System.out.print("두번째 수 = ");
number2 = sc.nextInt();
}
void process() {
switch (operator) {
case "+":
result = number1 + number2;
break;
case "-":
result = number1 - number2;
break;
case "*":
result = number1 * number2;
break;
case "/":
result = number1 / number2;
break;
}
}
void result() {
System.out.println(number1 + " " + operator + " " + number2
+ " = " + result);
}
}
import java.util.Scanner;
public class Game { // Random 게임을 만들어 봐요 !
/*
[풀이과정]
1. void -- 를 작성하기
2. 멤버 변수 선언하기 -> 왜? 하나요? void 가 여러번 쓰일 때는 멤버 변수를 사용해요 ! 만약 void 가 한 번만 쓰인다면 굳이 필요하지 않아요
즉, 두 개 이상의 메소드가 쓰일 때 사용됩니다
3.
*/
//[멤버변수]
int rand_num, user_num;
Boolean clear;
void init() { // Random 숫자를 설정하는 코드
clear = false;
rand_num=(int)(Math.random()*100) +1;
System.out.println("rand_num:" + rand_num);
}
void input() { // user 입력을 받는 코드
Scanner sc = new Scanner(System.in);
System.out.print("1~100 사이의 숫자 =");
user_num =sc.nextInt();
}
void play () { // loop 를 진행하는 코드
// 객체 지향을 햘 때는 변수를 길게 적지 않아요! 단순하게 적어주세요 playLoop 보다는 Play 추천 !
int w = 0;
while ( w<10) {
input();
// 위에서 만든 void input() 을 play 안에 있는 wile 문에 넣어줄거야 ! 그럼
//MainClass 에서 Play 만 호출해도 돼 !
if(user_num > rand_num) {
System.out.println("너무 큽니다");
}
else if ( user_num < rand_num) {
System.out.println("너무 작습니다");
}
else {
System.out.println("빙고!");
clear = true;
break;
}
w++;
}
}
void result() { // clear/over // 게임을 clear 했는지 over 했는지 확인하는 코드
if(clear) {
System.out.println("게임 클리어");
}else {
System.out.println("게임 오버");
}
}
}
과제 1 - sorthing 클래스 생성해서 메인클래스에서 실행 해보기
// sorting 클래스
sorting so = new sorting();
so.input();
so.sort();
so.result();
정렬할 수의 갯수 입력 = 4
1 번째 숫자 = 456
2 번째 숫자 = 654
3 번째 숫자 = 568
4 번째 숫자 = 88
오름차순이면 1, 내림차순이면 2입력 = 1
88,456,568,654,
import java.util.Scanner;
public class sorting {
int number[] = null; // 정렬처리를 진행하기 위해서는 먼저 배열이 필요하다.
boolean up; // 오름/내림차순 하려면 int 가 아닌 boolean 으로 진행해야 함
//encapsulation(캡슐화) -> 클래스 안에 전부 집어넣는 것
//입력처리
void input() {
Scanner sc = new Scanner(System.in); // 스캐너는 여기만 있으면 됨
System.out.print("정렬할 수의 갯수 입력 = ");
int count = sc.nextInt();
number = new int [count]; // 입력할 갯수를 number메인 변수 안에 넣어줌
for (int i = 0; i < number.length; i++) {
System.out.print((i +1) +" 번째 숫자 = "); // 숫자 입력 받는 중
number[i] = sc.nextInt();
}
//오름, 내림 차순 선택하렴
System.out.print("오름차순이면 1, 내림차순이면 2입력 = ");
int num = sc.nextInt();
if(num==1) up = true;
else up = false;
/* 위처럼 사용해도 되고 이렇게 써도 됨
up = true;
if(num==1) up =false;
*/
}
//정렬처리
void sort() {
int temp;
for(int i = 0; i < number.length - 1; i++) {
for(int j = i + 1; j < number.length; j++) {
// 오름차순
if(up ) {
if(number[i] > number[j]) {
temp = number[i];
number[i] = number[j];
number[j] = temp;
}
}
// 내림차순
else {
if(number[i] < number[j]) {
temp = number[i];
number[i] = number[j];
number[j] = temp;
}
}
}
}
}
//결과 출력
void result () {
for(int i = 0;i<number.length; i ++)
System.out.print(number[i] + ",");
}
}
// swap 넣어서 하는 거 못 따라갔음 ! 수업 끝나구 고치장
클래스명 ==> sorting
메인 변수 설정 ==> number[] : int , up: boolean
메소드 ==> input() , sort () ,result () swap ( i : int, j :int)
과제 풀어보기

[내 풀이 ]
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class Mainclass {
public static void main(String[] args) {
// 과제 2
//홍길동 (이름,나이,주소)배열
//성춘향 (이름,나이,주소)배열
//일지매 (이름,나이,주소)배열
//홍길동 + 성춘향 +일지매 = 다 합한 최종 배열 출력 ?
//홍길동 배열
String Hong []= { "홍길동" , "20" , "형제나라"};
//성춘향 배열
String Sung []= { "성춘향" , "20" , "기생나라"};
//일지매 배열
String One [] = { "일지매" , "20", "의적나라"};
//파일 생성
File file = new File("C:\\tmp\\text.txt");
FileWriter fw;
try {
fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
for(String s : Hong) {
pw.println();
}
pw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class Class {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("C:\\tmp\\text.txt");
try {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String srt = "";
while ((srt =br.readLine()) != null ) { // -> (str =br.readLine() ) 리드라인 이게 비어있지 않을 때
System.out.println(srt);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
[강사님 풀이 ]
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
public class Mainclass {
public static void main(String[] args) {
//File Writer
File file = new File("C:\\tmp\\human.txt");
String name [] = { "홍길동" , "남궁정민" , "사민"};
int age [] = {24,16,22};
String address[] = { "서울" , "남원" , "부산"};
//이렇게는 안 하는 이유? -> 파일로 저장할 때 이상하게 저장 돼 !
//홍길동24서울시 -> 홍길동-24-서울시
//남궁정민16남원시 -> 남궁정민-16-남원시
//사민22부산시 -> 사민- 22 - 부산시
// 이렇게 - 사이에 이 토큰 - 이걸 넣어줘야 돼
String datas [] = new String[3]; // new String[name.length]; -> 이렇게 잡아도 됨 단 이렇게 잡으면 위에 name 배열 내용 바뀔 때 같이 바뀌게 할 수 있음
for (int i = 0; i < datas.length; i++) {
datas[i] = name[i] +"-" + age [i] + "-" + address[i];
}
for (String s : datas) {
System.out.println(s);
}
try {
PrintWriter pw = new PrintWriter( new BufferedWriter(new FileWriter(file))); // 여기까지 쓰면 트라이 / 캐치 나옴
for (String s : datas ) {
pw.println(s);
}
pw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//File read
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String data = " ";
while (( data = br.readLine()) != null ){
//System.out.println(data);
String d [] = data.split("-");
System.out.println("이름: " + d[0]);
System.out.println("나이: " + d[1]);
System.out.println("주소: " + d[2]);
}
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
홍길동-24-서울
남궁정민-16-남원
사민-22-부산
이름: 홍길동
나이: 24
주소: 서울
이름: 남궁정민
나이: 16
주소: 남원
이름: 사민
나이: 22
주소: 부산
내 풀이와 강사님 풀이를 비교해보고 부족한 점을 파악, 접근방식의 차이를 분석해서 보완해보자 !
1. 이미지 속 과제 요구사항 분석화면 캡처에서 보이는 과제 내용은 다음과 같습니다.
2. '내 풀이'와 '강사님 풀이'의 접근 방식 차이💾 1. 파일을 저장할 때 (정형화 vs 파편화)
📖 2. 파일을 읽고 처리할 때 (텍스트 출력 vs 데이터 가공)
3. 내가 '무엇을 이해하지 못했는지' 분석 (약한 부분)작성하신 코드를 보면 자바의 파일 입출력(FileWriter, FileReader, BufferedReader 등)의 사용법(Syntax) 자체는 훌륭하게 기억하고 활용하셨습니다. 다만 다음 두 가지 개념에서 보완이 필요합니다.❌ 1. '데이터 구조화(Parsing)'에 대한 이해 부족 (가장 약한 부분)
❌ 2. 과제 요구사항의 최종 목적지 인지 부족
💡 요약 및 성장 가이드
|
과제
file:///C:/Users/User/Documents/%EC%B9%B4%EC%B9%B4%EC%98%A4%ED%86%A1%20%EB%B0%9B%EC%9D%80%20%ED%8C%8C%EC%9D%BC/Java%EA%B3%BC%EC%A0%9C12.pdf
어렵당 집가서 계속해봐야징
'Java > Java 수강일지' 카테고리의 다른 글
| [수강일지_14] 학생정보 관리 프로그램 만들기 (1) | 2026.05.28 |
|---|---|
| [수강일지_13] , hiding, constructor,objectArray, work13 풀이,OOP 3대 특성 (0) | 2026.05.27 |
| [수강일지_11] over load , Exception , File in put, file out put , Calendar ,Date (1) | 2026.05.22 |
| [수강일지_10] function (함수) (0) | 2026.05.21 |
| [수강일지_9] shorting (정렬), function (함수) (0) | 2026.05.20 |