Java 01 - 23.01.02

softCoder·2023년 1월 2일
0

Java

목록 보기
1/2

교육 과정

강의 일정

3/20~ 3/31 (2주간) :project 분석
4/3~ 5/3 : cloud. AIaaS
4/4~ 6/23: project 설계, 구현 / portfolio

9:30~ 12:30 3시간 이론 및 코딩 실습
12:30~13:20 50분 정리
14:00~17:00 3시간 이론 및 코딩 실습
17:00~18:00 1시간 정리

모델링

system 구축 시 구현 전 결정하는 모든 활동

  • 구축할 system 정의
  • 요구사항 정의
  • 구체적인 계획 (분석, 설계 활동)
  • 결과물: 모델
  • 표기법(notation): UML(Unipied Modeling Language)

구현

system 실제 구현

  • 소스코드, 컴파일, 디버깅
  • 결과물: 코드를 포함한 system
  • 프로그래밍 언어: Java

System 개발 절차

1. 요구사항 정의

2. 분석

3. 설계

4. 구현

(1~3): 모델링
(4): 프로그래밍


Java 개발환경 구축 => JDK

Java 특징

  • 객체지향언어이다(OOPL)?
  • OS 플랫폼에 독립적인이다.

플랫폼에 독립적이다는 뜻은?

File: ~.hwp / ~.docs ...

Applicaiton: 아래한글(hwp) / MS word ...

O/S(Operating System, 운영체제): windows, Linux ...

H/W(HardWare)

  • ~.hwp의 플랫폼은 아래한글(hwp)이다. 또한 플랫폼에 종속적이다. (아래한글에서만 작동)
    ~.docs의 플랫폼은 MS word이다. 또한 플랫폼에 종속적이다. (워드에서만 작동)

  • MS word의 플랫폼은 windows이다. 또한 플랫폼에 종속적이다.

  • OS의 플랫폼은 HW이다.

==>플랫폼이라는 것은 상대적인 것 !

Java는 OS에 독립적이다.

File: ~.java / ~.class
Application: Tool / JRE => JDK(java development Kit), Java Platform, Java Application, J2SE
O/S
H/W

~.java는 인간이 볼 수 있도록 만든 언어
~.class는 컴퓨터가 읽는 언어
=>~.java를 ~.clss로 변환하는 것을 compile이라고 한다.


