0610. 자바 기초 - 클래스와 패키지

hyunn·2021년 6월 15일
0

Java-basic

목록 보기
4/26
post-thumbnail

project 소스파일 관리

한 폴더 내에서 컴파일 할 때 발생하는 문제점

소스파일과 클래스파일이 섞이게 됨, 한 폴더에 모든 소스파일 존재

→  파일 개수가 많아지면 관리 어려움! ⇒ 소스파일과 클래스파일 분리, 용도따라 디렉토리 분산배치

  • src/ -> *.java
  • lang/ -> *.java
  • conf/ -> *.java
  • bin/ -> *.class

기본 컴파일 명령 : $ javac Hello.java 경로를 따로 지정하지 않으면? → 한 폴더 내에 생성

일일히 옮겨주는 대신 → 옵션 -d 이용

  1. 옵션 -d 로 클래스파일 저장할 폴더를 지정

    $ javac -d [클래스파일 옮길 폴더경로] 컴파일할 소스파일명

  2. 상위 폴더로 가서 소스파일명 대신 소스파일 경로를 지정

    $ javac -d 클래스파일폴더명 소스파일폴더/소스파일명

    ex. $ javac -d bin src/Hello.java

자바 프로젝트 폴더

여러 애플리케이션을 구분해서 개발할 때 소스파일과 관련파일을 애플리케이션 별로 구분

how? → ‘프로젝트’ 라는 단위로 구분

git /      프로젝트1/src1/bin1       프로젝트2/src2/bin2

Maven 표준 프로젝트 폴더 구조

이렇게 폴더가 많아질 때 사용하는 기본 디렉토리 구조

Maven : 컴파일, 테스트, 문서생성, 배포파일생성 등 개발 작업(build) 전반을 도와주는 프로그램(도구) ⇒ 빌드도구. Gradle도 비슷한 역할

  • 빌드도구 : Ant → Maven (SI쪽) → Gradle (Android)
  • Gradle 은 Maven 과 호환

Maven 디렉토리 구조

src/

main/  application source 및 관련파일

	java/    	자바소스폴더

	resources/  application 실행관련 설정파일

	webapp/     HTML, CSS, Javascript, JSP, Image 등 웹 관련 파일

test/  개발하는동안 단위테스트 관련 파일

	java/     단위테스트 자바소스파일

		resources/        단위테스트 실행할 때 사용할 설정파일

표준 디렉토리 구조와 컴파일/실행

컴파일

프로젝트폴더> $javac -d bin/main src/main/java/Hello.java

실행

프로젝트폴더> $ java bin/main/Hello

$ java -classpath bin/main 클래스명

$ java -cp 클래스파일위치 클래스명

Gradle build 도구를 이용한 프로젝트 폴더 준비

  1. https://gradle.org/ gradle install

  2. $mkdir 명령어 이용 프로젝트 폴더생성

  3. 초기화진행 → 프로젝트폴더> $ gradle init

  4. 원하는 방식 선택해서 진행

    ex. project type-application / language-java / DSL-groovy /  framework-JUnit4 / …
    source package 만들때 이름 com.___ → 왜? 이름 안겹치게 도메인명사용 도메인을 뒤집어 작성

조건이 참이면 if 내의 코드1 실행, 조건이 거짓이면 else 내의 코드2 실행

Function

객체지향 프로그래밍의 등장 이유

소스코드의 양이 많아지면서 가독성, 효율, 관리 용이 등 위해 특정기능 수행단위로 묶은 것

→ 대량의 소스코드를 쉽게 관리하기위해서

  • 언어 복잡도 : basic, cobol, fortran  <<< C <<< C++, Java, C#

하나의 파일 내에는 여러개의 function 존재 가능함

  • C언어 → 그 순서를 지정해주기위해 제일 처음 읽기 시작하는 function을 main으로 지정

  • 소스코드의 양이 더 많은 Java 등 언어 → function을 묶음으로 분류해 관리하는 최소단위 class 사용

class { function1 { }, f2 { }, ...}

  • 단순한 절차적 프로그래밍: Cobol, Fortran, Basic, JavaScript
  • 함수형 프로그래밍: C
  • 객체지향 프로그래밍: Java, C++, C#

각 언어를 분류한 것은 속도에는 상관없이 복잡도로만 나타낸 것

이러한 언어를 사용해 프로그래밍한 것을 OPP

OOP

Object Oriented Programming : 객체지향 프로그래밍

cf.) Javascripit는 c처럼도 cobol처럼도 구동된다

  • C언어 최소단위 : function

    최소한 main function은 만들고 소스코드를 묶어야함

  • Java 기본단위 : class

    그 밑 선언부 main function 필요 → 없으면 오류 발생

프로그램 실행 시작점 (entry point)

C언어 → int main() {         }

Java언어 → class XXX{      public static void main() {             }           }

  • java class 기본구조
class 클래스명 {
	public static void main (String[] args) {
				java code;
	}
}

Java class와 package 관계

Statement 하나의 완성된 명령문

function (method)

⇒ functon은 실행하는 기능단위로 여러 개의 statement 를 묶어놓은 것

⇒ 관리 용이

class 서로 관련된 기능을 분류해 묶어둔 것

class A{ method1{} m2{} } class B{ ----- }

package

eng.alph.aaa/ A.class

statement < method(function) < class < package

Pa / C1 {m1 (s1, s2,…) m2( )}

Java Package

자바 패키지 = 디렉토리

패키지명 규칙 : 보통 다른 개발자나 회사와 이름 충돌방지위해 인터넷 도메인명 사용

com.naver.line ___ - 도메인명, 프로젝트명이나 서비스명

패키지 멤버 클래스

패키지에 소속된 클래스는 소스파일 선언부에 소속된 패키지명 적어줘야함


package com.eomcs.lang.ex01;

class A { }

패키지 소속 클래스 실행 방법

$ java 패키지명.클래스

ex. $ java -cp app/bin/main com.eomcs.lang.ex00

주석 등 한글로 작성시 깨지는 오류 발생 → -encoding 옵션으로 언어형식 알려줘야함

encoding 컴파일 옵션

$javac -encoding utf-8 -d app\bin\main V app\src\main\java.....

  • 소스파일에 영어가 아닌 문자가 있고 그 문자가 UTF-8규칙에 따라 저장된 경우 사용
  • encoding 옵션은 V 위치에 작성해도됨
  • !! 한국 개발 회사에선 필수 코드라 볼 수 있음

Package 선언

패키지에 소속되려면 class 상단부에 package 선언해야함

패키지에 소속된 소스파일을 컴파일하면 컴파일러가 자동으로 소속 패키지 폴더를 만들어줌

패키지 소속된 클래스를 실행하려면 패키지가 있는 폴더를 지정해서 실행해줘야함

$java -cp class위치 class속한package.class명

패키지 사용해야 여러 파일 관리가 더 쉽다

같은 이름의 java파일도 서로다른 패키지에 속하면 덮어씌워지지않고 존재가능

무소속 클래스는 그냥 지정 자리에 바로 생김

$java -cp 위치 class명

패키지 소속 클래스는 지정폴더 하위에 패키지 폴더가 새로 생성되고 그 제일 밑에 클래스 생성됨

0개의 댓글