혜니니의 공부방

교내 JAVA특강 day1 본문

공부 기록/자바 프로그래밍 기초

교내 JAVA특강 day1

니니혜 2021. 1. 11. 23:15

학교에서 수업하는 java web 실무 특강을 수강하게 되었다. 일단 배운거를 정리하기 위하여 ㅠㅠ 적어본다.

 

수업은 자바에 대한 기초적인 지식이 있는 친구들에 맞춰서 진행됐다. 중간에 건너뛴 부분이 많아 우려한 부분이 있었는데 아니나 다를까 중간에서는 이해 못하는 부분 발생.. 예복습하고 가야겠다 이거 거의 계절학기 급인거 같다.흑흑

이거하고 토익하고 새벽에 자야지.

 

day1 

 

 

JDK가 유료화가 되었다고한다. 처음 알았음. IntelliJ 도 추천하셨지만 수업때는 이클립스를 사용하기로 했다. 

처음에 학교와 유사한 환경 조성을 위해서 openjdk 11과 이클립스 설치를 했다. openjdk 15는 이클립스와 호환이 되지 않기 때문에 11로 낮췄다. 나는 너무 최신 버전 말고 2020.09월껄로 설치했다. 

 

 간략하게 java와 jsp MVC/ servlet에 대한 역사들을 훑고 현재의 웹사이트는 규모가 너무나 커지고 유지보수와 확장성에 대한 이슈가 많다. 즉 설계에 대한 이슈가 많아 만들기 전에 어떻게 만들 것인가에 대한 고민을 많이 한다고 한다.

예 ) Gof의 디자인 패턴23가지, 객체지향 설계원칙, Solid를 적용해서 개발(Refactoring이라고 한다.) 이러한 고민들을 해결하기 위해 많은 framework가 나왔다.(Spring, Structure... ) 

 

Framework= 다양한 디자인 패턴+ 다양한 라이브러리

 

M odel (JAVA)

V iew (JSP)

C ontroller (Servlet) 

 

객체란? 

1) 유형, 무형 모든것들 의미

2) 속성과 행위로

- Attribute: 객체의 고유한 데이터, 특징

- Behavior: 객체의 고유한 동작, 행위, 기능

 

JAVA의 특징 

1) OOP- 재사용 목적

2) Platform Independent- 어떤 운영체제에서든 모두 똑같이 실행된다.

3) security- 보안, 안전성 높음/ JVM이 메모리 관리를 자동적으로 실행, 프로그래머가 접근 못함

4) Web에서 돌아가는 Program 작성 가능 -Applet 기능

5) API제공 - 이미 만들어진 많은 class를 제공

6) C/C++보다 쉽다. 포인터개념, 다중 상속, 메모리 관리 개념이 없다.

 

JAVA의 문법 

 

변수를 사용하는 방식 : CamelCase

- 세미콜론으로 끝난다 ;;;;; 

주석 : // 한줄 /*~*/ 여려줄 주석, 부분 주석 /**~ */ Document 주석

 

*상수: 고정값(변경 불가)

final String NAME= "혜니니";

 

*변수: 값이 변할 수 있는 것 

String name= "혜니니";

 

** 변경 불가한 것은 all 대문자로 사용한다. 언더바를 쓰는 경우는 대문자+스페이스바가 필요한 경우, 소문자의 경우 대문자로 업해준다. 

class = 첫글자가 대문자

method = 첫글자가 소문자인데 괄호가 있을 경우

변수 = 첫글자가 소문자인데 괄호가 없을 경우

예) 메소드이름 userName / 클래스 이름 UserName / 상수 USER_NAME 

 

이 문법의 종류를 잘 구별할 것

 

 

문자형과 문자열

문자형: char (2byte) , 오로지 한 글자만 들어갈 수 있으며 ''(single)이다.

문자열: String타입 - 크기 없음, 한글자 이상을 저장한다 "" (double)로 사용해야함.
ex) String s= "A";(char과 완전 다름!!!)  /s= "안녕"; 

 

둘은 엄연히 구분해야한다.

 

자료형 primitive타입 (8가지)