용어 정리

  • End User
    그 제품이 사용 가능하도록 해주는 다른 사용자들을 배제하고, 마지막 단계에서 실제 사용하는 사람을 구분해 부르는 용어이다. 이 용어는 대부분 메인프레임 컴퓨터 제품 등에서 사용되며, PC 등에서는 그저 '사용자'라는 용어만으로도 충분하다.

  • JDK

    • Java Development Kit
    • java SE에서 만들어진 구체적인 소프트웨어. 각종 도구와 JRE가 포함
  • JRE

    • Java Runtime Environment
    • 자바가 실제 동작 하는데 필요한 라이브러리, 파일 등 포함
  • JVM

    • Java Virtual Machine
    • 자바가 실제로 구동하는 가상화된 환경
  • Java SE(Standard Edition)
    자바 스탠다드 에디션은 가장 보편적으로 쓰이는 자바 API집합체다. 예전에는 J2SE로 불렸으나 버전 6.0이후에 Java SE로 변경되었다. 이전에는 썬마이크로시스템즈에서 관리했으나 지금은 JCP주도하에 개발되고 있다. 일반 자바 프로그램 개발을 위한 용도로 사용되며 스윙이나 AWT와 같은 GUI방식의 기본 기능이 포함된다.

  • Java EE(Enterprise Edition)

    자바 엔터프라이즈 에디션은 자바를 이용한 서버측 개발을 위한 플랫폼이다. Java EE는 표준 플랫 폼인 Java SE를 사용하는 서버를 위한 플랫폼이다. 전사적 차원(대규모의 동시 접속과 유지가 가능한 다양한 시스템의 연동 네트워크 기반 총칭)에서 필요로 하는 도구로 EJB, JSP, Servlet, JNDI 같은 기능을 지원하며 WAS(Web Application Server)를 이용한 프로그램 개발 시 사용된다.

  • compile
    사람이 읽을 수 있는 언어로 작성된 파일을 컴퓨터가 이해하는 언어로 변환시켜주는 것.

    컴파일은 인간이 이해할 수 있는 언어로 작성된 소스 코드(고수준 언어 : C, C++, Java 등)를 CPU가 이해할 수 있는 언어(저수준 언어 : 기계어)로 번역(변환)하는 작업을 말한다.

    우리가 C, C++, Java로 작성하는 소스 코드는 컴퓨터가 이해할 수 없다. 컴퓨터는 0, 1로 이루어진 기계어만 이해할 수 있기 때문이다. 따라서 우리가 작성한 소스 코드를 컴퓨터가 이해할 수 있게 0, 1로 이루어진 기계어로 번역하는 컴파일 과정이 필요하다.

  • 모델링
    System 구축 시 구현 전 결정하는 모든 활동

  • OOP
    Object Oriented Programming(객체지향 프로그래밍)

    프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고, 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

    프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체(object)'라는 기본 단위로 나누고 이들의 상호작용으로 서술하는 방식이다. 객체란 하나의 역할을 수행하는 '메소드와 변수(데이터)'의 묶음으로 봐야 한다.

    encapsulation(캡슐화), Abstraction(추상화), Modularity(모듈성), Hierarchy(계층구조), Object, Class, Polymorphism(다형성), Relationship

  • OOPL
    Object Oriented Programming Language(객체지향언어)

  • Software Documendation
    컴퓨터 소프트웨어 와 함께 제공 되거나 소스 코드에 포함된 서면 텍스트 또는 그림입니다 . 문서는 소프트웨어 작동 방식이나 사용 방법을 설명하며 다른 역할을 맡은 사람들에게 다른 의미를 가질 수 있습니다.

    문서화 는 소프트웨어 엔지니어링의 중요한 부분입니다. 문서 유형은 다음과 같습니다.

    요구 사항 – 시스템의 속성, 기능, 특성 또는 품질을 식별하는 설명입니다. 이것이 구현되거나 구현된 것의 기초입니다.
    아키텍처/설계 – 소프트웨어 개요. 소프트웨어 컴포넌트 설계에 사용되는 환경 및 구성 원칙과의 관계를 포함합니다.
    기술 – 코드, 알고리즘, 인터페이스 및 API 문서화 .
    최종 사용자 – 최종 사용자, 시스템 관리자 및 지원 담당자를 위한 설명서입니다.
    마케팅 – 제품을 마케팅하고 시장 수요를 분석하는 방법.

  • URL
    (Uniform Resource Locator)은 인터넷에서 웹 페이지, 이미지, 비디오 등 리소스의 위치를 가리키는 문자열입니다. HTTP 맥락에서 URL은 "웹 주소" 또는 "링크"라고 불립니다.

  • UML
    Unipied Modeling Language
    통합 모델링 언어
    시스템을 모델로 표현해주는 대표적인 모델링 언어

  • Notation
    표기법

  • CLI
    Command Line Interface
    가장 대표적인 예시로는 도스, 명령 프롬프트, bash로 대표되는 유닉스 셸 환경이 있다. macOS에서는 Terminal, windows의 Windows Terminal 등이 있다.

  • GUI
    Graphic User Interface


수업 내용

package jb01.part02;

/*
FileName: Hello.java
*/
public class Hello 
{
//1줄 주석: 컴파일시 주석문은 컴파일시 제외)
//java 실행에 필요한 method : main method
	public static void main(String[] args) 
	{ 
		System.out.println("Hello Java :: 안녕 자바");
	} //end of main
}// end of class

/* => 다줄문 주석: 컴파일시 제외

	<<주의사항 및 약속사항>>
	1. class name과 file name은 동일해야 한다.
	ex) public class Hello 면 ===> Hello.Java (File Name)
	2. 대소문자를 구별
	3. 실행시 public static void main (String[] args) 필요
	4. System.out.println( ~~~); ==> console 출력
	5. Hello.java 컴파일 후 Hello.class(ByteCode) 생성 확인
	
<< Console(DOS화면)에서 compile & run >>

1. File save 
  - FileName : Hello.java ===> FileName과 ClassName은 동일
  
2. Compile 
	1) file 저장 directory로 이동 후 conpile ==> javac 확장자포함 FileName
	c:\work>javac Hello.java
	2) classFile 생성 확인 ==> byte code 생성 확인 (Hello.class)
	c:\work>dir
	
3. 실행
	3) run ==> java 확장자를 제외한 FileName
	c:\work>java Hello
	
	<< EditPlus 환경설정: 컴파일, 실행 등록하기 >>
	===> 문서/영구적설정에서 등록할 수 있음
	

package jb01.part03;

/* 
FileName : Hi.java
*/
public class Hi 
{
	public static void main (String[] args)
	{
		System.out.println("1번째 정보: "+args[0]);
		System.out.println("2번째 아구먼트: "+args[1]);
		System.out.println("3번째 인자: "+args[2]);
	}//end of main
}//end of class


