Archive

2020-12-14 TIL

|

2020-12-14 TIL


  • 오늘 한 것
    1. 배열 응용문제 숙제 13번까지 완료 - 가위바위보게임, 야구게임, 약수구하기, 2진수 바꾸기 등 다양한 응용문제들을 풀었다. 머리로만 알던 것들을 컴퓨터적으로 ‘어떻게 로직을 세우고 구현을 할까’ 생각이 들게 만드는 문제들이었다. 남은 5문제는 더 어려운데…큰일이다
    2. 학원 비대면 수업 (객체지향) - 생성자,static,this에 대해서 개념이 부족했었는데 수업을 듣고서 확실히 이해를 했다.
    3. 블로그 포스팅 (java day10 정리, Javascript Day1) - javascript 기초 공부 시작, js를 기초지식 없이 튜토리얼로 대충배워서 개념정리를 한 번은 꼭 해야겠다고 생각했었다. 프레임워크나 라이브러리를 시작하기 전에 js 코어를 먼저 공부하는 것이 좋다고 들어왔고 나역시도 그렇게 생각을 해왔다. 빡세게 가보자;;
    4. Javascript30 Tutorial Day 24 - 이번에 배운 것은 scroll을 내리면 nav에 숨겨진 logo가 튀어나오고 누르면 home으로 갈 수 있는 기능을 구현하는 js skill이다. 정말 간단한 것이라 특별하거나 복잡한 구조는 하나도 없다. 그저 offset이나 scroll 좌표값 등 기초가 부족할 뿐…

  • 내일 할 것
    1. 이것이 리눅스다 Chapter 09 원격지 시스템 관리 끝내기
    2. 배열 응용문제 숙제 완료
    3. Javascript30 Tutorial Day 25
    4. 학원 수업(15:30~22:00) 배열 응용문제 문제풀이
    5. 블로그 포스팅 (Java Day 11, Javascript Day 2)

  • 끝으로

연말연초 잠수

오늘의 한 줄 총평 : 금주


JS Day 1 변수,자료형,연산자

|

JS Day 1 변수,자료형,연산자


  1. 변수 let, const, var

    • let : 모던스크립트에서는 var대신 let을 쓴다

    • const : 변하지 않는 변수(상수) 선언시

    • var : 블록 개념이 없어서 변수 선언시 외부에서 접근이 가능하다 (함수 내 선언 제외)

      ​ 함수의 재선언이 가능하다

      ​ 함수 선언 전에도 사용이 가능하다 (호이스팅 hoisting)

      ​ 선언은 호이스팅이 되지만 할당은 안됨

  2. 자료형

    • 동적 타입(dynamically typed)언어로 자료형을 명시하지 않는다
    • 문자형 : “”, ‘’, `` / 큰,작은 따옴표는 똑같음 / 백틱(backtick)은 중간에 연산식을 넣을 수 있음
    • 숫자 : bigint 는 숫자 뒤에 n을 붙여 사용 (9007199254740991 보다 큰 값)
    • null 은 비어있는 값을 나타낼 때 사용
    • 값을 할당하지 않으면 undefined 출력
    • 객체형 : 복잡한 데이터 구조를 표현할 떄
    • 심볼형 : 객체의 고유 식별자를 만들때 사용
    • 자료형을 알 때 : typeof a 혹은 typeof(a)
  3. 형 변환

    • 수학 연산자 + 문자열 = 문자열이 숫자형으로 자동변환
    alert("6" / "2"); // output : 3
    alert("6" * "2"); // output : 12
    
    • Number(value) -> 숫자형으로 명시적으로 변환 (null = 0, undefined = NaN)
    • Boolean(value) -> 숫자0,빈 문자열,null,undefined,NaN 등은 false 그 외엔 true 로 변환
    • String(value) -> 문자형으로 명시적 변환
  4. 기본 연산자

    • 단항 연산자
      • 단항 + 연산자 : 숫자 이외의 자료형을 숫자형으로 변환 (Number(…)와 같은 기능)
    let A = "3";
    let B = "5";
    console.log(A + B); //output : 35
    console.log(+A + +B); //output : 8
    
    • 이항 연산자
      • 문자열과 숫자열의 + 연산자
    let A = "2";
    let B = 2;
    let C = "2";
    console.log(A + B + C); //output : 222
    
    let A = 2;
    let B = 2;
    let C = "2";
    console.log(A + B + C); //output : 42
    
    • 거듭제곱 연산자 : ** ex) 2 ** 3 = 8
    • 할당 연산자의 값 반환 : A = value ex) value 를 A에 대입하고 value 반환
    let A = 2;
    let B = 3;
    let C = 10 - (A = B + 3);
    console.log(A); //output : 6
    console.log(C); //output : 4
    
  5. 비교 연산자

    • 문자열과 숫자열 비교시 숫자로 변환하여 비교
    let A = 0;
    let B = "0";
    console.log(A == B); //output : true
    
  6. 일치 연산자

    • === 일치 연산자
    let A = 0;
    let B = false;
    console.log(A == B); //output : true, false는 숫자 0으로 간주한다
    console.log(A === B); //output : false, 자료형이 다르므로
    