byte(1bybyte(1byte) > char,short (2byte) > int(4byte)> long (8byte) > float(4byte)>double(8byte)
** float,double 은 실수형 저장 : 메모리 공간 내에서 실수형은 정수형보다는 저장하는 공간을 더 많이 차지한다.
long형을 float에 담을 수 있다. 하지만  float은 long에 담을 수 없다.

 

 * 형변환
 1) promotion : 작은 타입이 큰 타입 변수에 담을 때...  / 자동으로 변환된다. 
   int a=10;
  long b= a; // 이거 프로모션
 2) Casting : 큰 타입을 작은 타입에 담을때 / 자동 불가(Casting 연산자 필요)
  long b= 10;
  int a=b; // Error 발생;
  * 캐스팅 연산자를 이용해서 수정한다.
  int a= (int)b; //캐스팅했다 라고 이야기하는 것.
  

* boolean 형 : 1bit ( True or False 저장 가능)

 

ObjectType= ReferencesType(객체형) Primitive Type을 제외한 모든 타입으로

 

ex) class Test  > Test t;

    class Coconut > Coconut c; 

문자열 저장 > String str = "hello";

 

 

연산자

 

 산술연산자 관계연산자 대입연산자 비트 연산자

-
*
/
%
>
<
>= 크거나 같다
<= 작거나 같다
! = 같지 않다
== 같다.
a+b
a+=b > a=a+b
a-=b > a=a-b
a*=b > a=a*b
a/=b > a=a/b
a%=b > a=a%b
| :or
& :AND
^: XOR 양쪽이 같으면 F,다르면 T
논리 연산자 증감 연산자 조건 삼항 연산자
|| :OR 양쪽 중 하나만 TRUE면 T
&& : AND 양쪽이 모두 TRUE면 T
A++ 선대입 후 증가
++A: 선증가 후 대입
A--: 선대입 후 감소
--A: 선감소 후 대입

조건식 ? 결과 참일 경우: 거짓일 경우

EX) long seed=0
  Random r= (seed == 0)? new Random: new Random(seed);

> 변수 R에 있는 seed가 0과 같을 경우 참이면 Random 객체 생성 : 거짓이면  seed가 있는 random 객체 생성..? 이부분 헷갈리네..ㅜ 

 

제어문 

 

1) 조건문

 

if (조건문) {

실행문장;

} else if(조건문){

실행문장;

}

else{ 실행문장;}

 

switch(expr1){

case 1: 실행문장 break;

case 2: 실행문장 break ;

....

default: 실행문장 } ** expr1 =int/byte/short/char만 가능함.

 

2) 반복문

 

for ( 초기화; 조건식; 증감식){
   실행문장;
}
조건식과 증감식은 순서가 상관이 없다.
do_while문은 무조건 한번은 실행한다.
변수 초기화;
while(조건식){
  증감식;
 실행문장;
}
 변수 초기화;
do{
  증감식;
  실행문장;
} while (조건식);


break : break를 만나면 문장을 실행하지 않고 바로 stop! continue를 만나면 이하 문장을 실행하지 않고 다시 반복문을 실행한다. label >> break, continue 사용시 특정 위치로 가도록 하기 위해 label을 지정할 수 있다. 그러나 label 을 많이 사용하게 되면 프로그램 구조가 복잡하게 되므로 사용을 지양할 것!  

 

Method 메소드

 

특징 

-  객체 안에 선언되어 객체가 가지고 있는 기능이다.

-반드시  class 내부에 선언된다.

-호출해서 사용한다.(호출되기 전에는 실행 불가)

- 재귀호출이 가능하다.(자기 자신 안에서 자신을 호출할 수 있다.)

- Method 마지막 구현부에서 return 할 수 있다. (return은 상황에 따라 사용한다.)

- 재사용 목적이 강하다. 코드의 중복을 피할 수 있다.

 

작성법 

modifiers returnType methodname(데이터타입 변수...괄호 내 인수 = parameter = argument 라고 칭한다.

) {

 

  기능 구현; }

 

modifiers : 0개 이상 올 수 있다. 여러개 올 때 공백으로 구분하며 일반적으로 접근제한자 먼저 작성한다.

 

  • public : 어디서나 아무나 접근 가능
  • private : 하나의 class(객체) 내부에서 아무나 접근 가능, 외부 접근 불가, 자기 자신만 호출 가능
  • protected : 상속 관계라면 어디서나 접근 가능
  • (생략) :  같은 폴더(package) 내에서 접근 가능

