본문 바로가기

개발 일지

[TIL]이노베이션 캠프 9일차

1. 개발 진행 상황

2. 개발 중 발생한 이슈와 해결

3. 새로 배운 것

이클립스에서 자바 프로그램 작성하는 순서

프로젝트 생성: 메뉴 File -> New -> Java Project

클래스 생성: 프로젝트 이름 위 우클릭 -> New -> Class

저장 및 컴파일: 소스파일 작성 후 저장(자동 컴파일 됨)

실행: 메뉴Run -> Run

 

빌드: 소스파일(*.java)로 부터 프로그램을 만들어내는 전 과정

workspace의 모든 프로젝트 빌드 : Project -> Build All

현재 프로젝트 빌드(변경된 소스 파일만 새로 컴파일): Project -> Build Project

이전 빌드 정보 모두 삭제(모든 소스파일 새로 컴파일): Project -> Clean

소스파일 변경 후 저장 시 자동 컴파일: Project -> Build Automatically

 

배열

선언: 타입[] 변수명; int[] score = new int[5]; // 정수형 배열, 배열명, 5크기로 생성

선언2: 타입 변수명[]; int score[];

생성: 변수명 = new 타입[길이

 

클래스의 정의

1. 설계도

클래스와 객체

클래스: 객체를 정의한 것으로 객체를 생성하는데 사용 ex. 제품설계도, TV설계도, 붕어빵 틀

객체: 실제로 존재하는 것(사물 또는 개념)으로 객체가 가지고 있는 기능과 속성에 따라 다름 ex. 제품, TV, 붕어빵

객체의 구성요소: 객체 = 속성(변수) + 기능(메서드)

모든 인스턴스를 대표하는 일반적 용어

인스턴스: 특정 클래스로부터 생성된 객체

클래스 설계도
객체 TV
속성(변수=데이터) 크기, 길이, 높이, 색상, 볼륨, 채널 등
기능(메서드=함수=명령묶음) 켜기, 끄기, 볼륨 높이고, 볼륨 낮추기, 채널 변경
class TV {
int width;
int height;
string color;
int volume;
int channel;

void power() {powe = !power;}
void channelUp() {channel++;}
void channelDown() {channel--;}
}

객체의 생성과 사용

클래스명 변수명; //클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = new 클래스명(); // 클래스의 객체 생성 후 객체의 주소를 참조변수에 저장

Tv = t; // Tv타입(기본형x,참조형o)의 참조변수 t선언
t = new Tv(); // Tv인스턴스 생성 후 생성된 Tv인스턴스의 주소를 t에 저장

Tv t = new Tv(); //Tv형 변수명이 t인 참조변수 선언 및 클래스의 객체 생성, 위 두문장을 합쳐서 쓴 것

t.channel = 7; //Tv인스턴스의 멤버변수 channel의 값에 7을 저장함
t.channelDown(); // Tv인스턴스의 channelDown()메서드 호출
System.out.println("현재 채널은 + t.channel + "입니다.");

예제
Tv t1 = new Tv();
Tv t2 = new Tv();
t2 = t1;
t1.channel = 7;
System.out.println("t1의 채널은 + t1.channel + "입니다."); // t1의 채널은 7 입니다.
System.out.println("t2의 채널은 + t2.channel + "입니다."); // t2의 채널은 7 입니다.
//channel이라는 하나의 인스턴스를 여러개의 참조변수(t1, t2)가 가리키는 경우는 가능ㅇ
//여러 인스턴스를 하나의 참조변수가 가리키는 경우는 불가능(변수는 하나의 값만 저장함)

객체 배열

객체 배열 == 참조변수 배열
Tv tv1, tv2, tv3; -> Tv[] tvArr = new Tv[3]; // 길이가 3인 Tv타입의 참조변수 배열

객체 배열
Tv t1 = new Tv();
Tv t2 = new Tv();
Tv t3 = new Tv();

참조변수 배열
Tv[] tvArr = new Tv[3] //Tv형(데이터타입)의 참조변수 tvArr에 길이가 3인 배열 생성 
tvArr[0] = new Tv(); // 객체는 각 인덱스별로 생성 필요
tvArr[1] = new Tv();
tvArr[2] = new Tv();

2. 데이터 + 함수

클래스 == 데이터 + 함수

변수: 하나의 데이터를 저장할 수 있는 공간

배열: 같은 종류의 여러 데이터(같은 타입)를 하나로 저장할 수 있는 공간

구조체: 서로 관련된 여러 데이터(각각 다른 타입 가능)를 하나로 저장할 수 있는 공간

클래스: 데이터와 함수의 결합(구조체 + 함수)

 

3. 사용자 정의 타입: 원하는 타입을 직접 만들 수 있음

사용자 정의 타입 Time클래스를 만들어서 간략해지는 코드 예시

class Time{ int hour; int minute; int second;} 

int hour;
int minute;
int second;
Time t = new TimeI();
// Time형 참조 변수 t에 Time객체 생성
int hour1, hour2, hour3;
int minute1, minute2, minute3;
int second1, second2, second3;
//여러 시간을 다루려면 변수가 많아짐
Time t1 = new TimeI();
Time t2 = new TimeI();
Time t3 = new TimeI();
int[] hour = new int[3];
int[] minute = new int[3];
int[] second = new int[3];
//더 많은 시간을 다루기 위해 배열 사용: 시, 분, 초가 따로 묶여 있음
Time[] t = new Time[3]
t[0] = new Time();
t[1] = new Time();
t[2] = new Time();

선언위치에 따른 변수의 종류

//클래스 영역 시작
{
    int iv; //인스턴스 변수(instance valiable)
    static int cv; //클래스 변수(static변수, 공유변수), cv=static+iv
//메서드 영역 시작
    void method()
    {
    int lv = 0; //지역변수(local valiable)
    }
{

1. 클래스 영역: 선언문(변수선언, 메서드 선언)만 가능

2. 메서드 영역: 메서드 선언(메서드 정의)

변수의 종류 선언 위치 생성 시기
클래스 변수
(cv: class variable)
클래스 영역 클래스가 메모리에 올라갈 때 생성
아무때나 사용 가능
인스턴스 변수
(iv: instance variable)
인스턴스(객체)가 생성되었을 때 생성
지역변수
(lv: local variable)
클래스 영역 이외의 영역
(메서드, 생성자, 초기화 블럭 내부
변수 선언문이 수행되었을 때 생성
메서드 종료 시 자동 종료

객체 = iv를 여러개 묶어 놓은 것

 

메서드: 작업단위로 문장들을 묶어 놓은 것 

값(입력)을 받아서 처리하고 결과를 반환(출력)

int add(int x, int y) { // 반환타입(출력)int 메서드명 add 매개변수선언(입력) int x, int y
int result = x + y;

return result; //결과를 반환
}

 

메서드 장점: 중복 코드 제거, 관리 용이, 재사용 가능

메서드 작성: 반복적으로 수행되는 여러 문장을 메서드로 작성, 하나의 메서드는 한가지 기능만 수행하도록 작성

메서드 = 선언부 + 구현부

반환타입 메서드명(타입 변수명, 타입변수명, ...) // 선언부

{
//메서드 호출 시 수행 될 코드
} // 구현부

int add(int a, int b) //선언부
{
	int result = a + b;
    return result; //호출한 메서드로 결과를 반환
}

 

메서드의 호출

메서드명(값1, 값2, ...); // 메서드 호출 방법

print99danAll(); // void print99danAll()을 호출(void는 출력할게 없다는 뜻)
int result = add(3, 5); // int add(int x, int y)를 호출하고 결과를 result에 저장

 

하나의 소스파일에 여러개의 클래스

public class: 하나의 소스파일에 public class 하나만 존재함, 소스파일명과 클래스명이 같아야 함

public  클래스가 아닌 일반 class는 한개의 소스파일에 여러개 있을 수 있음(public class 없을 시 소스파일명은 n개 클래스 중 한개와 이름 같으면 됨)

메인메소드가 있는 클래스는 소스파일과 이름 같아야함

 

return할 게 없을 경우 void로 

메서드의 실행흐름

MyMath mm = new MyMath(); // 인스턴스 생성
long value = mm.add(1L, 2L); // 메서드 호출
long add(long a, long b) {
		long result = a + b;
        return result;
		}

1. 객체 생성

하나의 소스파일에는 하나의 class만 작성하는것이 바람직

 

4. 참고 레퍼런스

https://www.youtube.com/user/MasterNKS

 

남궁성의 정석코딩

자바의 정석 동영상 강의 채널입니다.(by 저자 남궁성)

www.youtube.com

5. 오늘 한 일 / 회고

  • 오늘 알고리즘 모의고사를 봤는데..솔직히 쉽게 풀거라고 생각했다..근데 시간 왜이렇게 빨리가는지ㅠㅠ문제해석도 꼬아서하고 java문법도 어렵고 해서 제한시간 2시간이였는데.. 겨우 풀고 겨우 영상 찍어서 제출할 수 있었다.. 본 테스트에서도 이렇게 꼬일까봐ㅠㅠ 알고리즘 강의 듣고 java강의 듣고있는데.. 너무 배울게 많아서 우선순위를 못정하겠다ㅠㅠ 할건많은데 나 왜이렇게 느리냐..계속 앉아만 있는데ㅠㅠㅠ또륵........

6. TO-DO LIST

  • java문법 공부
  • 알고리즘 공부
  • 2주차 과제...

7. 특이사항

모의테스트 13~15시(2시간) 겨우 끝냄..ㅎㅠ

'개발 일지' 카테고리의 다른 글

TIL]이노베이션 캠프 11일차  (0) 2022.08.12
[TIL]이노베이션 캠프 10일차  (0) 2022.08.10
[TIL]이노베이션 캠프 8일차  (0) 2022.08.08
[WIL]이노베이션 캠프 1주차  (0) 2022.08.08
[TIL]이노베이션 캠프 7일차  (0) 2022.08.07