5/3 생활코딩 JAVA - 유효범위, 상속/생성자, 오버라이딩, 클래스패스
유효범위는 왜 나왔을까?
- 유효범위는 메소드나 변수의 이름이 중복되는 상황을 막기 위해 나왔을 것이다. a라는 변수를 철수도 나도 정의한다면 결국 프로그램이 실행될 때 충돌이 되므로, 각각의 변수와 용어가 어느 범위까지만 유효한지 제한을 둔 것이다. 같은 의미로, 우리는 변수나 그 외의 것들을 정의할 때 전역변수보다는 지역변수로 만들어 객체에서만 유효한 변수를 만드는 것이 좋을 것 같다.
int i 와 i의 차이점?
- 변수명 앞에 데이터 타입을 기재하는 것은 변수를 선언한다는 의미이다. 만약 선언 된 변수를 그냥 사용하는거라면 데이터타입 없이 변수 이름만을 써야 한다. 그래서 int i는 새로운 정수 type의 변수인 i를 선언한다. 이고 그냥 i는 이미 다른 곳 어딘가에서 정의 된 i를 불러온다는 뜻이다.
초기화가 생겨난 배경은 무엇일까?
- 인스턴스를 생성할 때 많은 기본작업이 필요할 수 있다. DB와 연결을 만들어 두어야 할 수도 있고, null값의 변수를 많이 만들어주어야 할 수도 있다. 이런 작업들을 편하게 할 수 있도록 인스턴스를 생성해버릴 때 아예 같이 만들어줘 버리면 시간과 코드를 단축시킬 수 있을 것이다. 따라서 인스턴스의 기본값을 설정해주거나 할 때는 초기값 설정을 하는 것이 도움이 될 수 있다. 이러한 초기값을 설정해주는 녀석을 생성자라고 하고, 생성자를 통해 맨 처음에 시작하고 준비시키는 작업을 초기화라 한다.
생성자란?
- 초기화할 때 준비할 여러 항목들을 생성해주는 장치를 생성자라 부른다. 생성자를 통해 처음에 어떤 변수가 어떤 값을 가진 채로 생성될 수 있는지 미리 설정할 수 있다. 자바는 만약 개발자가 생성자를 따로 정의해두지 않았다면, 기본적으로 생성자를 만들어준다. 물론 그 생성자는 빈 값이다. 아무런 값도 없다.
기술을 배우는데 있어 중요한 덕목은 이 기술을 언제 왜 쓸까 고민하는 것
기술에 붙은 이름도 결국 사람 사는 모습 본 떠 네이밍을 한 것이 아닐까
상속이란?
- 부모가 자식을 닮듯 부모의 클래스를 자식이 물려받는 것이다. 상속받은 자식 클래스는 부모 클래스의 메소드와 변수등을 이용하고 접근할 수 있다. 상식적으로 생각해본다면 부모가 먼저 준비가 되어야 자식도 생겨날 수 있다. (That's why we call 'super' first than constructor for childs) 즉, 부모에게 생성자가 필요하다면 생성자를 이용하여 초기화를 시켜주어야 자식도 생겨날 수 있다. 자식이 부모 클래스를 상속받고 새로운 인스턴스를 선언하는데 부모 클래스에서 설정해주어야 하는 초기값이 제대로 설정되지 않는다면 오작동한다.
오버라이딩이란? 유의사항은?
- 자식은 언제나 부모를 닮지만 그들과 똑같지는 않다. 그들 나름의 진화와 변형을 거치는데 이것은 프로그래밍 세계에서 오버라이딩이라고 할 수 있겠다. 부모클래스를 베껴온 후 자식클래스에서 부모클래스에 정의 된 여러가지를 자식클래스에서 재정의하고 새로운 변수값을 주는 등의 행위를 오버라이딩이라 한다. 그리고 자식클래스에서 오버라이드 할 때엔 꼭 @Override라고 명시해주자.
- 이 때 부모클래스와 반드시 타입은 맞춰주어야 한다. 예를들어 부모클래스에서 public static void a(); 라는 메소드가 정의 되었다면 자식클래스도 반드시 void는 유지해야 하는 것이다. 만약 void가 아닌 다른 타입을 삽입하고 싶다면 에러가 나기 때문에 새로운 메소드로 정의해주어야 한다.
상속과 생성자
- 자바는 엄격한 부모님이다. 부모클래스에 생성자가 있는데 만약 자식 클래스가 생성자를 만들지 않는다면 에러가 난다. 따라서 이를 해결하기 위한 방법은 2가지 인데 부모클래스에 기본생성자 (파라미터를 받지 않는 생성자)를 정의해주거나, 부모클래스의 생성자를 반드시 먼저 설정해주고 super(부모클래스 필수 파라미터1,2,3...) 그 다음에 자식 클래스의 생성자를 추가로 세팅해주어야 한다.
클래스패스?
- Java는 소스코드를 컴파일 해서 이것을 class로 변환 후 실행한다. class는 상호간에 소통이 가능하고 A라는 class에 있는 객체를 B라는 class가 불러다 쓸 수도 있다. 이 때 만약 B가 위치한 디렉토리와 A가 위치한 디렉토리가 다르다면 B를 실행할 때 A를 불러들일 수 없다는 에러가 난다. 따라서 다른 패키지에 위치한 class도 불러들일 수 있으며 class의 경로를 지정할 수도 있으며 그 class가 위치한 경로가 classpath이다.
- 유효범위는 메소드나 변수의 이름이 중복되는 상황을 막기 위해 나왔을 것이다. a라는 변수를 철수도 나도 정의한다면 결국 프로그램이 실행될 때 충돌이 되므로, 각각의 변수와 용어가 어느 범위까지만 유효한지 제한을 둔 것이다. 같은 의미로, 우리는 변수나 그 외의 것들을 정의할 때 전역변수보다는 지역변수로 만들어 객체에서만 유효한 변수를 만드는 것이 좋을 것 같다.
int i 와 i의 차이점?
- 변수명 앞에 데이터 타입을 기재하는 것은 변수를 선언한다는 의미이다. 만약 선언 된 변수를 그냥 사용하는거라면 데이터타입 없이 변수 이름만을 써야 한다. 그래서 int i는 새로운 정수 type의 변수인 i를 선언한다. 이고 그냥 i는 이미 다른 곳 어딘가에서 정의 된 i를 불러온다는 뜻이다.
초기화가 생겨난 배경은 무엇일까?
- 인스턴스를 생성할 때 많은 기본작업이 필요할 수 있다. DB와 연결을 만들어 두어야 할 수도 있고, null값의 변수를 많이 만들어주어야 할 수도 있다. 이런 작업들을 편하게 할 수 있도록 인스턴스를 생성해버릴 때 아예 같이 만들어줘 버리면 시간과 코드를 단축시킬 수 있을 것이다. 따라서 인스턴스의 기본값을 설정해주거나 할 때는 초기값 설정을 하는 것이 도움이 될 수 있다. 이러한 초기값을 설정해주는 녀석을 생성자라고 하고, 생성자를 통해 맨 처음에 시작하고 준비시키는 작업을 초기화라 한다.
생성자란?
- 초기화할 때 준비할 여러 항목들을 생성해주는 장치를 생성자라 부른다. 생성자를 통해 처음에 어떤 변수가 어떤 값을 가진 채로 생성될 수 있는지 미리 설정할 수 있다. 자바는 만약 개발자가 생성자를 따로 정의해두지 않았다면, 기본적으로 생성자를 만들어준다. 물론 그 생성자는 빈 값이다. 아무런 값도 없다.
기술을 배우는데 있어 중요한 덕목은 이 기술을 언제 왜 쓸까 고민하는 것
기술에 붙은 이름도 결국 사람 사는 모습 본 떠 네이밍을 한 것이 아닐까
상속이란?
- 부모가 자식을 닮듯 부모의 클래스를 자식이 물려받는 것이다. 상속받은 자식 클래스는 부모 클래스의 메소드와 변수등을 이용하고 접근할 수 있다. 상식적으로 생각해본다면 부모가 먼저 준비가 되어야 자식도 생겨날 수 있다. (That's why we call 'super' first than constructor for childs) 즉, 부모에게 생성자가 필요하다면 생성자를 이용하여 초기화를 시켜주어야 자식도 생겨날 수 있다. 자식이 부모 클래스를 상속받고 새로운 인스턴스를 선언하는데 부모 클래스에서 설정해주어야 하는 초기값이 제대로 설정되지 않는다면 오작동한다.
오버라이딩이란? 유의사항은?
- 자식은 언제나 부모를 닮지만 그들과 똑같지는 않다. 그들 나름의 진화와 변형을 거치는데 이것은 프로그래밍 세계에서 오버라이딩이라고 할 수 있겠다. 부모클래스를 베껴온 후 자식클래스에서 부모클래스에 정의 된 여러가지를 자식클래스에서 재정의하고 새로운 변수값을 주는 등의 행위를 오버라이딩이라 한다. 그리고 자식클래스에서 오버라이드 할 때엔 꼭 @Override라고 명시해주자.
- 이 때 부모클래스와 반드시 타입은 맞춰주어야 한다. 예를들어 부모클래스에서 public static void a(); 라는 메소드가 정의 되었다면 자식클래스도 반드시 void는 유지해야 하는 것이다. 만약 void가 아닌 다른 타입을 삽입하고 싶다면 에러가 나기 때문에 새로운 메소드로 정의해주어야 한다.
상속과 생성자
- 자바는 엄격한 부모님이다. 부모클래스에 생성자가 있는데 만약 자식 클래스가 생성자를 만들지 않는다면 에러가 난다. 따라서 이를 해결하기 위한 방법은 2가지 인데 부모클래스에 기본생성자 (파라미터를 받지 않는 생성자)를 정의해주거나, 부모클래스의 생성자를 반드시 먼저 설정해주고 super(부모클래스 필수 파라미터1,2,3...) 그 다음에 자식 클래스의 생성자를 추가로 세팅해주어야 한다.
클래스패스?
- Java는 소스코드를 컴파일 해서 이것을 class로 변환 후 실행한다. class는 상호간에 소통이 가능하고 A라는 class에 있는 객체를 B라는 class가 불러다 쓸 수도 있다. 이 때 만약 B가 위치한 디렉토리와 A가 위치한 디렉토리가 다르다면 B를 실행할 때 A를 불러들일 수 없다는 에러가 난다. 따라서 다른 패키지에 위치한 class도 불러들일 수 있으며 class의 경로를 지정할 수도 있으며 그 class가 위치한 경로가 classpath이다.
댓글
댓글 쓰기