Language

오버라이딩이란 조상클래스로 부터 상속받은 메소드의 내용을 변경하는것을 말한다. 상속받은 메소드를 사용하기도 하지만, 자손클래스에서 자손클래스의 용도에 맞게끔 변경해야하는 경우 사용된다. class Points{ protected int x; protected int y; String getLocation(){ String msg = "X : " + this.x + " Y : " + this.y; return msg; } } class Point3D extends Points{ protected int z; @Override String getLocation(){ String msg = "X : " + this.x + " Y : " + this.y + " Z : " + this.z; return msg; ..
우선 아래 자바코드를 보자. 이 자바코드는 간단하게 랜덤 덱을 생성하고, 덱에서 랜덤 카드를 뽑는 기능을 하고 있습니다. 이 코드를 실행하고 보면 이러한 결과가 나옵니다 Card2@6bc7c054 class Card2{ static int typeNumber = 2; static int MaxNumber = 10; static String[] types = {"Spade","Heart","Diamond"}; private String Shape; private int Number; Card2(String Shape, int Number){ this.Shape =Shape; this.Number = Number; } Card2(){ this(types[(int)(Math.random() * typeNumb..
초기화 초기화란 변수를 선언하고 처음으로 값을 저장하는것을 의미한다. 이 초기화 작업은 상황에 따라 필수적이기도 하고 필수적이지 않기도 하다. 다만, 지역변수는 사용하기 전에 꼭 초기화를 해주는것이 좋다. 멤버변수의 초기화는 지역변수와 달리 여러가지 방법이 있다. 명시적 초기화(explicit initialization) 생성자(Constructor) 초기화 블록(Initializtion Block) 인스턴스 초기화 블록 : 인스턴스 변수를 생성할 때 마다 실행되는 블록 클래스 초기화 블록 : 클래스 변수에 대해 초기화를 수행하는 블록 명시적 초기화 명시적 초기화는 일반적인 변수선언과 똑같은 방식이다. 다른 초기화 방법들 중 가장 우선시 고려되는 방법이다. class test{ private int co..
자바에서 문자열 보간표현식을 쓰려면 java.text.MessageFormat을 사용하면 된다. String (변수명) = MessageFormat.format("{0}, {1}",(변수0),(변수1)); import java.text.MessageFormat; class Car{ private String color; private String gearType; private int door; Car(String c,String g, int d){ color = c; gearType = g; door = d; } String returnColor(){ return this.color; } String returnGearType(){ return this.gearType; } int returnDoor(..
JVM은 Java Virtual Machine의 약자로 자바 가상 머신이다. JVM은 시스템으로 부터 프로그램을 수행하는데 필요한 메모리를 할당받고 JVM은 이 메모리를 용도에 따라 영역으로 나눠 관리한다. 이 영역에는 크게 3가지가 있다. 메소드 영역, 콜스택 영역, 힙 영역. 각 영역의 역할은 아래와 같다 1. 메소드 영역 특정 클래스가 사용되면 해당 클래스 파일을 읽어 분석후 클래스에 대한 정보가 저장되는 곳이다. 클래스 변수 또한 이곳에 저장된다 2. 힙 영역 인스턴스가 생성되는 공간이다. 프로그램 실행중에 생성되는 인스턴스가 모두 이곳에 생성된다. 즉, 인스턴스 변수가 저장되는곳이라고 생각하면 된다. 3. 호출스택 메소드의 작업에 필요한 메모리 공간을 제공한다. 작업을 수행하는 중간에 저장되는 ..
Object,즉 객체는 변경이 가능한 값이다. 프로퍼티를 삭제, 읽기, 갱신, 쓰기, 재정의 등을 할 수 있다. 자바스크립트에서는 이 객체의 가변성에 제한을 줄 수 있는 메소드들을 제공한다. 아래와 같이 세가지가 존재한다 구분 메소드 프로퍼티 추가 프로퍼티 삭제 프로퍼티 값 읽기 프로퍼티 값 쓰기 프로퍼티 어트리뷰트 재정의 객체 확장금지 Object.preventExtensions X O O O O 객체 밀봉 Object.seal X X O O X 객체 동결 Object.freeze X X O X X 객체 확장 금지 객체 확장 금지는 Object.preventExtensions메소드로 객체 확장을 금지한다. 객체 확장을 금지한다는 것은 프로퍼티 추가하는것이 제한된다는 것을 의미한다. 프로퍼티 동적 추가,..
자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본값으로 정의하게 된다. 프로퍼티의 상태에는 아래 네가지가 존재한다 value 프로퍼티 값 writable 값 갱신 가능여부 enumeratable 열거 가능여부 configurable 재정의 가능여부 이는 자바스크립트 엔진에서 관리하는 내부슬롯 [[value]], [[writable]], [[enumerable]], [[configurable]]값들이다. 이 어트리뷰터에 직접적인 접근은 안되지만 Object.getOwnPropertyDescriptor메소드를 사용해서 간접적으로 확인할 수 있다. Object.getOwnPropertyDescriptor 메소드의 첫번째 매개변수에는 객체가, 두번째 매개변수는 프로퍼..
ES5+까지는 var로 변수를 선언했어야 하는 반면에 ES6부터는 var, let, const를 사용해서 변수를 선언할 수 있다. 여기서 가장 크게 var 과 let은 상수가 아닌 변수를 선언한다라는 공통점이 있지만, 서로간의 성격이 다르다. 결론부터 말하면 let은 var키워드가 가진 여러 단점들을 보완하기 위해 나타난 키워드라고 생각하면 된다. 그렇다면 어떤 차이점이 있을까? 1. 변수 중복 선언 금지 var키워드 같은 경우에는 중복 선언이 가능했었다. 하지만 let키워드는 중복선언이 되지 않는다. var a = 10; var a = 30; let b = 20; let b = 30; // Syntax Error 2. 블록 레벨 스코프 vs 함수 레벨 스코프 var 키워드 같은 경우에는 함수 레벨 스코..
자바스크립트에서 변수선언에 있어 키워드로 var, let, const가 있다. 그 중 var의 특성중 하나가 함수레벨 스코프이다. 일반적인 C,Java같은 언어에서는 함수 뿐만 아니라 모든 코드블록(반복문, 조건문 등) 에서 지역 스코프를 만들게 된다. 이러한 특성을 블록 레벨 스코프라고 한다. 자바스크립트에서 변수 선언문 let키워드가 블록레벨 스코프 성격을 띄고있다. 반면 자바스크립트에서 var 키워드 같은 경우에는 '함수의 코드 블록'만 지역 스코프로 인정하게 된다. 이러한 특성을 함수레벨 스코프라고 한다. 예시를 들어보면 아래와 같이 들 수 있다. var a = 10; for(var i = 0;i < 3; i++){ var a = i; console.log(i); // 0 1 2 } functio..
취미로 하고싶은 무언가를 정하고 싶어서 곰곰히 생각해 보다가 이미 애플로 도배된걸 보고, IOS프로그래밍에 접근해 보고싶었습니다. IOS프로그래밍을 위해서는 Swift 혹은 Objective - C를 사용해야하는데, Objective - C는 레거시 느낌이고 최근에는 Swift 4,5를 주로 씁니다. 그냥 취미로 하는것이기에 깊게 들어가진 않을꺼고... 그냥 생각나면 뭔가 만들수 있을정도의 숙련도만 기르려고 합니다. iOS개발이 아닌 Swift만 하기 위해서는 Linux Ubuntu 혹은 Mac OS가 필요합니다. 단, iOS개발을 하기 위해서는 맥 계열의 컴퓨터가 필요하니 참고하자. ubuntu에서 swift 실행을 위해서는 아래 링크에 있는 방법을 참고하고, 맥 계열에서 swift를 실행하기 위해서는..
a = ['a','b','a','b','c','d','a','e'] 라는 리스트가 있다고 하자 여기서 'a'가 모두 삭제된 리스트를 반환하고 싶을때는 다음과 같이 매직메소드 __ne__와 filter()를 활용하면 된다. -> a = list(filter(('a').__ne__, a)) 이왕 이렇게 된거 매직메소드 __ne__에 대해 알아보자 __ne__(self,other)에서는 x!=y가 정의된다. 결론적으로 저 코드문을 해석해 보면 a의 각 원소들에 대해서 a!=(원소)를 판별하고 만약 a != a 가 False로 나올경우 a를 지우게 되는것이다
f- string을 사용하면서 신기한것을 발견했다.(당연한거지만 내가 모른걸수도 있지만...) 다음과 같은 코드가 있다고 보자. 이 코드를 실행하면 다음과 같은 결과가 나오게 된다. 여기서 print(f'{i : 4}') 줄에 주목해 보자. 이 부분을 해석해 보면,i의 값을최소 네 자릿수에 맞추에서 출력하겠다는 것을 의미한다. 그렇기때문에 세자리수인 100에서 1부분을 보면 위의 두자리수들에는 공백이 되어있는것을 알 수 있다.
Hoplin
'Language' 카테고리의 글 목록 (3 Page)