※ 본 포스팅은 한국항공대학교 이긍해 교수님의 [자바와 객체지향 프로그래밍]을 수강하고 정리한 내용입니다.
지난학기 자바와 객체지향 강의를 수강하고 점점 옅어지는 객체지향 프로그래밍이 아쉬워서 시험기간때 정리했던 내용을 포스팅하고자 합니다. 정리할때 suhwanc.tistory.com/m 블로그 주인장이랑 같이 정리했습니다.
자바 시험기간이시거나, 자바 키워드가 기억 안나실 때 보면 좋을 것 같습니다. 입문용이 아닙니다.
[Intro to JAVA]
자바가 쓰이는 곳
- 인터넷, 웹
- 모바일(특히 안드로이드)
- 임베디드 소프트웨어
- 상업용 소프트웨어
언어와 툴
Compiler: 기계어로 프로그램을 바꾸어 실행한다.
Interpreter: 기계어로 바꾸지 않고 바로 실행한다.
덧) 컴파일러는 코드 전체를 기계어로 바꾸고 실행하지만, 인터프리터는 각 행을 실행합니다. 컴파일러가 인터프리터보단 빠릅니다. 하지만 각 행을 실행하다 에러가 보고되면 멈추는 인터프리터의 장점도 있습니다. 도움이 되는 블로그가 있어 첨부합니다. m.blog.naver.com/ehcibear314/221228200531
JAVA Uses Hybrid Translation
자바는 소스를 바이트 코드로 변경하고, JVM(Java Virtual Machine)을 통해 인터프리팅한다.
JVM이 Java Byte Code를 OS에 맞게 해석해주기 때문에
맥, 윈도우, 리눅스에서 모두 실행가능하다 -> 웹에서 유용하다.
자바 실행 시 실어나는 일
Load(메모리 탑재) -> Verify(보안성 체크) -> 실행
Load: 최초 메모리에 파일을 로드하고 프로그램이 사용하는 클래스를 로드한다.
클래스 파일은 컴퓨터나 네트워크에서 실행된다.
Verify: 클래스가 로딩되면, 바이트 코드 검증기가 안전성을 위해 바이트 코드를 검증한다.
실행: JVM이 바이트 코드 파일을 실행한다.
[객체지향 프로그래밍에 관하여]
객체지향 언어의 장점
- 하드웨어가 객체이므로 소프트웨어도 객체여야 한다.
- 문제를 모델링하기 쉽다.
- 관리가 편하다.
- 재사용성이 올라간다.
- 객체 + 클래스 + 상속 = OOP
OOP의 3요소: Object, Class, Inheritance
덧) OOP == 객체지향 프로그래밍입니다. Object Oriented Programming의 약자입니다.
객체란?
- 데이터와 오퍼레이션 세트가 있는 소프트웨어 구조.
- 객체의 데이터는 인스턴스 변수로 이루어져 있다.
클래스 Vs 객체
클래스란 객체를 정의해 놓은 것이다.
->예) TV는 객체, TV설계도는 객체를 정의하는 클래스
인스턴스
클래스로부터 만들어진 객체를 의미한다.
Inheritance
클래스를 상속받아 원하는 속성을 추가할 수 있다.
덧)
예를 들어, 신이 말의 설계도를 만들었다고 하겠습니다. 그런데 디자인이 심심했던 신은 말의 설계도에 줄무늬를 추가하여 얼룩말을 만들려고 합니다. 말은 이미 다 만들어놨기 때문에, 말을 상속받아 줄무늬만 추가해주면 되겠습니다.
Public class Horse
{
private int legs=0;
Color color = new Color();
public Horse()
{ legs = 4;}
//기타등등 말의 속성
}
Public class Zebra extends Horse
{
public void stripe(Color color)
{
//스트라이프 추가
}
}
인스턴스 변수
클래스 내에 선언되는 변수이다. 인스턴스 변수를 생성할 때 마다 새로운 저장공간을 할당하기 때문에, 다른 클래스에서 공유하여 사용할 수 없다.
encapsulation을 위해 가능한 Private로 선언한다.
Private 변수를 읽고 싶으면 get 혹은 set 메소드를 사용한다.
객체 초기화 (constructor)
각각의 클래스는 생성자를 제공할 수도 있다.
new를 사용해 초기화하고 생성한다.
클래스 명과 같은 이름을 가지고 반환 값이 없다.
기본형과 참조형
기본형 : int, double, boolean .. etc
참조형 : account ac = new account() .. 와 같이 기본형이 아닌 모든 타입을 참조형이라 한다.
main 메소드
Java application은 반드시 main() 메소드를 가지고 있어야 한다.
만약 main() 이 여러개일 수 있다. 이러한 경우, 클래스와 동일한 이름이 우선이다.
import
외부 class -> import 시 경로를 명시적으로 써주어야 한다.
동일 파일 내 다른 패키지면, (해당패키지.class이름) 만 써주면 된다.
[실습 1]
3. (제출) 2020년 9월 달력을 출력하는 프로그램(Calendar.java)을 개인별 로 구현하고 실행한다. 개인별로 작성한 프로그램을 LMS에 제출한다.
package 과제1_2017125064_전준휘;
public class Calendar {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("-------- 9월 --------");
System.out.println("일 월 화 수 목 금 토");
System.out.printf("30 31 ");
for(int i=1; i<=30; i++)
{
if(i%7==6)
{
System.out.printf("\n");
}
if(i<10)
{
System.out.printf(" %d ",i);
}
else
{
System.out.printf("%d ", i);
}
}
}
}
[실습 2]
import java.util.Scanner;
public class ATM_test
{
public static class Account
{
private double balance;
public Account(double initialBalance)
{
if(initialBalance>=0.0)
{
balance = initialBalance;
}
}
public void credit(double amount)
{
balance += amount;
}
public double getBalance()
{
return balance;
}
}
public static void main(String[] args) {
Account account1 = new Account(50.00f);
Account account2 = new Account(0.00f);
System.out.println("\naccount1 balance: $" + account1.getBalance());
System.out.println("account2 balance: $" + account2.getBalance());
double depositTemp, debitTemp, originBalance;
while(true) {
System.out.printf("Enter deposit amount for account1: ");
Scanner input = new Scanner(System.in);
depositTemp = input.nextDouble();
if(depositTemp<0.0f)
{
System.out.println("Make it over $0. Try again.");
continue;
}
else
{
account1.credit(depositTemp);
break;
}
}
while(true) {
System.out.printf("Enter deposit amount for account2: ");
Scanner input = new Scanner(System.in);
depositTemp = input.nextDouble();
if(depositTemp<0.0f)
{
System.out.println("Make it over $0. Try again.");
continue;
}
else
{
account2.credit(depositTemp);
break;
}
}
System.out.println("\naccount1 balance: $" + account1.getBalance());
System.out.println("account2 balance: $" + account2.getBalance());
System.out.printf("\nEnter debit amount for account1: ");
Scanner input= new Scanner(System.in);
debitTemp = input.nextDouble();
originBalance = account1.getBalance();
if (originBalance - debitTemp < 0) System.out.println("Debit amount exceeded account balance.");
else {
System.out.printf("\nsubtracting %.2f from account1 balance\n", debitTemp);
account1.credit(-debitTemp);
}
System.out.println("account1 balance: $" + account1.getBalance());
System.out.println("account2 balance: $" + account2.getBalance());
System.out.printf("\nEnter debit amount for account2: ");
debitTemp = input.nextDouble();
originBalance = account2.getBalance();
if (originBalance - debitTemp < 0) System.out.println("\nDebit amount exceeded account balance.");
else {
System.out.printf("\nsubtracting %.2f from account2 balance\n", debitTemp);
account2.credit(-debitTemp);
}
System.out.println("account1 balance: $" + account1.getBalance());
System.out.println("account2 balance: $" + account2.getBalance());
}
}
'내가 배운 것들' 카테고리의 다른 글
[SSL 보안을 알아보자] 1. 대칭키와 비대칭키 암호화 (0) | 2023.03.10 |
---|---|
[정보보호] AES알고리즘 중, MIX Column 계산하는 법 (6) | 2021.10.03 |