/*
	1. compile 방법 (Console에서)
		c:\work>javac Hi.java
		
		====> bytecode 생성 Hi.class: 확인할 것
		
	2. 실행 방법
		java Hi 홍길동 1234 한양 5678
		
	===>Hi.class를 실행 시 java Hi 후단에 추가적 정보를 입력하면
	===>main method 내부에서
	===>1번째 추가적 정보는: args[0]
	===>2번째 추가적 정보는: args[1]
	===>3번째 추가적 정보는: args[2]
	===>로 받아 처리할 수 있다.
	
	3. +(연산자): 문자에 + 를 사용하면 append 된다.
	
	4. editplus 에서 인자값 받기 설정
		문서/영구적설정/사용자도구/인수내용묻기 check
*/

package jb01.part04;
/*
	FileName : PrimitiveTest.java
	
	1. Java 에서 제공되는 8EA의 Primitive Data type의 이해
	2. Variable declaration(변수 선언)과 Variable Assignment(값의 대입)
*/

public class PrimitiveTest
{
	//mian method
	public static void main(String[] args) {
	
	//논리형
	boolean boo = true;
	
	//문자형 
	char c = '홍';
	
	//정수형
	byte b = 127;
	//범위를 넘어서는 수를 담을 경우 문제 발생//==> compile error 발생( 확인요망)
	//byte b1 = 128;
	
	short s = 1000;
	int i = 1000;
	long l = 1000L;     // <===long의 경우 000l 또는 000L로 int와 구별

	//실수형
	float f = 1000.5F;  // <===float의 경우 000F 또는 000f로 double 과 구별
	
	//print() 와 println()의 차이점 <==실행결과를 확인함
	System.out.print("자바의 Primitive Data type 을 ++");
	Systme.out.println("::사용하여 표준출력장치로,,,"+":: 출력");
	
	//+ 연산자의 의미 (문자와 + 연산자가 사용되면 append)
	System.out.println("논리형 : "+boo);
	System.out.println("문자형 : "+c);
	System.out.println("정수형 byte : "+b);
	System.out.println("정수형 short : "+s);
	System.out.println("정수형 int : "+i);
	System.out.println("정수형 long : "+l);
	System.out.println("정수형 float : "+f);
	System.out.println("정수형 double : "+d);
	}//end of main
}//end of class

package jb01.part04;
/*
	FileName : CalculationTest.java
*/
public class CalculationTest
{
	//main method
	public static void main(String[] args) {
		
		int a;		// int data type variable a declaration
		a = 0;		// int data type variable a 에 value 대입
		int b = 1;	// int datatype variable b declaratio과 동시에 value 대입		
		int c = 2;
		
		// 변수의 값을 출력(문자 + 연산자 사용 ==> append)
		System.out.println("a = " +a+":b ="+b+":c ="+c);
		
		// 숫자 + 연산자 사용(계산)
		int sum = a+b+c;
		System.out.println("sum = "+sum);
		System.out.println("a+b+c = "+(a+b+c));     //==>아래 실행문과 출력 결과 비교
		System.out.println("a+b+c = "+a+b+c);		//==>위 실행문과 출력 결과 비교
		
		c = c+10;
		System.out.println("c=(c+10) : "+c);
	
		//연산 후 대입연산자 (+=) 사용 (c = c+10 동일한 의미)
		c += 10;
		System.out.println("c+=10 ="+c);
		
		//논리 반전 연산자
		boolean boo1 = true;
		boolena boo2 = ! boo1;
		
		System.out.println("boo1: "+boo1);
		System.out.println("boo2: "+boo2);
	} //end of mian
} //end of class