참고 자료


JAVASCRIPT.INFO

Java Day 10 생성자,this,static,final

|

Java Day 10 생성자,this,static,final


Java Day 9에 이어서

  1. 생성자

    • new 연산자로 객체가 생성될 때 호출되어 초기화를 담당

    • 반환형(return value)이 없다

    • 생성자를 안만들면 default 생성자 자동 생성

    • 하나의 클래스에는 인자의 수가 다르거나 자료형이 다른 생성자가 여러개 있을 수 있다. (생성자 오버로딩)

  2. this

    • 한 클래스 내에서 전역변수와 지역변수가 겹치는 영역에서 지역변수가 우선이다
    public class Ex{
    	int var;
    	public void setVar(int var){
    		var = var;	//전역변수와 지역변수가 겹침
    	}
    	public int getVar(){
    		return var;
    	}
    	public static void main(String[] ar){
    		Ex me = new Ex();
    		me.setVar(1000);
    		System.out.println("var = : "+me.getVar()); 
    		} // output : var = 0;
    

    전역변수가 우선이게 하려면? this를 붙인다.

    • 위의 코드에서 this.var = var;로 바꾸면 원하는대로 1000이 출력된다
    • this는 객체 자신의 참조
    • this()는 현재 객체의 생성자를 의미 (반드시 첫줄에 적여야한다)
    • 다른 생성자에서 this()로 기존의 코드를 호출하고 새로 실행문 추가 => 생성자 오버로딩
  3. static

    • static(고정된)이 붙은 필드와 메소드는 정적 필드(클래스 변수), 정적 메소드라고도 한다

    • static 특징

      1. 메모리를 공유한다

        -> static변수가 바뀌면 모든 객체의 변수값이 변경된다

      2. static은 가장 먼저 메모리에 잡힌다

        -> 객체를 생성하지 않고 클래스명으로 접근 가능

      3. static은 한 번만 초기화 된다

        -> static은 별도의 초기화 구문을 가진다

      4. static메소드 안에서 static 변수만 사용이 가능하다

        static 변수는 static메소드 안에서만 사용이 가능하다

        예외) 클래스의 멤버 메소드일 경우 static변수 사용 가능

    public class StaticEx{
    	private int x;
    	public static int y;
    	static { //static 초기화 구문
    		y = 20;
    	}
    	public int getX(){
    		return x;
    	}
    	public static void main(String[] ar){
    		System.out.println("y = "+StaticEx.y); //클래스명으로 접근 가능, 20출력
            StaticEx.y = 100; // 값 변경
            StaticEx se = new StaticEx();
            System.out.println("x = "+se.getX()); //x,getX()메소드는 정적멤버가 아니므로 객체를 만들어서 사용해야함
            System.out.println(se.y); // 100 출력, 변경된 값으로 출력된다
    	}
    }
    
  4. final

    • 더 이상 변경이 불가한 상수의 의미를 가짐

    • static final로 주로 상수 지정함

    • 상수는 대문자로 표기


참고 자료


이것이자바다

자바프로그래밍100% 실전가이드

KG아이티뱅크 자바 강의자료

2020-12-11 TIL

|

2020-12-11 TIL


  • 오늘 한 것
    1. Linux/CentOS (XRDP 서버구축, 9챕터 네임서버 설치와 운영 캐싱전용 네임서버의 구현까지)

      – DNS서버의 개념에 대해 이해를 했다. 개략적으로 이해한 내용이라 세세한 사항들은 따로 네트워크를 깊이 팔 때 공부를 해야겠다. 네트워크도 알아야 할게 참 많구나…🙄

    2. 학원 비대면 수업 (객체지향) - class라는 것에 대해서 알쏭달쏭했던 것들이 수업을 들으면서 퍼즐이 맞춰지는 느낌이었다. 혼자 자바 입문서를 독파하면서 개념이 뜨문뜨문 잡혀있던 것들이 이해가 가기 시작했다. 얼른 객체로 무언가를 만들고 싶다.

    3. 블로그 포스팅 (java day9 정리)

    4. 배열 응용문제 숙제 6번까지 풀었다. 전체 18번까지인가? 이제 내용이 슬슬 어려워지고 있다. 한 문제 한 문제 곰곰히 생각하고 로직을 짜야하는데 확실히 훈련은 많이 되는 것 같다.


  • 내일 할 것
    1. 할머니랑 형네 신혼집에서 점심식사
    2. 친구 결혼식 참석
    3. 친구네서 연말 송년회

  • 끝으로

내일은 사실상 비번인 날. 연말이라 행사가 많다.

오늘의 한 줄 총평 : 그날그날 해야할 것들을 미루지 말자


Java Day 9 객체지향 프로그래밍

|

