-
6. Review / 7.객체지향프로그램개발자 수업/Java 2021. 10. 4. 22:51
1. 프로그래밍
1) 컴퓨터에게 요구사항(일)을 시키기 위해 프로그래밍 언어(JAVA)로 만든
명령어 집합인 프로그램을 만드는 일.
2. 컴파일 : 프로그래밍 언어를 기계어로 바꾸어 주는 일.
3. 컴파일러 : 기계어로 바꾸어 주는 프로그램.
자바를 설치하면 자바 컴파일러도 설치됨.
4. 자바의 역사
1) 1957
2) 1984
3) 1995
5. 자바 언어의 차이점
1) 플랫폼에 독립적인 프로그래밍을 할 수 있음.
2) 객체지향 프로그램으로 유지보수, 확장성이 좋음.
3) 안정적임.
4) 풍부한 라이브러리 제공, 오픈소스와 연동됨.
6. 변수
1) 변하는 수
2) 변하는 값을 프로그램에서 나타내기 위한 방법
3) 사람의 나이, 온라인 상품의 개수, 학생의 학년 ....
4) 변수와 메모리
- 변수를 선언하는 것은 해당 자료형의 크기만큼의 메모리를 사용하겠다는 것임.
5) 변수 이름
- 그 쓰임에 맞는 이름으로 명명하는 것이 가독성에 좋음.
- camel notation (numberOfStudent)
7. 명명법
1) 클래스명은 명사, 메서드는 동사, 기능은 명사 + 동사
8. 표기법
1) CamelCase
- 문자의 표현을 낙타 등처럼 했다고 해서 정해진 이름
- 주로 객체지향 프로그램에서 사용함.
2) snake_case
- 언더라인(_)으로 단어를 구분하는 명명법.
- C, SQL, python 등에서 사용.
1. 객체(Object)
1) 의사나 행위가 미치는 대상
2) 구체적, 추상적 데이터 단위 (학생, 회원, 생산, 주문, 배송)
3) 예) 쿠팡에 *회원 로그인을 하고 여러 *판매자가 *판매하고 있는 *제품 중 하나를 골라 주문한다
2. 절차 지향 프로그래밍 vs 객체 지향 프로그래밍
1) 아침에 일어나 4강의실에 가는 과정
- 절차 지향 프로그래밍
일어난다 -> 씻는다 -> 밥을 먹는다 -> 지하철, 버스를 탄다 -> 학원에 도착한다
- 객체 지향 프로그래밍
수강생 <-탄다-> 버스 수강생 <-먹는다-> 밥 수강생 <-간다-> 학원
2) 객체 지향 프로그램은 어떻게 구현하느냐?
- 객체를 정의하고
- 각 객체 제공하는 기능들을 구현하고
- 각 객체가 제공하는 기능들 간의 소통(메시지 전달)을 통하여 객체 간의 협력을 구현
3. 클래스
1) 객체의 청사진(blueprint) 임
2) 객체의 속성은 멤버 변수(member Variable)로 선언함/* * 1) 클래스 : 객체를 정의해 놓은 코드임 * 2) 클래스의 용도 : 객체를 생성하는데 사용함 * 3) 객체 : 실존하는 사물이나 도구 등 => 객체는 클래스에서 정의된 내용대로 메모리에 생성된 것을 의미함 * 4) 객체의 용도 : 객체의 속성과 기능에 따라 다름 * * 5) 클래스 객체(인스턴스) * 상품 설계도 상품 * 모니터 설계도 모니터 * 붕어빵 기계 붕어빵 */ public class Student { int studentNumber; String studentName; int majorCode; String majorName; int grade; }
/* * 클래스 코딩하기 * 1) 클래스는 대문자로 시작하는 것이 좋다 * 2) java 파일 하나에 클래스는 여러 개가 있을 수 있지만 public 클래스와 .java 파일의 이름은 동일하다 * 3) Camel notation 방식으로 임명 */ public class Order { int orderId; String buyerId; String sellerId; int productId; String orderDate; }
package kr.co.ezenac.field; public class UserInfo { String userId; String password; String userName; String userAddress; int phoneNumber; }
4. 함수와 메서드
1) 함수(function)
- 하나의 기능을 수행하는 코드
- 구현된 함수는 호출하여 사용하고, 호출된 함수는 기능의 실행이 끝나면 제어가 반납됨
- 함수로 구현된 하나의 기능은 여러 곳에서 동일한 방식으로 호출되어 사용될 수 있음public class FunctionTest { public static int addNum(int num1, int num2) { int result; result = num1 + num2; return result; } public static void sayHello(String greeting) { System.out.println(greeting); } public static int calcSum() { int sum = 0; int i; for(i=0; i<=100; i++) { sum += i; } return sum; } public static void main(String[] args) { int n1 = 10; int n2 = 20; int total = addNum(n1, n2); sayHello("즐거운 오후입니다."); int num = calcSum(); System.out.println(total); System.out.println(num); } }
2) 함수 정의하기
- 함수는 반환 값 타입, 이름, 매개변수, 함수 몸체(body)로 구성됨
5. 함수 호출과 스택 메모리
1) 스택(stack) : 함수가 호출될 때 지역 변수들이 사용하는 메모리
2) 함수의 수행이 끝나면 자동으로 반환되는 메모리
6. 메서드(method)
1) 객체의 기능을 구현하기 위해서 클래스 내부에 구현되는 함수
2) 멤버 함수(member function)이라고도 함
3) 메서드를 구현함으로써 객체의 기능이 구현됨
4) 메서드의 이름은 그 객체를 사용하는 객체(클라이언트)에 맞게 짓는 것이 좋음
ex) getStudentName()// 설계도, 붕어빵틀을 만드는 작업 /* * 객체의 구성요소 * 1) 속성(멤버 변수)과 기능(멤버 메서드)으로 되어 있음 * 2) 생성자 */ public class FieldInit { // 기본형 변수 byte byteField; // 1 byte short shortField; // 2 byte int intField; // 4 byte (default) long longField; // 8 byte boolean booleanField; // 1 char charField; // 2 float floatField; // 4 double doubleField; // 8 // 참조형 변수 String strField; // 4 int[] arrField; // 4 /* * toString() : 클래스의 멤버 변수(필드) 값들을 수시로 확인하고자 할 때나, 원하는 포맷으로 멤버 변수들을 출력하고자 할 때 많이 사용 */ public String toString() { return "byteField : " + byteField + ", shortField : " + shortField + ", intField : " + intField + ", booleanField : " + booleanField + ", strField : " + strField; } } /* * 1. 객체와 인스턴스 * 1) 일반적으로 객체나 인스턴스나 같은 말임 * 2) 객체(Object)는 인스턴스(instance)를 포함하는 형태임 * 3) 인스턴스는 new 연산자에 의해 메모리에 할당된 것을 말함 * - TV는 인스턴스다 TV는 TV클래스의 객체다 * TV는 객체다 TV는 TV클래스의 인스턴스이다 * 4) 인스턴스화(instantiate) : class로부터 instance를 생성하는 것 * 클래스 -----------------------------> 인스턴스(객체) * * 2. new 연산자 * 1) 클래스에 있는 멤버들의 바이트 크기만큼 heap(힙)에다가 메모리 할당하여 동시에 초기화를 시켜주는 역할을 함 * 2) 인스턴스 생성 코드 * 클래스명 참조변수명 = new 클래스명(); * 3) 인스턴스 사용 */ public class FieldInitTest { public static void main(String[] args) { FieldInit fi = new FieldInit(); System.out.println(fi.byteField); System.out.println(fi.toString()); } }
/* * this : 1) 클래스의 주소, 객체 자기 자신의 주소 <---> super : 조상 객체의 주소 * 2) new라는 연산자가 인스턴스를 생성되면 비로소 활성화됨 */ public class Student /* extends Object */ { // 멤버 변수(필드) String name; int age; // Object 클래스의 toString() 오버라이딩(재정의) @Override public String toString() { String str = "이름 : " + this.name + ", 나이 : " + this.age; return str; } } public class StudentTest { public static void main(String[] args) { // 아래는 각각 독립된 저장공간을 가지는 인스턴스가 heap(힙)에 할당됨 Student stu1 = new Student(); Student stu2 = new Student(); stu1.age = 20; stu1.name = "김광현"; System.out.println(stu1); System.out.println(stu2); // stu1의 주소를 stu2에 대입 stu2 = stu1; stu2.age = 10; System.out.println(stu1); System.out.println(stu2); /* * 원래 stu2가 가리키고 있던 인스턴스는 쓰레기 객체가 됨 * gc(garbage collector)가 쓰레기 객체를 수집하여 소멸시킴 */ } }
public class Monitor { // 멤버 변수 (필드) String color; // 모니터의 색상 int channel; // 채널 int volume; // 볼륨 boolean power; // 전원(on/off) // 멤버 메서드 // 모니터를 켜거나 끄는 기능을 하는 메서드 public void power() { if(!this.power) { System.out.println("모니터가 켜졌습니다."); this.power = !power; } else { System.out.println("모니터가 꺼졌습니다."); this.power = !power; } } public void channelUp() { this.channel++; System.out.println("현재 채널 : " + this.channel); } public void channelDown() { System.out.println("현재 채널 : " + (--this.channel)); } public void volumeUp() { System.out.println("현재 볼륨 : " + (++this.volume)); } public void volumeDown() { System.out.println("현재 볼륨 : " + (--this.volume)); } } public class MonitorTest { public static void main(String[] args) { Monitor monitor = new Monitor(); System.out.println(monitor); monitor.power(); monitor.power(); monitor.power(); monitor.channel = 5; monitor.channelUp(); monitor.channelUp(); monitor.channelDown(); monitor.channelDown(); monitor.volumeUp(); monitor.volumeUp(); } }
'개발자 수업 > Java' 카테고리의 다른 글
9. 객체지향프로그램3 (0) 2021.10.06 8. 객체지향프로그래밍2 (0) 2021.10.05 5. 반복문 (while문, do~while문, for문) (0) 2021.10.01 210930 / if문, if else문, if else if문, switch case문, Math.random() (0) 2021.10.01 210929 / 대입 연산자, 부호 연산자, 산술 연산자, 증가&감소 연산자, 관계 연산자, 논리 연산자, 조건 연산자 (0) 2021.09.29