package jb01.part05;
/*
	FileName : CastingTest.java
	
	1.primitive data type의 형변환: 묵시적 형변환/명시적 형변환
	2.reference data type의 형변환: 묵시적 형변환/명시적 형변환 ===> 추후
*/
public class CastingTest
{
	public static void main(String[] args) {
	
	byte b1=100;
	byte b2=20;
	
	//==> compile error 발생 (확인요망)
	//==> 정수형의 계산은 int return
	//byte b3=b1+b2;
	
	//casting 연산자를 이용한 형변환 ===> 명시적 형변환
	byte b4 = (byte)(b1+b2);
	System.out.println("b4(b1+b2): "+b4);
	
	byte b5 = (byte)(b1+b4);
	//쓰레기값 출력(===> 실행시 출력결과 확인할 것)
	System.out.println("b5(b1+b4): "+b5);
	
	/====> 묵시적인 형변환
	int i1 = b1 + b2 ;
	System.out.println(i1);
	int i2 = b1 + b4;
	System.out.println(i2);

	//다른 data type 연산 ===> data type 이 큰 쪽으로 묵시적 형변환
	double test01 = 100 + 0.5;
	System.out.println(test01);
	//==>compile error 발생(확인요망)
	//int test02 = 100 + 0.5;
	
	//실수를 정수형에 대입하면 결과는 --->??
	int i3 = 201/2;
	System.out.println("i3(201/2): "+i3);
	
	//정수의 계산을 실수형에 대입한 결과는 --->??
	double d1 = 201/2;
	System.out.println("d1(201/2): "+d1);
	
	//정수 int Data 201을 실수 double Data Type으로 명시적 형변환 후 계산 결과를 double Data type으로 받으면 출력 결과는??
	double d2 = (double)201/2;	
	System.out.println("d2(201/2): "+d2);
	}//end of mian
}//end of class

package jb01.part06;
/*
	FileName : OperatorTest.java
	
	1. ++, --: 증가, 감소연산자
	2. % : 나머지 연산자
	3. 3항 연산자
	
*/
public class OperatorTest
{
	///main method
	public static void main (String[] args) {
	
	int value=1;
	
	//증감연산자의 사용
	value++:	//value++의미: 자기자신 1증가
	System.out.println("valus++: "+value);
	++value:	//++value의미: 자기자신 1증가
	System.out.println("++valus: "+value);
	
	value--: 	//value--의미: 자기자신 1감소
	System.out.println("value--: "+value);
	--value: 	//--value의미: 자기자신 1감소
	System.out.println("--value: "+value);
	
	//증가감소연산자 사용// ==> 주석을 풀면서 출력결과를 확인
	int temp = value++: //temp = value++를 의미: value의 값을 temp 대입 후 자기자신 1증가
	//int temp = value--: //temp = value--를 의미: value의 값을 temp 대입 후 자기자신 1감소
	//int temp = ++value: //temp = ++value를 의미: value 자기자신에 1증가 그값 temp 대입
	//int temp = --value: //temp = --value를 의미: value 자기자신에 1감소 그값 temp 대입
	System.out.println("temp: "+temp);
	System.out.println("value: "+value);
	
	//나머지 연산자 사용하기
	int temp01 = 5%2;
	int temp02 = 5%3;
	System.out.println("나머지 연산자: 5%2 ===> "+ temp01);
	System.out.println("나머지 연산자: 5%3 ===> "+ temp02);

	//삼항연산자 :: (조건)? 조건이 참이면 : 조건이 거짓이면 ;
	int temp03 = ( 1 <= 2 ) ? 3 : 4 ;
	System.out.println("삼항연산자: (1 <= 2) ? 3 : 4 ==> " +temp03);
	
	//int temp04 = ( 1 =< 2 ) ? 3 : 4 ; <== Compile Error 확인
	
	}//end of main
}//end of class


package jb01.part07;
/*
	FileName : IfElse01.java
	
	1. 비교연산자 연습
	2. 분기문 if - else 연습

*/

public class IfElse01
{
	//main method
	public static void main(String[] args) {
	
	//논리형 변수의 선언과 값의 대입
	boolean b1 = true;
	boolean b2;
	
	//! 반전연산자 사용
	b2 =!b1;
	int x = 1;
	itn y = 2;
	
	//if -els 가 같이 쓰이는 경우
	//if(조건문): 조건문은 반드시 boolean data type 일 것
	if(x<y){
	//if(0){ // ==> 주석풀고 컴파일 에러를 확인할 것.
		System.out.println("x= "+x+", y = "+y+ " y가 크네요");
	}else{
		System.out.println("x= "+x+", y = "+y+ " x가 크네요");
	}
	
	//if문 단독으로 쓰이는 경우
	if(x==y){
	//if(x = y){ //==>주석풀고 컴파일 에러를 확인할 것. 에러발생 이유는??
		System.out.println("x = "+x+", y = "+y+" x,y는 같아요");
	}

	//if - else if 가 쓰이는 경우
	if(b2){
		System.out.pirntln("if의 조건문이 b2= false입니다.");
	}else if(b1){
		System.out.pirntln("if의 조건문이 b1= true입니다.");
	}
	}//end of main
}//end of class