returnType 

  • void: return 안함
  • Primitive Type 8가지 중 1개 혹은 오브젝트 타입 중 1개 ! : 리턴 값 작성 필요.

기타 제어자 

class 선언 part: final , abstract

변수 선언구: final, static

메소드 선언구 : final, static, abstract, synchronized(쓰레드 Thread : 동기화 블럭을 만들 때 사용)

 

괄호 내 인수 = parameter = argument 라고 칭한다.

 

호출 방법 

 

2번 >3번>1번 순으로 진행할 것. 

 

1) 가장 일반적인 방법

 : 가장 먼저 호출하려는 메소드를 감싸고 있는 클래스를 생성한다.

    class 이름 변수이름 = new class이름(); // 클래스의 객체를 생성한 것이다.= 메소드의 자리를 만들어준 것.

  생성된 객체변수를 이용하여 method를 호출한다.

    변수이름.method(값1,값2, .... ) ;

* 클래스가 존재하면 클래스도 하나의 데이터타입이 될 수 있고, 변수는 하나의 주소값이 된다.

그렇다면 예) Test t = new Test() 이러한 방식으로 대부분  선언하고 뒤에 t.메소드(값); 으로 호출하게 될 것이다.

 

 

2) static이 있는 경우

: 객체를 생성하지 않고 바로 호출이 가능하다. 

 class이름.method이름(값);

static은 정적인 공간으로 메모리낭비를 할 수 있다. 메모리를 생각하면서 사용해야한다. 편하다고 남발해서는 안됀다.

 

3) 하나의 클래스 내부에 호출할 때

 

this.method이름(값,값,... )  :전역변수

this.method이름(값,값,.... ) : 하나의 클래스 내에서 다른 method호출하는 것 

ths. (값 ,값, .. ) > 같은 클래스 내에서 다른 생성자를 호출한다. 키워드 생략이 가능하나 아아 이부분은 다시 공부할 것

 

오버로딩 Overloading

: 1개의 클래스에 메소드 이름이 여러개 있는 것,

 하나의 method이름을 가지고 기능을 다르게 구현하는 것.

 접근 제한자와 리턴타입이 같거나 달라도 상관 없고 Method이름은 무조건 같아야 한다.

 인수의 순서, 타입, 개수가 달라야한다!

class Test{
 public void aa(){}
 public void aa(int i){}
 protected int aa(String s){
    return 5; //이것도 오버로딩 되었다.
}
 public void aa(int i, String s){
오버로딩되었다.

 

왜 ? 사용자 편의성을 위해서  

 

오버로딩의 대표적인 메소드? println

 

 

 

내가 쓰려고  적는 이클립스 단축키

Ctrl + Shift + L : 단축키 리스트
Ctrl + 3 : Quick Access
Ctrl + M : 화면 최대화
Ctrl + W : 파일에디터 닫기
Alt + Shift + X, R : Run on Server
F11 or Ctrl + F11 : 최근 실행한 Run 실행
Ctrl + 1 : 에러난 곳(빨간 줄 표시)에서 누르면 레이어로 해결방법이 나옴.
Ctrl + D : 줄 삭제
Ctrl + Alt + 위/아래 : 줄 복사
Ctrl + J : 점증적 검색 -Ctrl + J 입력후 원하는 단어 입력하면 이클립스 하단바에 찍히고 바로 검색 가능
Ctrl + H : 검색 다이얼로그(메서드, 타입, 패키지 등 검색 가능)
Ctrl + / : 한줄 주석
Ctrl +Shift +/ : 여러줄 주석
Ctrl+ Z : 뒤로가기
Ctrl+Y : 앞으로
sysout + Ctrl+spacebar : System.out.println() 자동 완성

출처 - blog.outsider.ne.kr/243

'공부 기록 > 자바 프로그래밍 기초' 카테고리의 다른 글

교내 자바특강 day4  (0) 2021.01.15
교내 자바 특강 day3  (0) 2021.01.15
교내 자바특강 day2  (0) 2021.01.12
혼자 공부하는 자바 chap 01 변수  (0) 2020.12.03
Intelli J 설치  (0) 2020.12.01
Comments