Java Day 9 객체지향 프로그래밍


  1. 객체지향 프로그래밍

    • OOP(Object Oriented Programming)

    • Object, Class, Instance

      • Object : 관념의 객체 (배가 고파서 와플을 생각)
      • Class : 설계도 (와플을 찍어내는 틀)
      • Instance : 개체, 실제의 객체 (먹을 수 있는 와플 한 개)
    • 특징 : 캡슐화(은닉화), 상속, 다형성, 추상화

      • 캡슐화(은닉화) : 객체의 필드, 메소드를 하나로 묶고 구현 내용을 감추는 것
      • 상속 : 상위 객체가 하위 객체에게 필드와 메소드를 물려주는 것
      • 다형성 : 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용하는 것
      • 추상화 : 공통된 속성, 성질을 뽑아내는 것
  2. 클래스

    • 클래스의 구조 : (접근제한자) (클래스 종류) class 클래스명
    • 클래스의 구성 : 필드, 생성자, 메소드
    • 멤버필드 = 필드 = 멤버변수 : 특징, 속성을 담아둔 변수 혹은 상수
    • 생성자 : 외부에서 객체 생성시 초기화를 담당, 안적으면 default
    • 멤버 메소드 : 특정한 일을 수행하는 함수
    public class Car{...}
    Car myCar = new Car(); // new 연산자로 생성자를 호출하여 생성
    
  3. 접근제한자

    • public : 모든 접근 허용
    • protected : 같은 패키지 내에 있는 객체와 상속관계 객체 허용
    • default : 같은 패키지 내에 있는 객체들만 허용 (안적으면 default)
    • private : 현재 객체 내에서만 허용
  4. 메소드

    • instance 메소드와 static 메소드로 나뉨
    • 메소드의 구조 : (접근제한자) (지정어) (반환형) (메소드명) (자료형 인자 ….){수행문}
    • 반환형 : 반환하는 값의 자료형을 의미 =return value, 반환값이 없으면 void
    • 메소드는 입력값으로 parameter 혹은 argument를 받는다
      • Parameter : 매개변수, 메소드 입력 변수명
      • Argument : 인자, 메소드 입력값, 호출시 자료형과 개수 일치해야함
  5. 인자값 전달 방식

    • Call by value (값 호출)

      기본 자료형의 값을 인자로 전달하는 방식

    public class ValueParameter{
    	public int increase(int n){
    		++n;
    		return n;
    	}
    	public static void main(String[] ar){
    		int var1 = 100;
    		ValueParameter vp = new ValueParameter();
    		int var2 = vp.increase(var1);
    		System.out.println("var 1 : "+var1+", var2 : "+var2);
    		}
    }// output : var 1 : 100, var 2 : 101
    

    파라미터로 var1을 받는 순간 static 영역에서 n의 저장소를 만들어서 var1의 값을 받아오고 메소드를 수행한 뒤 var2에 값을 넘겨주고 n은 사라진다.

    • Call by reference (참조 호출)

      참조 자료형의 주소값을 인자로 전달하는 방식

    public class ReferenceParameter{
    	public void increase(int[] n){
    		for(int i=0; i<n.length; i++)
    			n[i]++;
    	}
    	public static void main(String[] ar){
    		int[] ref = {100,200,300};
    		ReferenceParameter rp = new ReferenceParameter();
    		rp.increase(ref);
    		for(int i=0; i<ref.length; i++)
    			System.out.println("ref["+i+"] : "+ref[i]);
    		}
    }// output : ref[0] : 101 ref[1] : 201 ref[2] : 301
    

    ref는 100번지의 주소값으로 heap 영역에 인덱스0,1,2의 값을 참조하고 있다. 파라미터로 ref를 받는 순간 static 영역에 만들어진 n도 동일하게 100번지를 가르키고 있고, 연산을 수행한 뒤 사라진다

    • Variable Arguments (참조 호출의 기능 추가(?))

    java 5.0 에서 추가된 기능으로, …으로 배열로 인자를 받겠다는 것

    인자의 개수가 다를때 쓰인다.

    public class VariableEx{
    	public void argTest(String...n){
    		for(int i=0; i<n.length; i++)
    			System.out.println("n["+i+"] : "+n[i]);
    		System.out.println("--------------------");
    	}
    	public static void main(String[] ar){
    		VariableEx ve = new VariableEx();
    		ve.argTest("1", "22");
    		ve.argTest("100", "220","가나다");
    		}
    }// output : 2개의 인자를 갖는 배열과 3개의 인자를 갖는 배열 생성
    
  6. 메소드 오버로딩

    • 하나의 클래스에서 같은 이름을 갖는 메소드가 여려개 정의되는 것
    • 단, 자료형이 다르거나 인자의 개수가 달라야한다
    public class OverloadingEx{	
    	public void getLength(int n){
    		String s = String.valueOf(n);
    		getLength(s);
    	}
    	public void getLength(float n){
    		String s = String.valueOf(n);
    		getLength(s);
    	}
    	private int getLength(String str){
    		System.out.println("입력한 값의 길이 : "+str.length());
    		return 0;
    	}
    	public static void main(String[] args){
    		OverloadingEx oe = new OverloadingEx();
    		oe.getLength(1000); //output : 4
    		oe.getLength(3.14f); //output : 4
    		oe.getLength("1000"); //output : 4
    	}
    }
    

참고 자료


이것이자바다

자바프로그래밍100% 실전가이드

KG아이티뱅크 자바 강의자료

argument와 parameter 차이점