package jb01.part07;
/*
	FileName : IfElse02.java
	
	1. 조건연산자 연습
	2. 분기문 if - else 연습
	3. AND: &, && 연산자
	4. OR: |, || 연산자
*/

public class IfElse02
{
	//main method
	public static void main(String[] args) {
	
		int x = 1;
		int y = 2;
		
		//& ==> and 연산자
		if(x==3 & y==2){
		System.out.println("x=1이고 y=2입니다.");
		}
		//| ==> or 연산자
		if(x==1 | y==3){
		System.out.println("x=1이거나 y=3입니다.");
		}
		
		// && ===> and 연산자
		if(x==3 && y==2){
		System.out.println("x=1이고 y=2입니다.");
		}
		// || ===> or 연산자
		if(x==1 || y==3){
		System.out.println("x=1이거나 y=3입니다.");
		}
	
	
	/* 
		1. &&와 &, ||와 |는 수행결과는 같으나 
		2. 내부적으로는 수행방법은 엄격히 다르다.
		==> &와 |는 : 전부수행
		==> && 와 ||는 : 전자가 결과를 예측 가능할 경우 일부 수행하지 않음
	*/
	
	} //end of main
} //end of class

package jb01.part07;
/*
	FileName : IfElseETC.java
	
	1.문자를 int Data type 으로 변경하는 integer.parselnt() 사용
	2.특수문자를 사용하기 (\t, \n, \")
	
	실행방법 예 >> java IfElseETC 1 2
*/

public class IfElseETC
{
	//main method
	public static void main(String[] args) {
		// ==> \" 사용확인
		System.out.println("입력하신 \"1번째 인수\"는 : "+args[0]);
		System.out.println("입력하신 \"2번째 인수\"는 : "+args[1]);
		
		System.out.println("=====================================";
		
		//입력한 문자를 int Data type으로 변경 하는 integer.parselnt() 사용
		int i = integer.parselnt(args[0]);
		int j = integer.parselnt(args[1]);

		//i, j 변수에 값을 확인하자
		System.out.println("i="+i+"\t j="+j);		//<==특수문자 \t를 사용: 출력결과확인
		System.out.println("한줄처리\n");		//<==특수문자 \n를 사용: 출력결과확인
		System.out.println("=====================================");
		
		if(i>j){
			System.out.println("i가 j보다 큽니다.");
		}else if(i==j){
			System.out.println("i와 j는 같습니다.");
		}else if(i<j){
		System.out.println("i보다 j가 큽니다.");
		}
	} //end of main
} //end of class

package jb01.part08;
/*
	FileName : SwitchTest.java
	
	1.분기문 : switch 연습
*/

public class SwitchTest
{
	//main method
	public static void main(String[] args) {
		int inputData = integer.parselnt(args[0]);
		
		//switch문은 ()내부의 값과 case의 상수와 같으면 case 내부의 실행문을 수행
		//break문을 만날때까지 진행한다.
		
		//==> switch(변수) : 변수는 반드시 정수형일 것(byte,short,int,long,char. 5EA)
		switch(inputData)
		{
			case 1:
				System.out.println("입력하신 값은 1입니다.");
				break;
			case 2:
				System.out.println("입력하신 값은 2입니다.");
				break;
			case 3:
				System.out.println("입력하신 값은 3입니다.");
				break;
			case 4:
				System.out.println("입력하신 값은 4입니다.");
				break;
			case 5:
				System.out.println("입력하신 값은 5입니다.");
				break;
			default:
				System.out.println("case문을 다통과 동일상수가 없을 경우");
				System.out.println("default가 수행됨...입력하신 수는"+ inputData+"입니다.");
				break;
		}//end of switch
	} //end of main
} //end of class

/* 
case 1: 의 break를 주석처리하고 실행해 보면 어떤 결과가 나오는지 확인 ===> break의 역할은?
*/

profile
개발 입문자입니다

0개의 댓글